Перейти к содержанию

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

DMAMUX1DMAMUX2
ОбслуживаетDMA1 и DMA2, домен D2BDMA, домен D3
Выходных каналов16 (0–7 → DMA1, 8–15 → DMA2)8
Входов запросов от периферии10712
Каналов генератора запросов88
Входов запуска / синхронизации8 / 832 / 16

Генератор запросов и синхронизация

Кроме мультиплексора в 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. Генератор выдаёт заданное число запросов по фронту на входе запуска. Так строят цепочки: событийный выход одного канала запускает другой без участия процессора.

Источники

  1. 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
  2. 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; один запрос можно назначить двум каналам, только если они не запрашиваются одновременно
  3. 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 — номер запроса

Нашли ошибку?