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

Регистры CORDIC STM32G4

Регистры CORDIC STM32G4: выбор функции, точность и масштаб, форматы аргументов и результатов, число слов, прерывание и запросы DMA, регистры аргументов и результатов.

CORDIC вычисляет тригонометрические и гиперболические функции, модуль и фазу вектора, натуральный логарифм и квадратный корень в фиксированной точке: q1.31 (32 бита) или q1.15 (16 бит, два значения в слове). Функцию задаёт поле FUNC, точность — PRECISION: число итераций, делённое на 4; на итерацию приходится около 4 бит точности (RM0440, раздел 17.4).

Аргументы пишут в WDATA, результат читают из RDATA — запись последнего аргумента запускает расчёт, а чтение RDATA до готовности просто задерживает шину. Масштаб SCALE расширяет диапазон аргументов для гиперболических функций, ln и корня. CORDIC тактируется битом CORDICEN в RCC_AHB1ENR.

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

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

РегистрСмещениеНазначениеПосле сброса
CORDIC_CSR0x00Функция, точность, масштаб, форматы и DMA0x0000 0050
CORDIC_WDATA0x04Аргументы0xXXXX XXXX
CORDIC_RDATA0x08Результаты0x0000 0000

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

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

Значение: 0x00000050

0000 0000 0000 0000 0000 0000 0101 0000

CORDIC->CSR = 0x00000050;

CORDIC_CSR — функция, точность, масштаб, форматы и DMA

Смещение 0x00, адрес 0x4002 0C00, 32 бит, после сброса 0x0000 0050. В коде: CORDIC->CSR.

31302928272625242322212019181716
RRDY—ARGSIZERESSIZENARGSNRESDMAWENDMARENIEN
1514131211109876543210
—SCALEPRECISIONFUNC
  • RRDY (бит 31) — Результат готов; сбрасывается чтением RDATA.
  • ARGSIZE (бит 22) — Формат аргументов: 32 бита q1.31 (0) или 16 бит q1.15 (1).
  • RESSIZE (бит 21) — Формат результатов: 32 бита q1.31 (0) или 16 бит q1.15 (1).
  • NARGS (бит 20) — Число аргументов в 32-битном формате: один (0) или два (1) слова WDATA.
  • NRES (бит 19) — Число результатов в 32-битном формате: одно (0) или два (1) чтения RDATA.
  • DMAWEN (бит 18) — Запросы DMA на запись аргументов.
  • DMAREN (бит 17) — Запросы DMA на чтение результатов.
  • IEN (бит 16) — Прерывание по готовности результата.
  • SCALE (биты 10:8) — Масштаб: аргумент умножается на 2^−n, результат — на 2^n.
  • PRECISION (биты 7:4) — Точность: число итераций / 4 (1…15); больше итераций — точнее и дольше.
  • FUNC (биты 3:0) — Функция: cos, sin, фаза, модуль, arctg, ch, sh, arth, ln или квадратный корень.

CORDIC_WDATA — аргументы

Смещение 0x04, адрес 0x4002 0C04, 32 бит, после сброса 0xXXXX XXXX. В коде: CORDIC->WDATA.

31302928272625242322212019181716
ARG
1514131211109876543210
ARG
  • ARG (биты 31:0) — Аргумент (или два 16-битных аргумента).

CORDIC_RDATA — результаты

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

31302928272625242322212019181716
RES
1514131211109876543210
RES
  • RES (биты 31:0) — Результат (или два 16-битных результата).

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

Как посчитать синус и косинус угла на CORDIC?

CSR: FUNC = 0 (cos), PRECISION = 6, NARGS = 0, NRES = 1, форматы q1.31. Запишите угол в WDATA как долю π в q1.31 (например, 0x2000 0000 — π/4), затем прочитайте RDATA дважды: косинус и синус.

Какую точность выбрать?

Число итераций — 4 × PRECISION, и для тригонометрических функций каждая итерация добавляет примерно один двоичный разряд: PRECISION = 6 даёт около 24 бит. Для формата q1.15 хватает PRECISION = 4; гиперболические функции и логарифм сходятся медленнее (раздел 17.3.5).

Источники

  1. STMicroelectronics. RM0440: Reference manual (Rev 9) — раздел 17.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

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