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

Регистры FMAC STM32G4

Регистры FMAC STM32G4: размещение буферов X1, X2 и Y в локальной памяти, пороги заполнения, функция и её параметры, прерывания и DMA, насыщение и флаги ошибок.

FMAC выполняет фильтры FIR (свёртку) и IIR над 16-битными отсчётами q1.15 в своей памяти на 256 слов. В ней размещают три буфера: X1 — входные отсчёты, X2 — коэффициенты, Y — результаты; начало и размер каждого задают регистры X1BUFCFG, X2BUFCFG и YBUFCFG (RM0440, раздел 18.4).

Сначала функциями загрузки (FUNC = 1, 2, 3) заполняют буферы, затем запускают фильтр (FUNC = 8 — FIR, 9 — IIR) битом START. Отсчёты пишут в WDATA и читают из RDATA сами или через DMA; флаги X1FULL и YEMPTY управляют потоком, SAT, OVFL и UNFL сообщают об ошибках. FMAC тактируется битом FMACEN в RCC_AHB1ENR.

ЭкземплярБазовый адресЕсть у
FMAC0x4002 1400всех

Регистры блока

РегистрСмещениеНазначениеПосле сброса
FMAC_X1BUFCFG0x00Буфер входных отсчётов X10x0000 0000
FMAC_X2BUFCFG0x04Буфер коэффициентов X20x0000 0000
FMAC_YBUFCFG0x08Буфер выходных отсчётов Y0x0000 0000
FMAC_PARAM0x0CФункция и её параметры P, Q, R0x0000 0000
FMAC_CR0x10Прерывания, DMA, насыщение и сброс0x0000 0000
FMAC_SR0x14Флаги буферов и ошибок0x0000 0001
FMAC_WDATA0x18Запись данных0x0000 0000
FMAC_RDATA0x1CЧтение результата0x0000 0000

Конструктор значения

Выберите регистр и значения полей — конструктор покажет 32-битное значение и строку на C с макросами CMSIS. Поля, которые вы не меняете, берутся из значения после сброса.

Значение: 0x00000000

0000 0000 0000 0000 0000 0000 0000 0000

FMAC->X1BUFCFG = 0x00000000;

FMAC_X1BUFCFG — буфер входных отсчётов X1

Смещение 0x00, адрес 0x4002 1400, 32 бит, после сброса 0x0000 0000. В коде: FMAC->X1BUFCFG.

31302928272625242322212019181716
—FULL_WM—
1514131211109876543210
X1_BUF_SIZEX1_BASE
  • FULL_WM (биты 25:24) — Порог заполнения X1: флаг X1FULL, когда свободно меньше 1, 2, 4 или 8 мест.
  • X1_BUF_SIZE (биты 15:8) — Размер буфера X1 в 16-битных словах.
  • X1_BASE (биты 7:0) — Начало буфера X1 в локальной памяти FMAC (256 слов).

FMAC_X2BUFCFG — буфер коэффициентов X2

Смещение 0x04, адрес 0x4002 1404, 32 бит, после сброса 0x0000 0000. В коде: FMAC->X2BUFCFG.

31302928272625242322212019181716
—
1514131211109876543210
X2_BUF_SIZEX2_BASE
  • X2_BUF_SIZE (биты 15:8) — Размер буфера X2 в 16-битных словах.
  • X2_BASE (биты 7:0) — Начало буфера X2 в локальной памяти FMAC (256 слов).

FMAC_YBUFCFG — буфер выходных отсчётов Y

Смещение 0x08, адрес 0x4002 1408, 32 бит, после сброса 0x0000 0000. В коде: FMAC->YBUFCFG.

31302928272625242322212019181716
—EMPTY_WM—
1514131211109876543210
Y_BUF_SIZEY_BASE
  • EMPTY_WM (биты 25:24) — Порог опустошения Y: флаг YEMPTY, когда отсчётов меньше 1, 2, 4 или 8.
  • Y_BUF_SIZE (биты 15:8) — Размер буфера Y в 16-битных словах.
  • Y_BASE (биты 7:0) — Начало буфера Y в локальной памяти FMAC (256 слов).

FMAC_PARAM — функция и её параметры P, Q, R

Смещение 0x0C, адрес 0x4002 140C, 32 бит, после сброса 0x0000 0000. В коде: FMAC->PARAM.

