Перейти к содержанию
    

bmf

Свой
  • Постов

    146
  • Зарегистрирован

  • Посещение

Весь контент bmf


  1. У меня было примерно так, + еще процедура прерывания. static void _spiDMARead(byte *adr,int nbytes) { *pDMA5_PERIPHERAL_MAP = 0x5000; *pDMA5_CONFIG = 0; *pDMA5_IRQ_STATUS = (DMA_DONE | DMA_ERR); SSYNCA; OSSemSet0(semSPIDMAReady); unsigned long limit = SPI_TIMEOUT_LIMIT1MS; while(!(*pSPI_STAT & SPIF) && limit--) { delay100ns(); }; *pSPI_STAT=BIT_STAT_CLR; *pSPI_CTL=MSTR | RDBR_DMA/* | SIZE */; /* clear tx reg soformer data is not shifted out */ *pSPI_TDBR = 0xFFFF; /* start dma */ // dma enable irq sd_spidmaenable_interrupt(); // Configure DMA5 *pDMA5_CONFIG = WNR | WDSIZE_8 | DI_EN | RESTART; // Start address of data buffer *pDMA5_START_ADDR = (void*)adr; // DMA inner loop count (in elements) *pDMA5_X_COUNT = nbytes; // Inner loop address increment *pDMA5_X_MODIFY = 1; SSYNCA; *pDMA5_CONFIG = DMAEN | WNR | WDSIZE_8 | DI_EN | RESTART; SSYNCA; /* start SPI transfer RD */ *pSPI_CTL=SPE | MSTR | RDBR_DMA/* | SIZE*/; INT8U osErr; OSSemPend(semSPIDMAReady, 0, &osErr ); sd_spidmadisable_interrupt(); // polling variant /* // Wait for DMA to complete while (*pDMA5_IRQ_STATUS & DMA_RUN); sd_spidmastop(); limit = SPI_TIMEOUT_LIMIT1MS; while(!(*pSPI_STAT & SPIF) && limit--) { delay100ns(); }; *pSPI_CTL=MSTR | (TIMOD & 1); */ #ifdef USE_WB_CACHE FlushInvArea(adr,((byte *)adr)+nbytes); // in bytes #else dcache_invalidate_both(); #endif // restore (new) spi ctrl *pSPI_CTL=SPE | MSTR | (TIMOD & 1); //0x5C01; enable SPI, nondma tx mode, 8bit } static void sd_spidmadisable_interrupt(void) { unsigned savint; enter(savint); // disable Sport0 DMA RX interrupt *pSIC_IMASK &= (~(1<<13)); // spi (13 IVG10 ID=3) share IVG_PORTB leave(savint); SSYNCA; } static void sd_spidmastop(void) { // disable DMAs *pDMA5_CONFIG = 0; SSYNCA; }
  2. Да, клок для SPI в режиме DMA сделан криво. Кроме того что он не останавливается сразу, так он еще может остановиться посреди передаваемого слова и таким образом нарушить синхронизацию (для 537 битовую синхронизацию частично пофиксили, изменили бит SYNC в конфигурации DMA). Когда подключал SD карту пришлось дополнительно корретировать прием внешней логикой для прерывания потока. Ну а в остальном работает как описано в доках, ошибки в состоянии не должно возникать.
  3. Когдато и мне было нужно (ну очень давно), выдирал отсюда http://www.musicdsp.org/archive.php?classid=1
  4. Естественно пролазит через VR2 на базу Q4, умножаем ка Ky - и получаем ~5В. Надо дополнительно профильтровать подачу питания на VR2, т.е. добавить еще RC цепь.
  5. Защита AVR

    А может все гораздо прозаичней. Прога просто генерила из повторяющихся кусков в разных файлах (графика, текстуры для разных разрещений или др.), т.к. знала принцип и структуру данных. Естественно, RAR/Zip не обладает таким знанием (у него окно предсказания неск. кбайт). Так можно и 1000:1 налепить и даже без использования сжатия. Для сравнения тестить надо один файл, тогда видно какой алгоритм круче. Попробуйте вышей прогой сжать уже зазипованный - уверен получите 0.
  6. “И опыт, сын ошибок трудных, и гений, парадоксов друг…”
  7. Делал и работало, и даже быстрей и лучше чем на SPI (на 10..20% до 1.8 МБайт/сек) . Через SPI - основная проблема это невозможность останова DMA строго по окончанию байта, поэтому надо нестандартно изголяться для достижения битовой синхронизации. Еще SPI как правило занят, а на пустой SPORT можно напрямую (через 47 Ом) подцепить разъем SD. Но проблема есть, нельзя останавливать обмен, надо непрерывно включить DMA и по прерываниям анализировать ответ в буферах приема, и в следующие пустые дописывать на запись, в общем достаточно сложно (для новичков), но вполне может быть оправдано. Программная реализация на SPI по опросу (без DMA), довольно проста, но скорости не те и загрузка процессора 100%.
  8. судя по include файлам из дистрибутива - это 52x с добавленным SD интерфейсом
  9. сильно сомневаюсь, чтобы 64 бит и не хватило. А EMU COUNTER должен быть в списке регистров для просмотра в симуляторе, там и смотрите.
  10. Исли мерить такты с помощью CNT0..CNT3 (EMU Counter) то должно получиться. В железе по крайней мере работает. Управлять вкл./выкл. можно с помощью бита EMUCNTE в ICNTL.
  11. Здесь ошибочка. Размер страницы - это размер "column address" + поправка на разрядность. например: column address 512(A0-A8) для 16 разрядной SDRAM - размер странийы 1K
  12. И получите наложение спектра во всей красе. Примерно как полосу 24 кГц оцифовывать на 8-ми. В таких случаях применяют предварительно цифровую фильтрацию (например FIR фильтр с подавление что выше 4 кГк), и только потом можно "безболезненно" брать каждую 6-ю выборку.
  13. О красоте сказано было конечно образно, правильней сказать что, в большинстве случаев (90%) цепочка не нужна, это лишь специфика схемы подключения конкретного ADC (ну захотели ребята еще пару разрядов обеспечить). Типичные ADC от Texas tlv320aic (tlv320aic10,tlv320aic11,tlv320aic23,..tlv320aic33) как и новый SSM2602 от Analog не имеют этой фичи. И никто не указывает реальную частоту дискретизациии, т.к. простой anto-alias фильтр уже встроенный в ИС обеспечивает ее работу во всем диапазоне.
  14. Ну-ну, конечно если подать выше 48 kHz х 256/2 = 12.288/2 MHz, тогда может быть и будет залезание за частоту Найквиста. Только мне думается автор, просто говорит о реальном аудио диапазоне. Ну а фильтр, скорее именно для красоты (для снижения наводок за счет снижения входного сопротивления входа на высоких частотах -обеспечения высоких характеристик пребразования при любых условиях). Иначе фильтр был-бы на звуковые частоты. Texas например, не ставит.
  15. Да вы запутались. Применительно к sigma-delta ADC Fs-на графике предаточной функции есть частота дискретизации данных на вывод, и это не является реальной частотой дискретизации входного сигнала. Входной anti-aliasing фильтр в таком случае имеет частоту среза на MHz, при том всем, что мы работаем в аудио полосе, т.е. фактически только удаление мигагерцовых наводок в тракте. И практически легко реализуется внутри уже самой ИС. Исходный вопрос звучал так - надо аудио anti-aliasing фильтр или нет. Ответ - для sigma-delta ADC нет.
  16. Вы даже не знаете, что у Sigma-Delta ADC применяется оверсемплинг как правило более 20. Прежде чем категорично что-то заявлять, учите матчасть, тем более что это не более чем основы. С AD71144 имею дело непосредственно, и все подтвеждается как нельзя лучше практикой.
  17. Будьте спокойны, работает как раз по Найквисту. Это основы Sigma-Delta ADC. Если научная литература трудна для освоения, вот хотя бы из Wiki http://en.wikipedia.org/wiki/Delta-sigma_modulation .. which also avoids the use of high-precision analog circuits for the anti-aliasing filter.
  18. Ничего не надо. Реально дискретизация ведется на частоте несколько MHz - потом однобитовый сигнал преобразуется в N бит на частоте выборки - 8..48 кГц. Поэтому приведенная характеристика фильтра верна для всех частот. Это элементарная теория - верна для всех кодеков типа сигма ADC (в отличии от преобразователей, применяемых в MCU). Иногда может потребоваться небольшая RC цепочка на входе (на MHz) - и все. Сергей Борщ явно не в теме.
  19. scmRTOS (v3) blackfin

    Используется, посмотрите исходники ROM загрузчиков от analog. Еще используется для сохранения стека при прерываниях - порт bfin для RTEMS (cpu_asm.S).
  20. пару ссылок по теме http://www.elcp.ru/index.php?state=izd&amp...05&i_art=07 http://www.elcp.ru/index.php?state=izd&amp...02&i_art=10
  21. Все просто, горят от броска тока при включении. Посмотрите у них допустимый ток как правило не более 1А, а при пуске и 100 может быть, кроме того те что еще у вас еще работают - плавно с каждым пуском деградируют, так что ждите еще сюрпризов. Общие рекомендации для танталов: - не допускать пусковой ток и ток пульсаций больше допустимого, если не так, то ставить несколько в параллель или применить схему ограничения наростания напряжения при включении (для входа - делается на мощном полевике с емкостью на затворе), или просто когда допустимо, заменить на керамику или обычные.
  22. Все выше сказанное мной относится к SD (с MMC не работаю). А что там юзер или производитель накосячил, нет желания предугадывать. Работаю с большими SD от SanDisk, Transcend и Kingston и никогда такая проблема не возникает. Инициализирую сразу на частоте 25МГц, современные карты это позволяют.
  23. Как говорят: смотришь в книгу а видишь фигу :07: Вы точно чего то не дочитали у SD есть два режима - родной SD в котором действительно битовая синхронизация и SPI - в котором только байтовая. вы привели как раз как раз таблицу для родного SD режима (в котором и эффективно работать можно только с SD контроллером). А если таковые SD с битовой синхронизацией для SPI режима есть (в чем я сильно сомневаюсь) - то это не SD, т.к. они не будут отвечать спецификации И если у когото и вылезла она в середине байта, то это из за мягко сказать неумелости - карта не переведена в режим SD или сбои по фронтам линии clock. Только и всего.
  24. Полный бред, не вводите в заблуждение если сами не читали или не понимаете Спецификация на SD ... While the SD Memory Card channel is based on command and data bit streams which are initiated by a start bit and terminated by a stop bit, the SPI channel is byte oriented. Every command or data block is built of 8-bit bytes and is byte aligned to the CS signal (i.e. the length is a multiple of 8 clock cycles). ... Таблица Timing Values Ncr - Unit - 8 clock cycles ...
×
×
  • Создать...