scifi 1 25 октября, 2011 Опубликовано 25 октября, 2011 · Жалоба Кстати, меня похожий вопрос интересует. Собираюсь выводить на ЦАП 10^7 выборок в секунду. ЦАП внешний, будет висеть на FSMC. Контроллер заложил из серии STM32F200. Если верить описанию bus matrix, там DMA и процессор не должны друг другу мешать, тем более есть FIFO. Надеюсь, не разочаруюсь... Докладываю: всё работает. STM32F20x. ЦАП параллельный 8 бит (AD5424) сидит на GPIO. Данные загоняются через DMA. Синхроимпульс - от таймера. 20x10^6 выборок в секунду (по паспорту ЦАПа) - работает без проблем. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
maksimp 0 26 октября, 2011 Опубликовано 26 октября, 2011 (изменено) · Жалоба Выводится аналоговый сигнал в ЦАП с помощью DMA. Довольно интенсвно, через 264 нс. Пока работает только он, сигнал ровный. Но стоит запрограммировать любую другую периферию с прерываниями, как сигнал начинает тормозиться, увеличивается его период, появляются искажения. Причем только если выполянются прерывания. Обычная - 72 МГц У меня на stm32f107, DMA (правда у меня DMA1 использован) нормально выводит в порт каждые 10 тактов, по сигналу от TIM1. Может выводить и каждые 9 тактов, но тогда иногда работает не чётко (возможно, в зависимости от прерываний). Выводить каждые 8 тактов не получается. У вас 264 нс при 72 МГц - это 1 вывод в 19 тактов. Странно, что не получается. Или может 264 нс - это период сигнала на выходе ЦАП, а выводите в порт в 2 раза чаще? Изменено 26 октября, 2011 пользователем maksimp Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Flexz 0 26 октября, 2011 Опубликовано 26 октября, 2011 · Жалоба Докладываю: всё работает. STM32F20x. ЦАП параллельный 8 бит (AD5424) сидит на GPIO. Данные загоняются через DMA. Синхроимпульс - от таймера. 20x10^6 выборок в секунду (по паспорту ЦАПа) - работает без проблем. А сам процессор при этом что-нибудь делает или спит? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
scifi 1 26 октября, 2011 Опубликовано 26 октября, 2011 · Жалоба А сам процессор при этом что-нибудь делает или спит? Крутится в цикле while (1) {}. Чуть позже прикручу сбор данных с АЦП и их обработку. Мануал обещает, что DMA и процессор друг другу мешать не будут. Будут результаты - доложу. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
scifi 1 1 ноября, 2011 Опубликовано 1 ноября, 2011 · Жалоба Собственно, продолжение отчёта. Добавил сбор данных через АЦП. Оцифровка 625 тыс. выборок в секунду. Заполнение буфера при помощи того же DMA2. Далее данные из буфера АЦП усредняются и обрабатываются. Замедления работы процессора не замечено. Когда задействованы два канала DMA, часть периода на выходе ЦАП искажается: туда через DMA как-то просачиваются данные с АЦП. Возможно, режим circular имеет к этому отношение. Поскольку у меня заполнен не весь период, то я просто при помощи таймеров отрезал от внешнего ЦАП испорченную часть периода. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться