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

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. В сети питания фон около 50мВ. ...

    Естественно пролазит через VR2 на базу Q4, умножаем ка Ky - и получаем ~5В.

    Надо дополнительно профильтровать подачу питания на VR2, т.е. добавить еще RC цепь.

  4. Где? Я вам скажу где, например.

    ..

    Вот такое встретилось. Так что, как говорится, никогда не говори никогда...

    А может все гораздо прозаичней. Прога просто генерила из повторяющихся кусков в разных файлах (графика, текстуры для разных разрещений или др.), т.к. знала принцип и структуру данных. Естественно, RAR/Zip не обладает таким знанием (у него окно предсказания неск. кбайт). Так можно и 1000:1 налепить и даже без использования сжатия.

    Для сравнения тестить надо один файл, тогда видно какой алгоритм круче.

    Попробуйте вышей прогой сжать уже зазипованный - уверен получите 0.

  5. Кабель короткий(писал чуть выше). Дисплей будет на плате без дополнительных кабелей и близко как сдрам.

    по идее должно работать ;)

    пины не буду ставить.

    “И опыт, сын ошибок трудных,

    и гений, парадоксов друг…”

  6. Делал и работало, и даже быстрей и лучше чем на SPI (на 10..20% до 1.8 МБайт/сек) .

    Через SPI - основная проблема это невозможность останова DMA строго по окончанию байта, поэтому надо нестандартно изголяться для достижения битовой синхронизации.

    Еще SPI как правило занят, а на пустой SPORT можно напрямую (через 47 Ом) подцепить разъем SD. Но проблема есть, нельзя останавливать обмен, надо непрерывно включить DMA и по прерываниям анализировать ответ в буферах приема, и в следующие пустые дописывать на запись, в общем достаточно сложно (для новичков), но вполне может быть оправдано.

    Программная реализация на SPI по опросу (без DMA), довольно проста, но скорости не те и загрузка процессора 100%.

  7. В release notes упоминается поддержка семейства Blackfin 51x. НО. Ни сайт AD ни Google ничего об этих процессорах не знает.. :05:

    Ни у кого нет какой либо информации об этом семействе?

     

    судя по include файлам из дистрибутива - это 52x с добавленным SD интерфейсом

  8. а если их больше чем длина счетчика?

    я имел ввиду есть какие-то встр. средства в VDSP для подсчета тактов (ведь есть они в ССS)?

    сильно сомневаюсь, чтобы 64 бит и не хватило. А EMU COUNTER должен быть в списке регистров для просмотра в симуляторе, там и смотрите.

  9. Есть у меня 4 микросхемы V54C3256164vbt7 они с организацией 16М*16 8k refresh 4 banks.

    Как я понял, 8k refresh -это page size?

    Здесь ошибочка. Размер страницы - это размер "column address" + поправка на разрядность.

    например: column address 512(A0-A8) для 16 разрядной SDRAM - размер странийы 1K

  10. Сейчас проведу эксперимент: возьму raw на 48 кГц и просто удаляя 6 выборок через одну сделаю из него 8 и попробую послушать(уже на частоте 8) что выйдет?

    И получите наложение спектра во всей красе.

    Примерно как полосу 24 кГц оцифовывать на 8-ми. В таких случаях применяют предварительно цифровую фильтрацию (например FIR фильтр с подавление что выше 4 кГк), и только потом можно "безболезненно" брать каждую 6-ю выборку.

  11. ..

    Подтвердите свое заявление ссылкой на конкретный документ имени Тексаса.

    О красоте сказано было конечно образно,

    правильней сказать что, в большинстве случаев (90%) цепочка не нужна, это лишь специфика схемы подключения конкретного ADC (ну захотели ребята еще пару разрядов обеспечить).

    Типичные ADC от Texas tlv320aic (tlv320aic10,tlv320aic11,tlv320aic23,..tlv320aic33) как и новый SSM2602 от Analog не имеют этой фичи.

    И никто не указывает реальную частоту дискретизациии, т.к. простой anto-alias фильтр уже встроенный в ИС обеспечивает ее работу во всем диапазоне.

  12. Ну-ну, конечно если подать выше 48 kHz х 256/2 = 12.288/2 MHz, тогда может быть и будет залезание за частоту Найквиста. Только мне думается автор, просто говорит о реальном аудио диапазоне.

    Ну а фильтр, скорее именно для красоты (для снижения наводок за счет снижения входного сопротивления входа на высоких частотах -обеспечения высоких характеристик пребразования при любых условиях). Иначе фильтр был-бы на звуковые частоты. Texas например, не ставит.

  13. Исходя из чего вы сделали такой вывод о моих знаниях? Повторю еще раз:Замечательное пожелание. Но пока что вы не показали, в каком именно месте мои утверждения (которые я аргументировал) противоречат поминаемым вами основам. Тогда ответьте на вопрос Linkera:

    А каково назначение этой "небольшая RC цепочка на входе" по Вашему?

    Да вы запутались. Применительно к sigma-delta ADC Fs-на графике предаточной функции есть частота дискретизации данных на вывод, и это не является реальной частотой дискретизации входного сигнала. Входной anti-aliasing фильтр в таком случае имеет частоту среза на MHz, при том всем, что мы работаем в аудио полосе, т.е. фактически только удаление мигагерцовых наводок в тракте. И практически легко реализуется внутри уже самой ИС. Исходный вопрос звучал так - надо аудио anti-aliasing фильтр или нет. Ответ - для sigma-delta ADC нет.

  14. Вы даже не знаете, что у Sigma-Delta ADC применяется оверсемплинг как правило более 20.

    Прежде чем категорично что-то заявлять, учите матчасть, тем более что это не более чем основы.

    С AD71144 имею дело непосредственно, и все подтвеждается как нельзя лучше практикой.

  15. Будьте спокойны, работает как раз по Найквисту.

    Это основы 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.

  16. Ничего не надо. Реально дискретизация ведется на частоте несколько MHz - потом однобитовый сигнал преобразуется в N бит на частоте выборки - 8..48 кГц. Поэтому приведенная характеристика фильтра верна для всех частот. Это элементарная теория - верна для всех кодеков типа сигма ADC (в отличии от преобразователей, применяемых в MCU).

    Иногда может потребоваться небольшая RC цепочка на входе (на MHz) - и все.

    Сергей Борщ явно не в теме.

  17. ..

    а с использованием Scratch памяти в качестве стека задач, какие-нибудь проблемы возможны?

    по DMA доступ не нужен, байтовый доступ ... можно сделать чтобы не было

    а я почему-то не встречал использования Scratch

    ни в каких примерах ldf, а тут проект без внешней памяти - каждый килобайт на счету ...

    Используется, посмотрите исходники ROM загрузчиков от analog.

    Еще используется для сохранения стека при прерываниях - порт bfin для RTEMS (cpu_asm.S).

  18. Все просто, горят от броска тока при включении. Посмотрите у них допустимый ток как правило не более 1А, а при пуске и 100 может быть, кроме того те что еще у вас еще работают - плавно с каждым пуском деградируют, так что ждите еще сюрпризов. Общие рекомендации для танталов:

    - не допускать пусковой ток и ток пульсаций больше допустимого, если не так, то ставить несколько в параллель или применить схему ограничения наростания напряжения при включении (для входа - делается на мощном полевике с емкостью на затворе), или просто когда допустимо, заменить на керамику или обычные.

  19. А с этого места подробно если можно...

    Все выше сказанное мной относится к SD (с MMC не работаю).

    А что там юзер или производитель накосячил, нет желания предугадывать.

    Работаю с большими SD от SanDisk, Transcend и Kingston и никогда такая проблема не возникает.

    Инициализирую сразу на частоте 25МГц, современные карты это позволяют.

  20. Всех датащитов на флеши не читал, но с десяток изучил...

    ...

    Страницу прикладываю..

    Как говорят: смотришь в книгу а видишь фигу :07:

    Вы точно чего то не дочитали

    у SD есть два режима - родной SD в котором действительно битовая синхронизация и SPI - в котором только байтовая.

    вы привели как раз как раз таблицу для родного SD режима (в котором и эффективно работать можно только с SD контроллером).

    А если таковые SD с битовой синхронизацией для SPI режима есть (в чем я сильно сомневаюсь) - то это не SD, т.к. они не будут отвечать спецификации

    И если у когото и вылезла она в середине байта, то это из за мягко сказать неумелости - карта не переведена в режим SD или сбои по фронтам линии clock. Только и всего.

  21. В любой доке на ММС или SD посмотрите описание Ncr

    А после прочтения станет ясно что:

    Ncr - измеряется не в байтах, а в CLOCK CYCLE - а это в переводе означает один такт CLK на шине SPI.

     

    Полный бред, не вводите в заблуждение если сами не читали или не понимаете

    Спецификация на 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

    ...

×
×
  • Создать...