2014-11-07 4 views
2

Интересно, можно ли читать из памяти, что dma записывает данные?Доступ к месту назначения STM32 dma

У меня есть stm32F1 с установкой adc для непрерывного выполнения преобразований и передачи данных в буфер буфера с использованием dma. Я знаю, что я могу использовать прерывание adc для безопасного доступа к буферу, но как получить доступ к буфере из контекста без прерывания? Могут ли данные быть повреждены, если я попытаюсь читать из того же места, которое пишет dma?

+0

Хотя безопасно, если ваш указатель доступа или dma передают друг другу, вы либо перечитываете устаревшие данные, либо не просматриваете непрочитанные данные перед их просмотром. Обычно, что делают люди, читается одна половина буфера, а dma заполняет другую. –

ответ

6

Ваши данные не будут повреждены - у этих микросхем есть арбитр шины, который предоставляет доступ к шине (так же и к ОЗУ) к DMA или ЦП (ваш код), поэтому каждая транзакция (один доступ к ОЗУ, не обязательно доступ ко всей переменной) является атомарным.

Смотрите эту информацию в RM0008 справочном руководстве:

3,1 Архитектура системы

...

BusMatrix

BusMatrix управляет арбитраж доступа между системной шиной ядра и главной шины DMA. В арбитраже используется алгоритм Robin Round . В устройствах линии связи BusMatrix - , состоящий из пяти мастеров (CPU DCode, системной шины, Ethernet DMA, DMA1 и шины DMA2) и трех ведомых устройств (мосты FLITF, SRAM и AHB2APB). В устройствах BusMatrix состоит из четырех мастеров (CPU DCode, системной шины, шины DMA1 и шины DMA2) и четырех подчиненных устройств (FLITF, SRAM, FSMC и мостов AHB2APB). AHB периферийные устройства подключаются к системной шине через шину BusMatrix для обеспечения доступа DMA.

Смежные вопросы