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

 
 
2 страниц V  < 1 2  
Reply to this topicStart new topic
> тормозит DMA - 2, STM32F103
scifi
сообщение Oct 25 2011, 09:14
Сообщение #16


Гуру
******

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



Цитата(scifi @ Oct 13 2011, 12:22) *
Кстати, меня похожий вопрос интересует. Собираюсь выводить на ЦАП 10^7 выборок в секунду. ЦАП внешний, будет висеть на FSMC. Контроллер заложил из серии STM32F200. Если верить описанию bus matrix, там DMA и процессор не должны друг другу мешать, тем более есть FIFO. Надеюсь, не разочаруюсь...

Докладываю: всё работает.
STM32F20x. ЦАП параллельный 8 бит (AD5424) сидит на GPIO. Данные загоняются через DMA. Синхроимпульс - от таймера. 20x10^6 выборок в секунду (по паспорту ЦАПа) - работает без проблем.

Эскизы прикрепленных изображений
Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post
maksimp
сообщение Oct 26 2011, 02:55
Сообщение #17


Местный
***

Группа: Участник
Сообщений: 313
Регистрация: 2-07-11
Пользователь №: 66 023



Цитата(777777 @ Oct 13 2011, 08:15) *
Выводится аналоговый сигнал в ЦАП с помощью DMA. Довольно интенсвно, через 264 нс. Пока работает только он, сигнал ровный. Но стоит запрограммировать любую другую периферию с прерываниями, как сигнал начинает тормозиться, увеличивается его период, появляются искажения. Причем только если выполянются прерывания.

Цитата(777777 @ Oct 17 2011, 09:59) *
Обычная - 72 МГц

У меня на stm32f107, DMA (правда у меня DMA1 использован) нормально выводит в порт каждые 10 тактов, по сигналу от TIM1. Может выводить и каждые 9 тактов, но тогда иногда работает не чётко (возможно, в зависимости от прерываний). Выводить каждые 8 тактов не получается.
У вас 264 нс при 72 МГц - это 1 вывод в 19 тактов. Странно, что не получается. Или может 264 нс - это период сигнала на выходе ЦАП, а выводите в порт в 2 раза чаще?

Сообщение отредактировал maksimp - Oct 26 2011, 02:56
Go to the top of the page
 
+Quote Post
Flexz
сообщение Oct 26 2011, 07:30
Сообщение #18


Местный
***

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



Цитата(scifi @ Oct 25 2011, 13:14) *
Докладываю: всё работает.
STM32F20x. ЦАП параллельный 8 бит (AD5424) сидит на GPIO. Данные загоняются через DMA. Синхроимпульс - от таймера. 20x10^6 выборок в секунду (по паспорту ЦАПа) - работает без проблем.

А сам процессор при этом что-нибудь делает или спит?
Go to the top of the page
 
+Quote Post
scifi
сообщение Oct 26 2011, 08:48
Сообщение #19


Гуру
******

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



Цитата(Flexz @ Oct 26 2011, 11:30) *
А сам процессор при этом что-нибудь делает или спит?

Крутится в цикле while (1) {}.
Чуть позже прикручу сбор данных с АЦП и их обработку. Мануал обещает, что DMA и процессор друг другу мешать не будут. Будут результаты - доложу.
Go to the top of the page
 
+Quote Post
scifi
сообщение Nov 1 2011, 12:36
Сообщение #20


Гуру
******

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



Собственно, продолжение отчёта.
Добавил сбор данных через АЦП. Оцифровка 625 тыс. выборок в секунду. Заполнение буфера при помощи того же DMA2. Далее данные из буфера АЦП усредняются и обрабатываются. Замедления работы процессора не замечено.
Когда задействованы два канала DMA, часть периода на выходе ЦАП искажается: туда через DMA как-то просачиваются данные с АЦП. Возможно, режим circular имеет к этому отношение. Поскольку у меня заполнен не весь период, то я просто при помощи таймеров отрезал от внешнего ЦАП испорченную часть периода.
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 21st July 2025 - 07:51
Рейтинг@Mail.ru


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