31302928272625242322212019181716
STARTFUNCR
1514131211109876543210
QP
  • START (бит 31) — Запуск функции; сбрасывается по окончании (для фильтров — после остановки).
  • FUNC (биты 30:24) — Функция: загрузка X1, X2 или Y, фильтр FIR (свёртка) или IIR.
  • R (биты 23:16) — Параметр R: усиление — сдвиг результата на R бит влево.
  • Q (биты 15:8) — Параметр Q: число коэффициентов A у IIR-фильтра.
  • P (биты 7:0) — Параметр P: число коэффициентов B (для загрузки — число значений).

FMAC_CR — прерывания, DMA, насыщение и сброс

Смещение 0x10, адрес 0x4002 1410, 32 бит, после сброса 0x0000 0000. В коде: FMAC->CR.

31302928272625242322212019181716
—RESET
1514131211109876543210
CLIPEN—DMAWENDMAREN—SATIENUNFLIENOVFLIENWIENRIEN
  • RESET (бит 16) — Сброс FMAC: указатели буферов и флаги.
  • CLIPEN (бит 15) — Ограничение результата вместо переполнения.
  • DMAWEN (бит 9) — Запросы DMA на запись в X1.
  • DMAREN (бит 8) — Запросы DMA на чтение из Y.
  • SATIEN (бит 4) — Прерывание по насыщению.
  • UNFLIEN (бит 3) — Прерывание по опустошению Y при чтении.
  • OVFLIEN (бит 2) — Прерывание по переполнению X1 при записи.
  • WIEN (бит 1) — Прерывание: в X1 есть место для записи.
  • RIEN (бит 0) — Прерывание: в Y есть результат.

FMAC_SR — флаги буферов и ошибок

Смещение 0x14, адрес 0x4002 1414, 32 бит, после сброса 0x0000 0001. В коде: FMAC->SR.

31302928272625242322212019181716
—
1514131211109876543210
—SATUNFLOVFL—X1FULLYEMPTY
  • SAT (бит 10) — Насыщение: результат вышел за пределы q1.15.
  • UNFL (бит 9) — Чтение пустого буфера Y.
  • OVFL (бит 8) — Запись в полный буфер X1.
  • X1FULL (бит 1) — Буфер X1 заполнен до порога FULL_WM.
  • YEMPTY (бит 0) — Буфер Y пуст до порога EMPTY_WM.

FMAC_WDATA — запись данных

Смещение 0x18, адрес 0x4002 1418, 32 бит, после сброса 0x0000 0000. В коде: FMAC->WDATA.

31302928272625242322212019181716
—
1514131211109876543210
WDATA
  • WDATA (биты 15:0) — Входной отсчёт или коэффициент (q1.15).

FMAC_RDATA — чтение результата

Смещение 0x1C, адрес 0x4002 141C, 32 бит, после сброса 0x0000 0000. В коде: FMAC->RDATA.

31302928272625242322212019181716
—
1514131211109876543210
RDATA
  • RDATA (биты 15:0) — Выходной отсчёт (q1.15).

Частые вопросы

Как настроить FIR-фильтр на 16 коэффициентов?

X2BUFCFG: X2_BASE = 0, X2_BUF_SIZE = 16; загрузите коэффициенты функцией FUNC = 2 с P = 16. X1BUFCFG: X1_BASE = 16, размер 16 + запас; YBUFCFG — после X1. Затем PARAM: FUNC = 8, P = 16, R = 0, START = 1, и подавайте отсчёты в WDATA.

Чем FMAC лучше расчёта на ядре?

Он работает параллельно с ядром и по DMA: ядро только запускает фильтр, а на каждый отсчёт уходит около P тактов FMAC вместо цикла умножений с накоплением в программе.

Источники

  1. STMicroelectronics. RM0440: Reference manual (Rev 9) — раздел 18.4: описание регистров, назначение полей и значения после сброса
  2. STMicroelectronics. cmsis-device-g4 v1.2.6: заголовки CMSIS stm32g431xx.h, stm32g441xx.h, stm32g471xx.h, stm32g473xx.h, stm32g474xx.h, stm32g483xx.h, stm32g484xx.h, stm32g491xx.h, stm32g4a1xx.h — структуры периферии, смещения, адреса экземпляров и макросы полей; лицензия Apache-2.0

Нашли ошибку в регистрах?

Другие регистры STM32G4

Калькуляторы и статьи