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

KnightIgor

Участник
  • Постов

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

  • Посещение

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


  1. MDK 4.21

    Я не наблюдал. Какое железо для отладки?
  2. High Speed USB Cortex M0-M3

    Пока никаких, т.к. руки не дошли. Писать с нуля USB весьма непросто. Разобраться, конечно, можно, но зачем изобретать велосипеды? - будем юзать примеры. Правда, где ATMEL, а где разумные библиотеки... В этом смысле ST гораздо дружественнее.
  3. High Speed USB Cortex M0-M3

    Предполагаю, что тот, кто писал о подтормаживании, что-то неправильно в программе сделал. Перекину проект на STM32F103RC, расскажу. Пусть не в тему тут. Хотя упомянутый мной SAM3U4E на SAM3U-EDK я взял, чтобы разобраться как раз с HS USB.
  4. High Speed USB Cortex M0-M3

    А вот кстати, в посте где-то на две страницы ранее увидел, что, якобы декодирование MP3 320kbps занимает на NXP 30%, SAM3U 50%, а STM32F - 100%. Хотелось бы стросить sonycman, проценты относительно к чему? То есть, как понимать, скажем, 100% загрузки? Я сделал тут WAV/MP3 плейер на SAM3U (96MHz) и померял осциллографом, сколько надо на декодирование одного фрейма MP3 320kbps (то есть, один вызов MP3Decode). Получалось от 9 до 11.5мс (чем "басее" звук, тем дольше). Как известно, результат вылетает в DAC за 26мс. То есть, с этой точки зрения загрузка менее 50% (проц. мог бы декодировать два полных фрейма, пока один проигрывается). Неужели STM32F нужно полные 26мс, чтобы сделать то же самое?!
  5. Эрраты бояться - в лес не ходить. Потребление зависит от режимов, приложения и т.п. Привести цифры сложно. Ребята крутят CC1101 (это радио с 868MHz) с EFM32 и говорят, что если оба спят, но готовы по первому зову в бой, то все потребляет менее 4 микроА. Какие там они режимы применяют, я точно не скажу, но пока все довольны.
  6. Коллеги! Поиск по форуму у меня не удался: пытался найти тему, как "перекинуть" обмен по USB на другие endpoints (речь о примерах для STM32F103 из их библиотеки "STM32_USB-FS-Device_Lib_V3.3.0"). Помню, что где-то такое читал, но постепенно запутался между различными форумами (модераторов прошу не ревновать :rolleyes:). Подоплека - совмещение USB виртуального COM порта и MASS Storage в одном устройстве. Это тоже где-то пробегало. Для начала я решил освободить endpoints 1, 2 и 3 из примера виртуального COM порта и перекинуть его на 4,5 и 6. Я заменил в прикладных USB файлах соответствующие символы, подкорректировал дескриптор и... не пошло. Собственно, порт возникает под Win7 (т.к. endpoint 0 осталась неизменной), его можно открыть, но обмена нет. Где-то я проглядел. Как известно, сложно искать такого рода ошибки в собственном тексте, нужен взгляд со стороны. Если кто уже проделывал подобные фокусы, прошу помочь. Например тем, что дать своего рода check list, где и что нужно поменять. Заранее благодарен.
  7. Мы в одном проекте перешли с AVR на EFM32G200Fxxx (это -M3) и очень довольны. С -M0 дела еще не имели, однако в общем и целом переход на 32-х битную архитектуру, да еще стандартизованную (в смысле, что лицензируется ARM и реализуется множеством производителей), является хорошим заделом на будущее. Поэтому на вопрос "Стоит?" можно ответить однозначно положительно.
  8. ARM RealView

    Неверные опции проекта? (Не те адреса загрузки, и т.д.). Гляньте, чтобы и "птичка" run to main была включена.
  9. каналы i2s

    Может Вы неверно прочли строку из ключевых свойств: "I2S, three I2C, three SPI/SSP, and four UARTs" Имеется ввиду ОДИН I2S, ТРИ I2C интерфейса, и т.д. I2S двухканальный: сигналы TF/RF (у NXP они почему-то называются WS) определяют "левый" или "правый" канал, стерео то бишь.
  10. Нашел, сделал VBR: Helix проигрывает без проблем. Мне казалось, что я читал, что Helix не может VBR. Значит ошибся. Или это была libmad? Дополнение, кому интересно: привожу графики времен декодирования (прикреплен JPG). Синяя линия - 320kbps, красная - 128kbps, желтая - VBR, созданый с опцией максимального качества. Вертикальная ось - миллисекунды. Измерение проводилось просто: перед входом и после выхода из MP3Decode() сохранялись значения SysTick, после чего разница делилась на тактовую частоту (96000kHz).
  11. Рад за него. Читал, однако, иное. Не ли файла с VBR? - До сих пор не видел, хочу попробовать. Примерно сходится: как я писал, наблюдал времена от 10.5мс до 12мс (12мс биение в момент удара баса). 72MHz/96MHz*13мс=9.75мс. Учитывая точность осциллографа...
  12. В отличие от примера от ATMEL с совершенно кривой процессорной частотой в 98 с копейками MHz, получаемых из крутой, надо сказать, внутренней PLL, у меня проц бежит на стандартной 96MHz, а DAC тактируется соответственно 12MHz и работает чисто как слэйв. Дело в том, что создатели I2S DACов прекрасно понимали, что их продукты будут использоваться в системах с USB, где кратность частоте в 12MHz просто неизбежна. Поэтому наряду с прецизионным "нормальным" режимом тактирования от 12.288MHz и других кривых частот, дающих точно 48kHz и/или 44.1kHz, предусмотрен так называемый режим "USB" от упомянутых 12MHz и делителемм 250 (48kHz) и 272 (44.1kHz, а точно - 44.117kHz). Конечно, DAC нужно переключать в этот режим через I2C или SPI, т.к. по умолчанию установлен "нормальный" режим.
  13. High Speed USB Cortex M0-M3

    Просто подкреплю ссылкой на документацию SAM3U: см. стр. 31 документа "6430D–ATARM–25-Mar-11" к контроллерам, где сказано: The SRAM0 is accessible over System Cortex-M3 bus at address 0x2000 0000 and SRAM1 at address 0x2008 0000. The user can see the SRAM as contiguous at 0x20078000-0x20083FFF (SAM3U4), 0x2007C000-0x20083FFFF (SAM3U2) or 0x2007E000-0x20081FFFF (SAM3U1).
  14. Примерно так. То есть, 12мс на вызов к "MP3Decode(...)", который заполняет буфер на 26.1мс стереозвучания 44.1kHz. Далее буфер выплевывается через I2S в режиме DMA в кодек Wolfson 8731 (который есть точная копия кодека TLV320AIC23B от Texas Instruments, упоминаемого в известном проекте ARM MP3). В "главном" файле Helix MP3 декодера "mp3dec.c" приведена следующая информация: MP3DecInfo mp3DecInfo; // 0x7f0 = 2032 SubbandInfo sbi; // 0x2204 = 8708 IMDCTInfo mi; // 0x1b20 = 6944 HuffmanInfo hi; // 0x1210 = 4624 DequantInfo di; // 0x348 = 840 ScaleFactorInfo sfi; // 0x124 = 292 SideInfo si; // 0x148 = 328 FrameHeader fh; // 0x38 = 56 //------------------------------------------- // 0x5d10 = 23824 bytes Безусловно, нужна еще память на внешние буферы: 1045 байт на входной MP3 блок (320kbps), выходной буфер в 4608 байт (2х2304 PCM-16 слова), а вообще-то два таких: у меня пока в один декодируется, второй выплевывается по I2S, т.к. кольцевой буфер реализовать сложнее, не хотелось возиться. Плюс файловая система требует на себя до 4KB. Плюс стек и там всякие мои вещи по мелочам, итого в общем компиляция показывает чуть более 43KB занятого RAM. Спасибо за ссылки. VBR не поддерживается Helix декодером. Да и во всей своей куче MP3 музыки я пока не встречал Variable Bit Rate.
  15. @zksystem: множество файлов, как я установил, не имеют указанного тэга. @Alex_1811: Я гоняю на SAM3U на 96MHz. 320kbps не создает никаких проблем: измерял осциллоскопом время декодирования блока в 1045 байт в выходные самплы (2304 16-битных слова), получал времена от 10.5мс до 12мс. Причем, бьется в такт басу (чем круче бас, тем больше время). 2304 слова (1152 стерео выборки) при 44.1kHz проигрываются за 26.1мс. SD-карточка, заведеная на SDIO, подчитывает очередную порцию за 1.2мс.
  16. Структура MP3 файлов

    Привет форумчанам. Гоняю Helix MP3 декодер. Если посмотреть на структуру простого MP3 файла (без всяких там расширений), то он состоит из последовательности блоков кодированных данных и не имеет общего заголовка, в отличие от, например, WAV (RIFF) файлов. Таким образом, узнать, какова длительность воспроизведения, нельзя, не прочитав весь файл или не прикинув приблизительно, поделив размер файла на размер блока. Последний метод дает, однако, ошибку, т.к. файл может иметь блоки, которые содержат всякую фигню, кроме, собственно, звука: иконки, информацию об альбоме, и пр... Может я чего проглядел? Действительно ли надо прошустрить весь файл, чтобы точно узнать его длительность звучания?
  17. JTAGICE mkII-CN с Cortex под KEIL?

    Коллеги с соседней конторы кропают системы на AVR, недавно прикупили по дешевке китайские клоны ATMEL'-овского JTAG ICE для AVR Studio под названием JTAGICE mkII-CN. Я так понимаю, что эта штука есть в итоге один из вариантов USB-JTAG адаптера. Нельзя ли прикрутить его к KEIL, чтобы грузить/отлаживать ARM|Cortex?
  18. Что Вы тут описали, это одна из возможных реализаций state machine - давно известная и наглядная штука для ветвлящихся алгоритмов.
  19. Маленький совет: вместо 485 возьмите LVDS.
  20. Где-то в дебрях структуры подкаталогов KEIL в папках с названиями, говорящими о примерах, есть такое. Запомните ключевое слово "retarget.c" и "serial.c" B) Успехов!
  21. I2S и SPI

    Производители чипов, почему-то, имеют иное мнение на этот счет. Например, ST, у которого SPI и I2S есть различные режимы одного и того же периферийного устройства. SPI и I2S имеют хотя бы и то общее, что являются параллельно-последовательными преобразователями с выделенной линией тактирования.
  22. I2S и SPI

    А в чем же "четкость" задачи "стыковка I2S и SPI"? Невозможно дать ответ, не понимая, что нужно конткретно. Если говорить о самих интерфейсах, то оба указанных весьма похожи. Например, в контроллерах STM32 (Cortex-M3) оба интерфейса реализуются одной и той же аппаратной периферией. Дать примеры кода также сложно, т.к. код будет зависеть от задачи: откуда данные, с какой скорость, что работает "рядом" еще. В общем и целом оба интерфейса есть преобразование параллельного кода в последовательный. Периферии имеют регистр данных DR (8 и/или 16 бит), записью в который инициируется передача (и, кстати, прием тоже) данных. Записывать в DR/считывать из него можно лишь, если установлены соответствующие флаги готовности в регистрах статуса SR. Транзакции (прием-передачи) можно осуществлять либо в синхронных циклах ожидания, либо по прерыванием, в том числе с привлечением DMA, И т.д. и т.п. Под реализацией должна стоять целая концепция, а не просто "задача в стыковке".
  23. stm32f103

    Вопросом на вопрос: а зачем использовать прерывания? CCRx состоит по сути из двух регистров: рабочего (теневого, active), с которым происходит сравнение для выработки PWM, и защелки (хранения, preload), где содержится значение для сравнения. Таким образом, если установлен бит OCxPE регистра TIMx_CCMR1 (стр. 395 документа RM0008.PDF Doc ID 13902 Rev 12.), защелка переписывается аппаратно в рабочий регистр только в момент сравнения (match). То есть, запись в защелку можно производить в любой момент, а действовать новое знаение начнет синхронно, как только предыдущее значение "отыграет свое" в момент match. А DMA использовать можно для записи в CCRx: см. регистр TIMx_DIER, стр. 390 документа RM0008.PDF Doc ID 13902 Rev 12, совместно с регистрами TIMx_DCR и TIMx_DMAR, стр. 403. Там хитро наворочено: DMA нужно указать регистр TIMx_DMAR в качестве регистра периферии, а регистром TIMx_DCR обозначить, куда же будут попадать данные. Или же можно воспользоваться тем фактом, что CCRx регистры каналов расположены по адресам друг за другом, и писать в них из DMA, задав инкрементирование адреса периферии.
  24. Это типичное поведение, когда забывают проинициализировать какие-либо переменные (указатели или счетчики). Может быть у Вас выключена в компиляторе начальная прочистка/инициализация памяти для переменных?
  25. Keil ARM MDK 4.20 странности

    Доброго дня! Пользовал 4.12, тут скачал 4.20 попробовать. Перекомпилировал один из проектов. Все без ошибок, но программа не пошла. Начал разбираться под отладчиком и обнаружил, что при вызове некоих моих собственных библиотечных функций, сложенных ранее в .LIB, нарушались параметры. Перекомпилировал саму библиотеку из исходников - пошло. Очень похоже, что что-то изменилось в библиотекаре. Подробнее пока не разбирался. Кто еще столкнулся?
×
×
  • Создать...