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

bmf

Свой
  • Постов

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

  • Посещение

Репутация

0 Обычный

Информация о bmf

  • Звание
    Частый гость
    Частый гость

Контакты

  • Сайт
    Array
  • ICQ
    Array

Информация

  • Город
    Array
  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 нет.
×
×
  • Создать...