Генерация сигнала произвольной формы с помощью пакетных передач DMA таймера



 

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

Каждая транзакция DMA состоит из двух стадий:

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

Двух стадийная операция перемещения данных связана с обновлением индексного регистра транзакции DMA; этот регистр используется для отслеживания, сколько данных осталось передать.

В семействах микроконтроллеров STM32 есть два варианта аппаратуры DMA:

• Функция DMA burst transfer (пакетный прямой доступ к памяти) поддерживается только в том варианте реализации, где DMA может перемещать конфигурируемое количество элементов данных для одиночной транзакции. Одному срабатыванию триггера транзакции соответствует перемещение целого блока данных.
• В другом варианте, как в одной из разновидностей STM32F1, DMA поддерживает перемещение только одного элемента данных на транзакцию; это означает, что по одному срабатыванию триггера транзакции перемещается один элемент данных, не блок.

Параграф выше не претендует на полное описание функции STM32 DMA-burst feature, поддерживаемой многими микроконтроллерами STM32. Это просто общая информация, предназначенная для устранения неправильного понимания пакетного DMA. Для дополнительной информации по аппаратуре DMA STM32 обратитесь к соответствующим руководствам.

DMA-burst таймера

 У таймера есть возможность генерации нескольких следующих друг за другом запросов DMA, которые запускаются после одно события таймера. Основное использование этой функции - обновление содержимого нескольких регистров таймера каждый раз, когда сработает событие этого таймера. Это можно делать либо для динамического реконфигурирования рабочего режима таймера (переключаясь из одного режима вывода в другой, например из режима PWM2 в режим принудительной установки активного уровня, force-active-level mode), или для изменения рабочих параметров нескольких каналов одновременно (меняя параметры скважности сразу для нескольких каналов таймера).

Эта же функция DMA-burst также может использоваться для перемещения содержимого нескольких регистров таймера в буфер памяти.

DMA позволяет на лету модифицировать выводимую таймером форму сигнала путем подстройки содержимого регистров таймера. Например, это позволяет обновлять регистр TIMx_ARR, чтобы подстроить частоту выводимого сигнала или обновлять регистр TIMx_CCRx для подстройки скважности сигнала.

Чтобы использовать функцию DMA-burst, программист должен работать со следующими регистрами таймера:

– Регистр адреса DMA (TIMx_DMAR): это регистр перенаправления доступа на чтение/запись.
– Регистр управления DMA (TIMx_DCR): это регистр управления машиной состояния burst-транзакции.
– Регистр настройки контроллера DMA.

TIMx_DMAR.

Регистр используется для конфигурирования адреса регистра назначения, когда DMA конфигурируется в режиме передачи из памяти в таймер. Он также используется как адрес регистра источника, когда DMA конфигурируется в режиме передачи из таймера в память.

Аппаратура DMA должна обновлять содержимое серии регистров таймера значениями из буфера памяти, где находятся заранее определенные или вычисленные значения, но это не означает, что адрес транзакции, указанный регистром адреса периферийного устройства, должен быть сконфигурирован для пост-инкремента контроллером DMA после каждой передачи данных. Регистр адреса периферийного устройства контроллера DMA должен указывать на регистр таймера TIMx_DMAR.

Регистр TIMx_DMAR таймера является виртуальным. Любой доступ к этому регистру будет перенаправлен логикой управления DMA-burst таймера на один из физических регистров таймера.

Доступ к регистру TIMx_DMAR может быть либо на чтение, либо на запись. Перенаправление реального доступа к регистру TIMx_DMAR на другой физический регистр таймера зависит от содержимого регистра TIMx_DCR настройки интерфейса DMA-burst. Также это зависит от реального состояния машины состояний (finite-state machine, FSM), управляющей интерфейсом DMA burst таймера.


Дата добавления: 2020-01-07; просмотров: 223; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!