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

Контроллер GD32F103RCT6 связка DMA и АЦП, можно ли читать результат не прерывая работу DMA

Ну, видимо, в других МК очередность доступа шинных мастеров не тупо карусельная (как в STM32), а весьма сложная и с приоритетами и т.д., что и выливается в доп. управление возможностью прерываний пакетных транзакций.

А вообще говоря, "отменяемые" burst-ы, например, при доступе к регистрам периферии, весьма опасны.

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


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

12 минут назад, Arlleex сказал:

А вообще говоря, "отменяемые" burst-ы, например, при доступе к регистрам периферии, весьма опасны.

Ну вот  - для того lock и добавили. Чтобы поставить его, если имеется опасность.

И почему Вы думаете, что в STM32 burst-ы DMA не могут прерываться?

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


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

1 час назад, jcxz сказал:

И почему Вы думаете, что в STM32 burst-ы DMA не могут прерываться?

Как минимум там тривиальный карусельный арбитр, нет настроек приоритетов мастеров да и вообще, за то время что имел с ними дело, на глаза попадались всякие ст-шные официальные документы, в которых обозначено, что уже действующего мастера никто перебить или отменить не может

Цитата

To ensure data coherence, each group of transfers that form a burst is indivisible: AHB transfers are locked and the arbiter of the AHB bus matrix does not remove the DMA master’s access rights during the burst transfer sequence.


То же самое и с другими мастерами - например, CPU при сохранении контекста прерывания тоже burst-ит доступ к шине памяти, и прерывание будет задержано до тех пор, пока шина не освободится...

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


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

В 08.09.2023 в 16:19, Arlleex сказал:

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

 

ДА именно это я и имел ввиду, я пока не настолько хорошо разбираюсь в потрахах контроллера  , но если я правильно понял то такая логика работы прокатит в моём случае правильно ?  потому что шина не даст мне  что-то считать, если туда записывает DMA ? 

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


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

1 минуту назад, RR2021 сказал:

но если я правильно понял то такая логика работы прокатит в моём случае правильно ?

Да, если код настройки DMA тот же, что в первом посте этой темы.

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


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

12 минут назад, Arlleex сказал:

Да, если код настройки DMA тот же, что в первом посте этой темы.

я правильно понимаю что вот эти две строчки должны быть как в первом посте ? 

просто мне ещё один канал АЦП и DMA надо по похожей схеме настроить, поэтому хотелось бы знать, что конкретно должно быть как в первом посте 

    dma_init_ADC0.memory_width = DMA_MEMORY_WIDTH_32BIT;

    dma_init_ADC0.periph_width = DMA_PERIPHERAL_WIDTH_32BIT;

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


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

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

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

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

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

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

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

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

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

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