Настройка 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 рекомендовано отключить.