Насколько надежна DMA для GPIO на микроконтроллерах STM32? - PullRequest
2 голосов
/ 05 марта 2020

ST содержит некоторые замечания по применению, в которых говорится об эмуляции параллельной шины с использованием DMA для GPIO. Я ценю это, но это не отвечает на важные вопросы. Я просматриваю справочное руководство и, похоже, не могу выяснить, что меня беспокоит.

Меня больше всего беспокоит дрожание. В справочном руководстве неоднократно указывается, что при запуске DMA (например, таймером) контроллер DMA считывает память и передает значение на периферийное устройство. Это может быть хорошо с периферийными устройствами, которые имеют свой собственный FIFO. Там, когда в FIFO есть свободное место, DMA срабатывает и заполняет FIFO. Это, вероятно, произойдет до того, как FIFO станет пустым.

Но с GPIO, если каналы DMA не имеют самого FIFO, данные не будут готовы, когда сработает таймер, и их нужно будет извлечь из SRAM. , Таким образом, между срабатыванием таймера и значением, фактически поступающим в выходной регистр GPIO, может пройти некоторое время. Это может быть измеримо, если смотреть на выходной сигнал таймера и выводы GPIO. Контроллер DMA должен конкурировать за доступ к SRAM с запущенной программой, поэтому некоторые действия программы могут увеличить дрожание.

Может быть, это колоссальный упущение с моей стороны, но справочное руководство ST не дает Кажется, упомянуть FIFO как часть DMA. Если это так, то это может привести к джиттеру, который может повлиять на производительность на более высоких частотах.

Мне нужно синхронно переключать 3-4 контакта на тактовую частоту от 100 кГц до 1 МГц. Я рассматриваю DMA для GPIO, а также злоупотребляю контроллером QuadSPI. В настоящее время я тестирую на STM32L4, но я также рассматриваю STM32F4 или даже F1.

1 Ответ

1 голос
/ 05 марта 2020

DMA в / из GPIO. Это просто передача из памяти в память. Многие контроллеры STM32 имеют встроенные FIFO DMA, но здесь они не будут использоваться.

Ядро всегда имеет приоритет над DMA, поэтому, если это может быть проблемой (очень маловероятно), разместите основные доступные данные (эти данные к которому u C будет обращаться, когда DMA активен в отдельной области памяти - например, CCM (если у вашего u C есть таковой)

Ответ на вопрос памяти в / FROM GPIO очень надежен - лично я не было никаких проблем с этим.

...