Если я отключу DMAContinuousRequests, будет ли ADC автоматически запускать запрос DMA каждый раз, когда он завершает преобразование?

  1. Если я отключу DMAContinuousRequests, будет ли ADC автоматически запускать запрос DMA каждый раз, когда он завершает преобразование?
  2. Что, если я включу DMAContinousRequests, будет ли DMA передавать образец ADC несколько раз, если между ними не было нового преобразования?

Вот что написано в руководстве:

[...] этот параметр указывает, выполняются ли запросы DMA в однократном режиме (передача DMA останавливается при достижении количества преобразований) или выполняются в непрерывном режиме (передача DMA неограничена, независимо от количества преобразований).

Что я хочу сделать

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

(например: X = 64 и Y = 10k)

Моя идея

  1. настроить аналоговый сторожевой таймер
  2. при превышении порога используйте обратный вызов, чтобы установить АЦП в режим DMA и запустить его с помощью таймера (режим непрерывного преобразования отключен, а DMAContinousRequests отключен)
  3. вернуться в сторожевой режим после X выборок (буфер DMA заполнен)

Вернуться к вопросу

Правильно ли настроен мой режим непрерывного преобразования и постоянные запросы DMA для этой цели?


person le_lemon    schedule 23.03.2021    source источник


Ответы (1)


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

В любом случае DMA запрашивает передачу данных только тогда, когда они готовы.

[Изменить для нового вопроса]

Когда я читал руководство, у АЦП есть только два режима прямого доступа к памяти: в непрерывном режиме он будет работать вечно. В прерывистом режиме он преобразует каждый активированный канал только один раз.

Если вы хотите читать один и тот же канал более одного раза, но не навсегда, вам необходимо сначала включить непрерывный режим DMA, а затем выключить его в какой-то момент в будущем. Вероятно, для этого подойдет полное прерывание DMA.

person Tom V    schedule 23.03.2021
comment
Я попытался отредактировать сообщение, чтобы прояснить свой вопрос. Если я понимаю руководство и ваш ответ правильный, DMAContinousRequests актуален только в том случае, если я настроил АЦП на последовательное выполнение нескольких преобразований. Но если я инициирую каждое преобразование индивидуально, оно мне не понадобится, но и вреда от этого не будет. Это верно ? - person le_lemon; 24.03.2021