|
тормозит DMA - 2, STM32F103 |
|
|
|
Oct 13 2011, 08:29
|
Местный
  
Группа: Свой
Сообщений: 252
Регистрация: 9-10-08
Из: Московская обл.
Пользователь №: 40 797

|
Цитата(777777 @ Oct 13 2011, 11:47)  С точки зрения процессора работающий код ничем принципиально не отличается от бесконечного цикла. И дело именно в прерываниях, когда то же самое устройство опрашиваю программно по готовности, то DMA продолжает исправно работать. С точки зрения процессора бесконечный цикл это обращение исключительно к памяти команд, которое происходит в обход BusMatrix, т.е. точно никому не мешает. А прерывания отличаются от опроса разве что наличием сохранения/загрузки контекста, вот тут утверждать не буду, но предположу, что блочное сохранение регистров может быть burst-ом на шине.
|
|
|
|
|
Oct 13 2011, 09:51
|
Участник

Группа: Участник
Сообщений: 73
Регистрация: 4-05-08
Пользователь №: 37 272

|
Цитата(777777 @ Oct 13 2011, 07:15)  Выводится аналоговый сигнал в ЦАП с помощью DMA. Довольно интенсвно, через 264 нс. Пока работает только он, сигнал ровный. Но стоит запрограммировать любую другую периферию с прерываниями, как сигнал начинает тормозиться, увеличивается его период, появляются искажения. Причем только если выполянются прерывания. Как это может быть? Разве DMA не может захватить шину в любой нужный ему момент времени? Или при обработке прерывания запрещаются не только другие прерывания, но и DMA? Цитата 13.3 DMA functional description The DMA controller performs direct memory transfer by sharing the system bus with the Cortex™-M3 core. The DMA request may stop the CPU access to the system bus for some bus cycles, when the CPU and DMA are targeting the same destination (memory or peripheral). The bus matrix implements round-robin scheduling, thus ensuring at least half of the system bus bandwidth (both to memory and peripheral) for the CPU. Может дело в том что именно в прерывании идёт обращение к тому же куску адресного пространства (или шине), на которое претендует и ПДП. И поэтому только здесь происходит чередование.
Сообщение отредактировал Юрий_СВ - Oct 13 2011, 09:57
|
|
|
|
|
Oct 13 2011, 10:07
|

Профессионал
    
Группа: Участник
Сообщений: 1 091
Регистрация: 25-07-07
Из: Саратов
Пользователь №: 29 357

|
Цитата(scifi @ Oct 13 2011, 12:22)  Кстати, меня похожий вопрос интересует. Собираюсь выводить на ЦАП 10^7 выборок в секунду. 10 MHz? И не пытайся. Цитата(scifi @ Oct 13 2011, 12:22)  Контроллер заложил из серии STM32F200. 200-й конечно побыстрее немного. Попробуй, нам расскажешь. Цитата(scifi @ Oct 13 2011, 12:22)  ЦАП внешний, будет висеть на FSMC. А зачем FSMC? Проще к порту прицепить и пусть DMA туда кидает слова. Кстати, а ЦАП какой? Цитата(Flexz @ Oct 13 2011, 12:29)  С точки зрения процессора бесконечный цикл это обращение исключительно к памяти команд, которое происходит в обход BusMatrix И правда - ведь ICode сделана отдельной.
|
|
|
|
|
Oct 13 2011, 10:25
|
Гуру
     
Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136

|
Цитата(777777 @ Oct 13 2011, 14:07)  10 MHz? И не пытайся. Поясни. Цитата(777777 @ Oct 13 2011, 14:07)  200-й конечно побыстрее немного. Советую поискать 10 различий между STM32F100 и STM32F200. Кое-что нетривиальное добавилось. А именно: bus matrix с одновременным доступом (не блокирующий), DMA FIFO. Цитата(777777 @ Oct 13 2011, 14:07)  А зачем FSMC? Проще к порту прицепить и пусть DMA туда кидает слова. Кстати, а ЦАП какой? Время записи в GPIO неизвестно. Про FSMC гораздо больше ясности. Кроме того, FSMC не будет конфликтовать с другой периферией (см. схему bus matrix). Возможно, попробую и то, и другое. ЦАП AD5424.
|
|
|
|
|
Oct 13 2011, 12:30
|
Местный
  
Группа: Свой
Сообщений: 252
Регистрация: 9-10-08
Из: Московская обл.
Пользователь №: 40 797

|
Цитата(scifi @ Oct 13 2011, 14:25)  Время записи в GPIO неизвестно. Кстати, первое что сделал получив плату с stm32f217 - банальный ногодрыг, 60Мгц вывелись вполне успешно (без цикла, просто большая пачка последовательных записей в регистр)
|
|
|
|
|
Oct 13 2011, 12:43
|

Профессионал
    
Группа: Участник
Сообщений: 1 091
Регистрация: 25-07-07
Из: Саратов
Пользователь №: 29 357

|
Цитата(scifi @ Oct 13 2011, 14:25)  Советую поискать 10 различий между STM32F100 и STM32F200. Кое-что нетривиальное добавилось. А именно: bus matrix с одновременным доступом (не блокирующий), DMA FIFO. Я пока знаю только то, что у него больше частота. Цитата(scifi @ Oct 13 2011, 14:25)  ЦАП AD5424. Но это же всего 8 бит?!
|
|
|
|
|
Oct 17 2011, 05:59
|

Профессионал
    
Группа: Участник
Сообщений: 1 091
Регистрация: 25-07-07
Из: Саратов
Пользователь №: 29 357

|
Цитата(Dron_Gus @ Oct 15 2011, 19:48)  Вероятно во время входа в прерывание процессор скопом сохраняет регистры и в этот момент DMA не может пробиться к памяти. А как сохранение регистров может этому помешать? Почему бы DMA не прервать этот процесс посередине? Цитата(ZiB @ Oct 16 2011, 08:38)  какая частота ядра? Обычная - 72 МГц
|
|
|
|
|
Oct 18 2011, 13:02
|
Группа: Участник
Сообщений: 14
Регистрация: 25-03-07
Пользователь №: 26 499

|
Может кроме DMA использовать таймер дополнительно. ДМА будет писать в теневой регистр. По таймеру аппаратно будет запускаться DAC - данные из теневого регистра будут переноситься регистр DAC. Нужно реализовать небольшое отставание записи данных в DAC от запуска самого преобразования. Тогда сигнал будет выводится с отставанием почти в период, зато случайные небольшие задержки не будут влиять на результат - есть почти целый период, что бы выполнить эту операцию. Если ЦАП внешний возможно придется организовать внешнюю защелку. Из защелки в DAC данные должны попадать по сигналу таймера (ШИМ).
Сообщение отредактировал Oleg Galizin - Oct 18 2011, 13:21
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|