Настройка DMA для чтения в буфер от устройства (Init_DMA_BASE_out)

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

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

Входы

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

Выходы

  • ready – значение 1, заданный массив заполнен;
  • Uint32_tBuf – возвращает массив со значениями полученными от периферийного устройства.

Свойства:

  • Адрес приемника\источника данных – addr - Адрес регистра данных периферийного устройства АЦП. По умолчанию - 0x40088018 (АЦП1);
  • Канал 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.