Соревнование памяти Cortex-M4 (DMA против программы)

Я использую контроллер STM32F4xx. Я использовал DMA для буферизации UART (круговые буферы). Я обеспокоен тем, что, если моя программа получит доступ к той же ячейке памяти в то же время, что и DMA, возникнет конфликт памяти.

Может ли конфликт возникнуть таким образом, или у контроллера есть меры для предотвращения этого?

Благодарю.

1 ответ

Решение

Я нашел это в руководстве STM32F401:

BusMatrix управляет арбитражем доступа между мастерами (CPU, DMA). Арбитраж использует алгоритм циклического перебора.

Может случиться, что DMA (или CPU) не сможет выполнить передачу (в нужное время) из-за арбитража. Это вызывает ошибку опустошения / переполнения (в DMA процессор будет ждать).

Если флаг DMEIFx или FEIFx установлен из-за состояния переполнения или переполнения, неисправный поток не отключается автоматически, и это зависит от программного обеспечения, отключать или нет поток путем сброса бита EN в регистре DMA_SxCR. Это связано с тем, что при возникновении такого рода ошибок не происходит потери данных.

Другие вопросы по тегам