Регистры 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.
| Экземпляр | Базовый адрес | Есть у |
|---|---|---|
| CORDIC | 0x4002 0C00 | всех |
Регистры блока
| Регистр | Смещение | Назначение | После сброса |
|---|---|---|---|
| CORDIC_CSR | 0x00 | Функция, точность, масштаб, форматы и DMA | 0x0000 0050 |
| CORDIC_WDATA | 0x04 | Аргументы | 0xXXXX XXXX |
| CORDIC_RDATA | 0x08 | Результаты | 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.
| 31 | 30 | 29 | 28 | 27 | 26 | 25 | 24 | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 |
| RRDY | — | ARGSIZE | RESSIZE | NARGS | NRES | DMAWEN | DMAREN | IEN | |||||||
| 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
| — | SCALE | PRECISION | FUNC | ||||||||||||
- 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.
| 31 | 30 | 29 | 28 | 27 | 26 | 25 | 24 | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 |
| ARG | |||||||||||||||
| 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
| ARG | |||||||||||||||
- ARG (биты 31:0) — Аргумент (или два 16-битных аргумента).
CORDIC_RDATA — результаты
Смещение 0x08, адрес 0x4002 0C08, 32 бит, после сброса 0x0000 0000. В коде: CORDIC->RDATA.
| 31 | 30 | 29 | 28 | 27 | 26 | 25 | 24 | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 |
| RES | |||||||||||||||
| 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
| 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).
Источники
- STMicroelectronics. RM0440: Reference manual (Rev 9) — раздел 17.4: описание регистров, назначение полей и значения после сброса
- 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
- Все регистры STM32G4Блоки периферии и заголовки CMSIS
- RCC — тактирование и сбросRCC_CR, RCC_ICSCR, RCC_CFGR, RCC_PLLCFGR, RCC_CIER, RCC_CIFR
- GPIO — порты ввода-выводаGPIOx_MODER, GPIOx_OTYPER, GPIOx_OSPEEDR, GPIOx_PUPDR, GPIOx_IDR, GPIOx_ODR
- SYSCFG — системная конфигурацияSYSCFG_MEMRMP, SYSCFG_CFGR1, SYSCFG_EXTICR1, SYSCFG_EXTICR2, SYSCFG_EXTICR3, SYSCFG_EXTICR4
- EXTI — внешние прерыванияEXTI_IMR1, EXTI_EMR1, EXTI_RTSR1, EXTI_FTSR1, EXTI_SWIER1, EXTI_PR1
- USART — последовательные порты USART и LPUARTUSART_CR1, USART_CR2, USART_CR3, USART_BRR, USART_GTPR, USART_RTOR
- SPI — интерфейсы SPI и I2SSPI_CR1, SPI_CR2, SPI_SR, SPI_DR, SPI_CRCPR, SPI_RXCRCR
- I2C — интерфейс I2CI2C_CR1, I2C_CR2, I2C_OAR1, I2C_OAR2, I2C_TIMINGR, I2C_TIMEOUTR
- TIM — таймерыTIMx_CR1, TIMx_CR2, TIMx_SMCR, TIMx_DIER, TIMx_SR, TIMx_EGR
- LPTIM — маломощный таймерLPTIM_ISR, LPTIM_ICR, LPTIM_IER, LPTIM_CFGR, LPTIM_CR, LPTIM_CMP
- DMA — прямой доступ к памятиDMA_ISR, DMA_IFCR, DMA_CCR, DMA_CNDTR, DMA_CPAR, DMA_CMAR
- АЦП — аналого-цифровые преобразователиADC_ISR, ADC_IER, ADC_CR, ADC_CFGR, ADC_CFGR2, ADC_SMPR1
- IWDG — независимый сторожевой таймерIWDG_KR, IWDG_PR, IWDG_RLR, IWDG_SR, IWDG_WINR
- WWDG — оконный сторожевой таймерWWDG_CR, WWDG_CFR, WWDG_SR
- CRC — вычислитель CRCCRC_DR, CRC_IDR, CRC_CR, CRC_INIT, CRC_POL
- DBGMCU — отладкаDBGMCU_IDCODE, DBGMCU_CR, DBGMCU_APB1FZR1, DBGMCU_APB1FZR2, DBGMCU_APB2FZR
- PWR — управление питаниемPWR_CR1, PWR_CR2, PWR_CR3, PWR_CR4, PWR_SR1, PWR_SR2
- FLASH — флеш-памятьFLASH_ACR, FLASH_PDKEYR, FLASH_KEYR, FLASH_OPTKEYR, FLASH_SR, FLASH_CR
- RTC — часы реального времени и вмешательствоRTC_TR, RTC_DR, RTC_SSR, RTC_ICSR, RTC_PRER, RTC_WUTR
- ЦАП — цифро-аналоговые преобразователиDAC_CR, DAC_SWTRIGR, DAC_DHR12R1, DAC_DHR12L1, DAC_DHR8R1, DAC_DHR12R2
- FMAC — фильтровый ускоритель FMACFMAC_X1BUFCFG, FMAC_X2BUFCFG, FMAC_YBUFCFG, FMAC_PARAM, FMAC_CR, FMAC_SR