Jump to content

    

kostya-m

Участник
  • Content Count

    193
  • Joined

  • Last visited

Community Reputation

0 Обычный

About kostya-m

  • Rank
    Частый гость

Recent Profile Visitors

1696 profile views
  1. IAR for ARM 7.5 не знает чип STM32L010C6

    Супер! Спасибо, все заработало
  2. IAR for ARM 7.5 не знает чип STM32L010C6

    Регистры процессора - да. А мне нужно поработать с регистрами периферии. Суббота, вечер....
  3. Поскольку не удается разобраться с некоторыми тонкостями встроенной аппаратуры, хотелось бы просматривать регистры. Вопрос по решениею задачи. Может можно инсталлировать определение чипа из более новой версии, если да - поделитесь. Может более новая версия 8.4 согласиться работать с той же лицензией от 7.5?
  4. STM32F7xx USB Audio Class 2 Device

    Реализаций USB Audio Class 1 с асинхронной передачей и точкой обратной связи достаточно в Интернете и оно работает, обычно на FS. Захотелось реализовать версию 2 и на HS. Поскольку хочется иметь поддержку высоких скоростей без значительных процессорных затрат, первично отлаженный протокол положенный на стандартный Cebu код стал перекладывать на DMA и отдельные EP1 прерывания. Так же код Cube был творчески переработан под решение конкретной задачи. Все бы хорошо и работает.... кроме одного. Не работает обратная связь. Прим данные идет через OUTEP1, а обратная связь на INEP1. С приемом никаких проблем нет. А вот с отправкой неожиданная проблема. Точка открывается нормально с обеих сторон. Хост шлет запросы каждые 8 SOF, как указано в дескрипторе. Это видно и по Device Monitoring Studio и по прерываниям на INEP1 - постоянное прерывание NAK, сигнализирующее о том, что был отправлен пустой пакет, вместо данных (In case of isochronous IN endpoints the interrupt gets generated when a zero length packet is transmitted due to unavailability of data in the Tx FIFO.) При этом DIEPCTL, DIEPSIZ и DIEPDMA запрограммированы корректно, но DMA не начинает заполнять Fifo данными. Бывают разовые случаи передачи одного первого пакета, но после все равно данные не забираются. Это видно не только по пустым отправкам, но и по тому, что DIEPSIZ не модифицируется, а должен был бы считать назад. Без DMA все работало, но, к сожалению, нельзя указать DMA по отдельным точкам, а так FeedBack - 4 байта и проще было бы засунуть в Fifo руками, но контроллер не дает и вызывает HarFault при такой попытке. Особенность всего в том, что и прием и передача делаются изохронными точками. Четность при посылке учитывается, но я даже пытался с ней играть - не помогало. Да и не могло, четность работает уже когда данные в Fifo, а я не могу их туда засунуть. Уже ходят мысли перенести FeedBack точку на INEP2 и вернуть обработку на основное прерывание. Может кто сталкивался с таким? Процессор конкретно 32F745VG, ULPI chip USB3320C. Хостом работает комп с Win10, поскольку в них есть встроенные драйвера USB Audio Class 2. Устройство распознается и работает, включая ASIO в Foobar2000. Но поскольку не работает FB, то буфер достаточно быстро опустошается, на 44/48 кГц где-то за пару минут, а на 352/384 кГц за секунды.
  5. Есть пара разработанных и работающих плат управления для аудио устройств. Платы управления на чипах серии STM32F7. USB c внешней физикой. Прошивки на основе FreeRTOS 9 базово собраны в Cube и доделаны. Они работают. Я начал сам писать USB Audio 2.0 и компьютер даже видит устройство, которое не работает. Но времени катастрофически не хватает. Надо написать протокол, что бы он нормально жил с Win10 (желательно и Win7) на хотя бы двух режимах 352/16 и 384/16. Это не USB Audio 1.0, реализация которого есть в Cube. Во втором протоколе надо реализовывать асинхронный режим. Описание протокола есть у меня и на сайте USB. Код должен быть на С без ++. Заплатить готов 25 тр. Работа не срочная, может время от времени встречаться в Москве на Авиамоторной в МТУСИ. Связь со мной по мылу Musatoff @ mail . ru Получится, есть темы для продолжения.
  6. STM32F745 FMC + LCD 16-bit i8080 mode

    Спасибо про ремапинг. Но вот и еще один вариант :)
  7. STM32F745 FMC + LCD 16-bit i8080 mode

    Условия: Плата с STM32F745VET (100 pin) Схема спроектирована с помощью CubeMX и им же сделан базовый код. Проблема: Не работает дисплей Анализ: Исследования с помощью многоканального осциллоскопа показало белиберду в управляющих сигналах. Безуспешные попытки: Пробовал изменять режимы работы FMC, тайминги, настройки. Ничего принципиально не помогает. Если код исполнять пошагово, то работает, если непрерывно - не работает. Промежуточным решением оказалось вставить после каждого обращения к LCD задержку на 400-500 нс. Но скорость записи сильно страдает. Решение: Похоже, в FMC, в отличие от FSMC есть логика кеширования. Запись в дисплей ведется по двум адресам ((__IO uint16_t*)0x60000000) и ((__IO uint16_t*)0x60020000). Данные потоком пишутся по второму адресу и FMC начинает пропускать циклы записи, оставляя последний. Отключение FIFO не помогает. Решением оказалось инкрементирование адреса в рамках до A16, которым проводится разделение команда-данные. void LCD_CMD( uint16_t cmd ) { static volatile uint16_t *Cmd = ((__IO uint16_t*)0x60000000); *(Cmd++) = cmd; if( Cmd >= ((__IO uint16_t*)0x6000FFF) ) Cmd = ((__IO uint16_t*)0x60000000); } void LCD_DATA( uint16_t data ) { static volatile uint16_t *Data = ((__IO uint16_t*)0x60020000); *(Data++) = data; if( Data >= ((__IO uint16_t*)0x6002FFFF)) Data = ((__IO uint16_t*)0x60020000); } Так все заработало
  8. Имя, с которым возникала неоднозначность сборки: .itcmram , а имена без точки дают однозначную сборку
  9. Цитата(jcxz @ Feb 8 2017, 01:38) Можно сделать поиск по map-файлу всех вхождений данного имени. Искал. Кроме нескольких указанных функций никого не было. Но это уже неактуально, перешел на дефолтные название. Там не может какой-либо особенности по использованию точки в начале названия секции? Без точки работает.
  10. Цитата(jcxz @ Feb 8 2017, 00:08) Сомнительно про глюк. Что-то Вы ещё такое в эту .itcmram пихаете о чём не рассказываете. И что не совместимо с остальным содержимым. Кроме функций я туда ничего не пихаю. Однако, пришлось отказаться от этого названия, при дефолтном названии .textrw такого не происходит.
  11. Загрузка функций в RAM

    Разобрался с вопросом. Нужная технология называется static overlay Описана тут и там есть хороший пример в архиве, по которому все становится понятно https://www.iar.com/support/tech-notes/link...-example-v5.50/
  12. Загрузка функций в RAM

    Цитата(jcxz @ Feb 8 2017, 00:11) А Вы чего ожидали? Думал что в сказку попал. Ан нет. Так, все же, какие можете предложить решения?
  13. Загрузка функций в RAM

    Буфер выровненный. Пробовал его делать более широкий, uint16_t - не помогло. 32 бита не стал делать - код в функциях THUMB - 16-и битный. Обратил внимание, что указатель на функцию, смотрит не на ее первый байт с четным номером, а на второй, с нечетным. Сделал копирование с адреса на 1 меньше - теперь буфер точно копирует данные в функции. Пробую запустить так же по нечетному адресу - пока не помогает.
  14. Загрузка функций в RAM

    Есть толпа функций обработки данных, из которых работает только одна, в зависимости от настроек. При этом матобработка критична по скорости, потому им бы лежать в ОЗУ. Но их много и хчется сэкономить место в ОЗУ. У всех функций один и тот же программный интерфейс. Кодtypedef void (*DataTransfer_t)( uint32_t ); После компиляции всех функций я посмотрел в мэп файле наиболее длинную из них и сделал с небольшим запасом буфер Кодchar FuncBuffer[512] @ ".itcmram"; Потом копирую в буфер тело функции Кодmemcpy( FuncBuffer, (char*)DataTransfer1, 512 ); После чего пытаюсь запустить Код((DataTransfer_t)FuncBuffer)( FirAskSlot ); Но не тут то было, вываливаюсь в Hard_fault. Что я сделал неправильно?
  15. Разрешил вопрос. Это все же глюк IAR-а Перестал использовать указание на секцию Код@ ".itcmram" А только префикс __ramfunc И добавил в ICF Кодplace in ITCMRAM_region {section .itcmram, section .textrw }; Теперь все функции залазят в ОЗУ