Перейти к содержанию
    

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

Докладываю: всё работает.

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

post-25136-1319534063_thumb.png

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Выводится аналоговый сигнал в ЦАП с помощью DMA. Довольно интенсвно, через 264 нс. Пока работает только он, сигнал ровный. Но стоит запрограммировать любую другую периферию с прерываниями, как сигнал начинает тормозиться, увеличивается его период, появляются искажения. Причем только если выполянются прерывания.

Обычная - 72 МГц

У меня на stm32f107, DMA (правда у меня DMA1 использован) нормально выводит в порт каждые 10 тактов, по сигналу от TIM1. Может выводить и каждые 9 тактов, но тогда иногда работает не чётко (возможно, в зависимости от прерываний). Выводить каждые 8 тактов не получается.

У вас 264 нс при 72 МГц - это 1 вывод в 19 тактов. Странно, что не получается. Или может 264 нс - это период сигнала на выходе ЦАП, а выводите в порт в 2 раза чаще?

Изменено пользователем maksimp

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Докладываю: всё работает.

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

А сам процессор при этом что-нибудь делает или спит?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А сам процессор при этом что-нибудь делает или спит?

Крутится в цикле while (1) {}.

Чуть позже прикручу сбор данных с АЦП и их обработку. Мануал обещает, что DMA и процессор друг другу мешать не будут. Будут результаты - доложу.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Собственно, продолжение отчёта.

Добавил сбор данных через АЦП. Оцифровка 625 тыс. выборок в секунду. Заполнение буфера при помощи того же DMA2. Далее данные из буфера АЦП усредняются и обрабатываются. Замедления работы процессора не замечено.

Когда задействованы два канала DMA, часть периода на выходе ЦАП искажается: туда через DMA как-то просачиваются данные с АЦП. Возможно, режим circular имеет к этому отношение. Поскольку у меня заполнен не весь период, то я просто при помощи таймеров отрезал от внешнего ЦАП испорченную часть периода.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...