Настройка DMA для записи в устройство (Init_DMA_BASE_in)

 
в палитре на схеме

Блок использует контроллер DMA для передачи массива заданного размера на регистры периферийного устройства. Но так же может использоваться для копирования областей памяти микроконтроллера. Блок обращается к функции DMA_BASE() находящейся в dma.h проекта шаблона сборки кода. Функция может быть изменена пользователем.

Входы

  • dev_init – определяет последовательность включения блока в работу используется после настройки периферийного устройства;
  • buf – буфер с цифровыми значениями для передачи периферийным устройством;
  • sort_block – необходим для определения порядка сортировки блока.

Выходы

  • ready – значение 1, заданный массив заполнен.

Свойства:

  • Адрес приемника\источника данных – addr - Адрес регистра данных периферийного устройства АЦП. По умолчанию - 0x40090008 (ЦАП2);
  • Канал DMA – Chanal - Канал DMA. По умолчанию - 8;
  • Размер выходного массива – SIZE - Размер массива выходного буфера. По умолчанию - 32;
  • Автоувеличение адреса для источника – DMA_SourceIncSize - Автоматическое увеличение адреса источника. По умолчанию - DMA_SourceIncNo;
  • Автоувеличение адреса для приемника – DMA_DestIncSize - Автоматическое увеличение адреса приемника. По умолчанию - DMA_DestIncWord;
  • Размер посылки – DMA_MemoryDataSize - Размер элемента массива. По умолчанию - Word;
  • Использовать прерывание – Intr - После завершения цикла DMA возникает прерывание, для продолжения работы необходимо пери инициализировать контроллер DMA, после чего контроллер DMA будет готов к следующему циклу работы. В результате получение данных будет проходить в асинхронном режиме. По умолчанию - нет;
  • Запрос к DMA – Request - Если устройству не определен канал DMA, то можно выбрать свободный и для того, что бы происходило выполнения цикла DMA в момент обращения к блоку, а не асинхронно, как в варианте, когда используем пере инициализацию в обработчике прерывания, можно реализовать запрос к каналу. По умолчанию - нет.

Параметры

нет

Примечание: В случае если устройству назначен канал и мы хотим получать результаты работы блока при обращении к нему, то не стоит использовать ни режим прерывания, ни режим запроса, пере инициализация будет происходить в момент обращения к блоку простым обращением к функции DMA_Init(). В случае если устройству не выделен канал DMA, а мы хотим выполнения цикла в момент обращения к блоку то следует выбрать режим Request, в этом случае после обращения к функции DMA_Init(), будет произведено обращение к функции Request() и произойдет цикл работы контроллера DMA.

Важно! При использовании DMA при приеме/передачи информации от периферийных устройств использование прерываний от внешних источников может привести к сбою в работе контроллера DMA. При использовании контроллера DMA режим отладки DEBUG рекомендовано отключить.