DMAMUX (мультиплексор запросов DMA)
В старых STM32 каждый запрос периферии к DMA был жёстко привязан к определённому потоку или каналу. В новых семействах между ними стоит мультиплексор DMAMUX, и канал DMA можно отдать любому периферийному блоку.
Обновлено Редакция GAW
DMAMUX (DMA request multiplexer) — мультиплексор, который соединяет линии запросов периферии с каналами контроллеров DMA. По RM0433 каждый канал DMAMUX выбирает одну линию запроса — безусловно или синхронно с внешним событием, — и этот канал жёстко подключён к одному каналу DMA. Выбор запроса делается записью его номера в поле DMAREQ_ID регистра канала.
Зачем он нужен
В STM32F7 поток DMA выбирает запрос битами CHSEL из небольшого фиксированного набора по таблицам карты запросов (RM0385, разд. 8.3.4). Если два нужных блока сидят на одном потоке, приходится менять схему. С DMAMUX у STM32H743 любой из 107 запросов идёт в любой из 16 каналов.
DMAMUX в STM32H743
Генератор запросов и синхронизация
Кроме мультиплексора в DMAMUX есть генератор запросов: по фронту на входе запуска — таймер, EXTI, событие другого канала — он выдаёт заданное число запросов DMA. Синхронизация позволяет пропускать запросы периферии только по внешнему событию, а событийный выход канала служит для цепочек: один канал DMA запускает другой. Счётчик запросов и флаг переполнения ловят ситуации, когда событие пришло раньше, чем закончилась предыдущая порция.
У отдельного контроллера MDMA в STM32H7 свои источники запуска, до 32, и к DMAMUX он не подключён: выходы DMAMUX1 идут только на DMA1 и DMA2, DMAMUX2 — на BDMA. Как настраивать каналы DMA в STM32 — в статье «DMA в STM32».
Частые вопросы
Чем DMAMUX отличается от выбора канала в STM32F4 и F7?
В STM32F7 (и F4) запрос выбирают битами CHSEL из небольшого набора, жёстко заданного таблицами карты запросов: если нужные периферийные блоки висят на одном потоке, их не развести. С DMAMUX любой из 107 запросов STM32H743 можно направить в любой из 16 каналов DMA1 и DMA2 — достаточно записать номер запроса в поле DMAREQ_ID.
Сколько мультиплексоров DMAMUX в STM32H743?
Два. DMAMUX1 обслуживает DMA1 и DMA2 в домене D2: 16 каналов, его каналы 0–7 идут на DMA1, 8–15 — на DMA2. DMAMUX2 обслуживает BDMA в домене D3: 8 каналов и 12 входов запросов от периферии этого домена.
Зачем DMAMUX генератор запросов?
Чтобы запускать передачу DMA не от периферии, а по событию — например, по выходу таймера, EXTI или другого канала DMA. Генератор выдаёт заданное число запросов по фронту на входе запуска. Так строят цепочки: событийный выход одного канала запускает другой без участия процессора.
Источники
- STMicroelectronics. RM0433: STM32H742, STM32H743/753 and STM32H750 Value line advanced Arm-based 32-bit MCUs. Reference manual, Rev 9 — разд. 17.1: DMAMUX направляет линии запросов DMA между периферией и контроллерами DMA; каждый канал выбирает одну линию запроса — безусловно или синхронно с событиями со входов синхронизации; DMAMUX может работать как генератор запросов DMA по событиям на входах запуска; разд. 17.2: до 16 выходных каналов, до 8 каналов генератора запросов, до 32 входов запуска, до 16 входов синхронизации, у канала мультиплексора до 107 входных линий запросов, счётчик запросов, флаг переполнения, событийный выход для цепочки запросов; разд. 17.3.1, табл. 123: DMAMUX1 для DMA1 и DMA2 (домен D2) — 16 каналов, 8 генераторов, 8 входов запуска, 8 синхронизации, 107 входов запросов; DMAMUX2 для BDMA (домен D3) — 8 каналов, 8 генераторов, 32 входа запуска, 16 синхронизации, 12 входов запросов; разд. 17.3.2 — каналы DMAMUX1 0–7 подключены к каналам DMA1 0–7, каналы 8–15 — к каналам DMA2 0–7; табл. 124 — номера входов, например 9 — adc1_dma, 87 — sai1a_dma
- STMicroelectronics. RM0385: STM32F75xxx and STM32F74xxx advanced Arm-based 32-bit MCUs. Reference manual, Rev 9 — разд. 8.3.4: каждый поток DMA связан с запросом, выбираемым битами CHSEL регистра DMA_SxCR из фиксированного набора; табл. 25 и 26 — карты запросов DMA1 и DMA2; один запрос можно назначить двум каналам, только если они не запрашиваются одновременно
- STMicroelectronics. CMSIS device header stm32h743xx.h, cmsis-device-h7 v1.10.7 (GitHub, Apache-2.0) — DMAMUX1_Channel0 … DMAMUX1_Channel15, DMAMUX2_Channel0 … DMAMUX2_Channel7, поле DMAMUX_CxCR_DMAREQ_ID — номер запроса
Нашли ошибку?
Смотрите также
- DMA STM32Каналы и потоки, запросы периферии, кольцо, двойной буфер, FIFO, флаги, примеры
- DMAПрямой доступ к памяти без участия ядра
- MDMA (master DMA)Контроллер DMA STM32H7 на шине AXI с доступом к TCM и FIFO на 256 позиций
- BDMA (basic DMA)8-канальный DMA домена D3 STM32H7 для SRAM4 и периферии D3
- Домены питания D1, D2 и D3 (STM32H7)Три части ядра STM32H7 со своими режимами работы и сна
- STM32H7Cortex-M7 от 280 до 600 МГц, двухъядерные H745/H747 — линейки, память, загрузка и распиновки
- Кольцевой режим DMAРежим DMA с автоматической перезагрузкой счётчика: буфер заполняется по кругу