Настройка 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.