реклама на сайте
подробности

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> тормозит DMA - 2, STM32F103
777777
сообщение Oct 13 2011, 04:15
Сообщение #1


Профессионал
*****

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



Выводится аналоговый сигнал в ЦАП с помощью DMA. Довольно интенсвно, через 264 нс. Пока работает только он, сигнал ровный. Но стоит запрограммировать любую другую периферию с прерываниями, как сигнал начинает тормозиться, увеличивается его период, появляются искажения. Причем только если выполянются прерывания. Как это может быть? Разве DMA не может захватить шину в любой нужный ему момент времени? Или при обработке прерывания запрещаются не только другие прерывания, но и DMA?
Go to the top of the page
 
+Quote Post
Flexz
сообщение Oct 13 2011, 07:14
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 252
Регистрация: 9-10-08
Из: Московская обл.
Пользователь №: 40 797



Наверное дело все-таки не в самих прерываниях, а в том, что когда появляется работающий код, DMA начинает делить шины с ядром и другой периферией. А арбитраж-то по схеме round-robin.
Go to the top of the page
 
+Quote Post
777777
сообщение Oct 13 2011, 07:47
Сообщение #3


Профессионал
*****

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



Цитата(Flexz @ Oct 13 2011, 11:14) *
Наверное дело все-таки не в самих прерываниях, а в том, что когда появляется работающий код, DMA начинает делить шины с ядром и другой периферией. А арбитраж-то по схеме round-robin.

С точки зрения процессора работающий код ничем принципиально не отличается от бесконечного цикла. И дело именно в прерываниях, когда то же самое устройство опрашиваю программно по готовности, то DMA продолжает исправно работать.
Go to the top of the page
 
+Quote Post
scifi
сообщение Oct 13 2011, 08:22
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136



Кстати, меня похожий вопрос интересует. Собираюсь выводить на ЦАП 10^7 выборок в секунду. ЦАП внешний, будет висеть на FSMC. Контроллер заложил из серии STM32F200. Если верить описанию bus matrix, там DMA и процессор не должны друг другу мешать, тем более есть FIFO. Надеюсь, не разочаруюсь...
Go to the top of the page
 
+Quote Post
Flexz
сообщение Oct 13 2011, 08:29
Сообщение #5


Местный
***

Группа: Свой
Сообщений: 252
Регистрация: 9-10-08
Из: Московская обл.
Пользователь №: 40 797



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

С точки зрения процессора бесконечный цикл это обращение исключительно к памяти команд, которое происходит в обход BusMatrix, т.е. точно никому не мешает. А прерывания отличаются от опроса разве что наличием сохранения/загрузки контекста, вот тут утверждать не буду, но предположу, что блочное сохранение регистров может быть burst-ом на шине.
Go to the top of the page
 
+Quote Post
Юрий_СВ
сообщение Oct 13 2011, 09:51
Сообщение #6


Участник
*

Группа: Участник
Сообщений: 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
Go to the top of the page
 
+Quote Post
777777
сообщение Oct 13 2011, 10:07
Сообщение #7


Профессионал
*****

Группа: Участник
Сообщений: 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 сделана отдельной.
Go to the top of the page
 
+Quote Post
scifi
сообщение Oct 13 2011, 10:25
Сообщение #8


Гуру
******

Группа: Свой
Сообщений: 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.
Go to the top of the page
 
+Quote Post
Flexz
сообщение Oct 13 2011, 12:30
Сообщение #9


Местный
***

Группа: Свой
Сообщений: 252
Регистрация: 9-10-08
Из: Московская обл.
Пользователь №: 40 797



Цитата(scifi @ Oct 13 2011, 14:25) *
Время записи в GPIO неизвестно.

Кстати, первое что сделал получив плату с stm32f217 - банальный ногодрыг, 60Мгц вывелись вполне успешно (без цикла, просто большая пачка последовательных записей в регистр)
Go to the top of the page
 
+Quote Post
scifi
сообщение Oct 13 2011, 12:35
Сообщение #10


Гуру
******

Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136



Цитата(Flexz @ Oct 13 2011, 16:30) *
Кстати, первое что сделал получив плату с stm32f217 - банальный ногодрыг, 60Мгц вывелись вполне успешно (без цикла, просто большая пачка последовательных записей в регистр)

Отличная новость! Спасибо.
Go to the top of the page
 
+Quote Post
777777
сообщение Oct 13 2011, 12:43
Сообщение #11


Профессионал
*****

Группа: Участник
Сообщений: 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 бит?!
Go to the top of the page
 
+Quote Post
Dron_Gus
сообщение Oct 15 2011, 15:48
Сообщение #12


Профессионал
*****

Группа: Свой
Сообщений: 1 202
Регистрация: 9-01-05
Из: Санкт-Петербург
Пользователь №: 1 861



Вероятно во время входа в прерывание процессор скопом сохраняет регистры и в этот момент DMA не может пробиться к памяти.


--------------------
Если сверху смотреть, то сбоку кажется, что снизу ничего не видно.
Go to the top of the page
 
+Quote Post
ZiB
сообщение Oct 16 2011, 04:38
Сообщение #13


Частый гость
**

Группа: Свой
Сообщений: 122
Регистрация: 26-07-05
Из: Россия, Томск
Пользователь №: 7 109



какая частота ядра?
Go to the top of the page
 
+Quote Post
777777
сообщение Oct 17 2011, 05:59
Сообщение #14


Профессионал
*****

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



Цитата(Dron_Gus @ Oct 15 2011, 19:48) *
Вероятно во время входа в прерывание процессор скопом сохраняет регистры и в этот момент DMA не может пробиться к памяти.

А как сохранение регистров может этому помешать? Почему бы DMA не прервать этот процесс посередине?

Цитата(ZiB @ Oct 16 2011, 08:38) *
какая частота ядра?

Обычная - 72 МГц
Go to the top of the page
 
+Quote Post
Oleg Galizin
сообщение Oct 18 2011, 13:02
Сообщение #15





Группа: Участник
Сообщений: 14
Регистрация: 25-03-07
Пользователь №: 26 499



Может кроме DMA использовать таймер дополнительно. ДМА будет писать в теневой регистр. По таймеру аппаратно будет запускаться DAC - данные из теневого регистра будут переноситься регистр DAC. Нужно реализовать небольшое отставание записи данных в DAC от запуска самого преобразования. Тогда сигнал будет выводится с отставанием почти в период, зато случайные небольшие задержки не будут влиять на результат - есть почти целый период, что бы выполнить эту операцию.
Если ЦАП внешний возможно придется организовать внешнюю защелку. Из защелки в DAC данные должны попадать по сигналу таймера (ШИМ).

Сообщение отредактировал Oleg Galizin - Oct 18 2011, 13:21
Go to the top of the page
 
+Quote Post

2 страниц V   1 2 >
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 20th July 2025 - 17:59
Рейтинг@Mail.ru


Страница сгенерированна за 0.01492 секунд с 7
ELECTRONIX ©2004-2016