KnightIgor
Участник-
Постов
792 -
Зарегистрирован
-
Посещение
Весь контент KnightIgor
-
High Speed USB Cortex M0-M3
KnightIgor ответил pofikus тема в ARM
Пока никаких, т.к. руки не дошли. Писать с нуля USB весьма непросто. Разобраться, конечно, можно, но зачем изобретать велосипеды? - будем юзать примеры. Правда, где ATMEL, а где разумные библиотеки... В этом смысле ST гораздо дружественнее. -
High Speed USB Cortex M0-M3
KnightIgor ответил pofikus тема в ARM
Предполагаю, что тот, кто писал о подтормаживании, что-то неправильно в программе сделал. Перекину проект на STM32F103RC, расскажу. Пусть не в тему тут. Хотя упомянутый мной SAM3U4E на SAM3U-EDK я взял, чтобы разобраться как раз с HS USB. -
High Speed USB Cortex M0-M3
KnightIgor ответил pofikus тема в ARM
А вот кстати, в посте где-то на две страницы ранее увидел, что, якобы декодирование 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мс, чтобы сделать то же самое?! -
У когонибудь есть опыт с EFM32ZG?
KnightIgor ответил Gas Wilson тема в ARM
Эрраты бояться - в лес не ходить. Потребление зависит от режимов, приложения и т.п. Привести цифры сложно. Ребята крутят CC1101 (это радио с 868MHz) с EFM32 и говорят, что если оба спят, но готовы по первому зову в бой, то все потребляет менее 4 микроА. Какие там они режимы применяют, я точно не скажу, но пока все довольны. -
STM32F103, USB примеры - изменить endpoints
KnightIgor опубликовал тема в ARM
Коллеги! Поиск по форуму у меня не удался: пытался найти тему, как "перекинуть" обмен по 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, где и что нужно поменять. Заранее благодарен. -
У когонибудь есть опыт с EFM32ZG?
KnightIgor ответил Gas Wilson тема в ARM
Мы в одном проекте перешли с AVR на EFM32G200Fxxx (это -M3) и очень довольны. С -M0 дела еще не имели, однако в общем и целом переход на 32-х битную архитектуру, да еще стандартизованную (в смысле, что лицензируется ARM и реализуется множеством производителей), является хорошим заделом на будущее. Поэтому на вопрос "Стоит?" можно ответить однозначно положительно. -
ARM RealView
KnightIgor ответил Trizna тема в ARM
Неверные опции проекта? (Не те адреса загрузки, и т.д.). Гляньте, чтобы и "птичка" run to main была включена. -
каналы i2s
KnightIgor ответил n_Nice тема в ARM
Может Вы неверно прочли строку из ключевых свойств: "I2S, three I2C, three SPI/SSP, and four UARTs" Имеется ввиду ОДИН I2S, ТРИ I2C интерфейса, и т.д. I2S двухканальный: сигналы TF/RF (у NXP они почему-то называются WS) определяют "левый" или "правый" канал, стерео то бишь. -
Структура MP3 файлов
KnightIgor ответил KnightIgor тема в ARM
Нашел, сделал VBR: Helix проигрывает без проблем. Мне казалось, что я читал, что Helix не может VBR. Значит ошибся. Или это была libmad? Дополнение, кому интересно: привожу графики времен декодирования (прикреплен JPG). Синяя линия - 320kbps, красная - 128kbps, желтая - VBR, созданый с опцией максимального качества. Вертикальная ось - миллисекунды. Измерение проводилось просто: перед входом и после выхода из MP3Decode() сохранялись значения SysTick, после чего разница делилась на тактовую частоту (96000kHz). -
Структура MP3 файлов
KnightIgor ответил KnightIgor тема в ARM
Рад за него. Читал, однако, иное. Не ли файла с VBR? - До сих пор не видел, хочу попробовать. Примерно сходится: как я писал, наблюдал времена от 10.5мс до 12мс (12мс биение в момент удара баса). 72MHz/96MHz*13мс=9.75мс. Учитывая точность осциллографа... -
Структура MP3 файлов
KnightIgor ответил KnightIgor тема в ARM
В отличие от примера от 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, т.к. по умолчанию установлен "нормальный" режим. -
High Speed USB Cortex M0-M3
KnightIgor ответил pofikus тема в ARM
Просто подкреплю ссылкой на документацию 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). -
Структура MP3 файлов
KnightIgor ответил KnightIgor тема в ARM
Примерно так. То есть, 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. -
Структура MP3 файлов
KnightIgor ответил KnightIgor тема в ARM
@zksystem: множество файлов, как я установил, не имеют указанного тэга. @Alex_1811: Я гоняю на SAM3U на 96MHz. 320kbps не создает никаких проблем: измерял осциллоскопом время декодирования блока в 1045 байт в выходные самплы (2304 16-битных слова), получал времена от 10.5мс до 12мс. Причем, бьется в такт басу (чем круче бас, тем больше время). 2304 слова (1152 стерео выборки) при 44.1kHz проигрываются за 26.1мс. SD-карточка, заведеная на SDIO, подчитывает очередную порцию за 1.2мс. -
Структура MP3 файлов
KnightIgor опубликовал тема в ARM
Привет форумчанам. Гоняю Helix MP3 декодер. Если посмотреть на структуру простого MP3 файла (без всяких там расширений), то он состоит из последовательности блоков кодированных данных и не имеет общего заголовка, в отличие от, например, WAV (RIFF) файлов. Таким образом, узнать, какова длительность воспроизведения, нельзя, не прочитав весь файл или не прикинув приблизительно, поделив размер файла на размер блока. Последний метод дает, однако, ошибку, т.к. файл может иметь блоки, которые содержат всякую фигню, кроме, собственно, звука: иконки, информацию об альбоме, и пр... Может я чего проглядел? Действительно ли надо прошустрить весь файл, чтобы точно узнать его длительность звучания? -
JTAGICE mkII-CN с Cortex под KEIL?
KnightIgor опубликовал тема в ARM
Коллеги с соседней конторы кропают системы на AVR, недавно прикупили по дешевке китайские клоны ATMEL'-овского JTAG ICE для AVR Studio под названием JTAGICE mkII-CN. Я так понимаю, что эта штука есть в итоге один из вариантов USB-JTAG адаптера. Нельзя ли прикрутить его к KEIL, чтобы грузить/отлаживать ARM|Cortex? -
Выход из прерывания в требуемую точку
KnightIgor ответил Krom тема в ARM
Что Вы тут описали, это одна из возможных реализаций state machine - давно известная и наглядная штука для ветвлящихся алгоритмов. -
Нужна ли буферизация длинному цифровому выходу МК
KnightIgor ответил overloaded тема в ARM
Маленький совет: вместо 485 возьмите LVDS. -
Keil uVision v4.x, RL- arm
KnightIgor ответил lena1512 тема в ARM, 32bit
Где-то в дебрях структуры подкаталогов KEIL в папках с названиями, говорящими о примерах, есть такое. Запомните ключевое слово "retarget.c" и "serial.c" B) Успехов! -
I2S и SPI
KnightIgor ответил n_Nice тема в ARM
Производители чипов, почему-то, имеют иное мнение на этот счет. Например, ST, у которого SPI и I2S есть различные режимы одного и того же периферийного устройства. SPI и I2S имеют хотя бы и то общее, что являются параллельно-последовательными преобразователями с выделенной линией тактирования. -
I2S и SPI
KnightIgor ответил n_Nice тема в ARM
А в чем же "четкость" задачи "стыковка I2S и SPI"? Невозможно дать ответ, не понимая, что нужно конткретно. Если говорить о самих интерфейсах, то оба указанных весьма похожи. Например, в контроллерах STM32 (Cortex-M3) оба интерфейса реализуются одной и той же аппаратной периферией. Дать примеры кода также сложно, т.к. код будет зависеть от задачи: откуда данные, с какой скорость, что работает "рядом" еще. В общем и целом оба интерфейса есть преобразование параллельного кода в последовательный. Периферии имеют регистр данных DR (8 и/или 16 бит), записью в который инициируется передача (и, кстати, прием тоже) данных. Записывать в DR/считывать из него можно лишь, если установлены соответствующие флаги готовности в регистрах статуса SR. Транзакции (прием-передачи) можно осуществлять либо в синхронных циклах ожидания, либо по прерыванием, в том числе с привлечением DMA, И т.д. и т.п. Под реализацией должна стоять целая концепция, а не просто "задача в стыковке". -
stm32f103
KnightIgor ответил chOl тема в ARM
Вопросом на вопрос: а зачем использовать прерывания? 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, задав инкрементирование адреса периферии. -
STM32 Обработка hard fault exception
KnightIgor ответил Serj78 тема в ARM
Это типичное поведение, когда забывают проинициализировать какие-либо переменные (указатели или счетчики). Может быть у Вас выключена в компиляторе начальная прочистка/инициализация памяти для переменных? -
Keil ARM MDK 4.20 странности
KnightIgor опубликовал тема в ARM
Доброго дня! Пользовал 4.12, тут скачал 4.20 попробовать. Перекомпилировал один из проектов. Все без ошибок, но программа не пошла. Начал разбираться под отладчиком и обнаружил, что при вызове некоих моих собственных библиотечных функций, сложенных ранее в .LIB, нарушались параметры. Перекомпилировал саму библиотеку из исходников - пошло. Очень похоже, что что-то изменилось в библиотекаре. Подробнее пока не разбирался. Кто еще столкнулся?