Ярлыки

_GetPixelIndex (1) _SetPixelIndex (1) 3-phase (1) 800x480 (1) АЦП (1) генератор (1) синхронный усилитель (2) структура (1) учебный курс (1) шаговый двигатель (1) ШИМ (2) accert (1) AD7608 (1) AD8429 (1) ADC (5) amplifer (1) arccos (1) arcsin (1) arctang (2) arctg (3) ARM (2) arm_sqrt_q15 (2) assembler (6) ASSERT (1) atan (2) bit (1) Bitband (1) boot (3) bootlloader (1) BUTTON (1) C (5) C# (1) CAN (2) CC2530 (5) CMSIS (4) command (1) Cordic (1) Core746I (1) CubeMX (4) DBGMCU (2) debug (2) debug.ini (1) delegate (1) Digital Potentiometers (1) DigitalPOT (1) Discovery (1) DMA (9) DMA2D (1) DSP (1) DSP library (1) DWT (1) EFM32 (5) EmWin (9) EXTI (1) FATFS (1) FMC (2) FreeRTOS (2) gl868-dual cmux (1) GPIO (4) GUI (2) GUIBuilder (1) GUIDRV_CompactColor_16 (1) HAL (3) HappyGecko (1) Hard Fault (2) heap (1) I2C (1) ID (1) ILI9320 (1) ILI9325 (1) Initialisation (1) InitLTDC (1) Instrumentithion (1) Interrupt (4) ITR (1) JTAG (1) Keil (5) LCDConf (2) lock-in (1) LTCD (1) LTDC (3) main (1) memory (1) MINI_STM32 Revision 01 (1) nBoot0 (1) NVIC (1) OnePulse (2) OSAL (4) pack (1) phase (1) printf (3) Pulse (1) PWM (12) RCC (2) RCR (1) Register (1) RESET (2) RS232 (3) RSS (1) RTC (3) RTOS-RTX (1) RTT (1) RTX-RTOS (1) SDCard (1) SDRAM (6) Segger (2) SPI (3) sqrt (3) SSD1298 (1) SSD1963 (1) Standart Peripherial Library (3) STANDBAY (1) startup (1) STemWin (8) stepper motor (1) STlink (2) STM32 (17) STM32429ZI (1) STM32Cube (1) STM32DBG.IN (1) STM32F (28) STM32F0 (4) STM32F1 (13) STM32F4 (10) STM32F4 Discovery (1) STM32F407ZG (1) STM32F429 (2) STM32F746 (1) STOP (1) string (1) struct (1) SWD (1) SWD JTAG (1) Synhronization (1) system_stm32f4xx.c (1) SystemInit (1) SysTick (1) task (4) telit (1) TIM (27) typedef (1) UART (1) USART (9) viewer (2) WM_PAINT (1) Z-stack (5) ZigBee (5)

понедельник, 16 февраля 2015 г.

RCC STM32F1

Контроллеры STM32 обладают достаточно развитой системой тактирования, включающей кучу различных делителей, умножителей и селекторов, которые позволяют "разогнать" до 72 МГц частоту ядра и системной шины, а также организовать тактирование на различных частотах всех входящих в состав контроллера модулей (USB, I/O, I2C, SPI...).

При этом стартует контроллер всегда от внутреннего генератора на 8 МГц, а дальнейший "разгон" и настройка тактирования различных модулей выполняется программно.

Все регистры, отвечающие за настройку системы тактирования сгруппированы в так называемый блок RCC (reset and clock control). Это десять 32-х битных регистров, доступных в памяти начиная с адреса 0x40021000, названия которых начинаются с "RCC_".

Настройку системы тактирования можно разделить на два этапа. На первом этапе настраивается системная тактовая частота. На втором этапе - частота системной шины AHB и подключенные к шине AHB модули. Отдельно от этих двух этапов можно настроить низкоскоростные генераторы для часов реального времени и независимого "собачьего таймера".

суббота, 14 февраля 2015 г.

STM32 Assembler routine sqrt modul

Функция подсчета модуля вектора (квадрат модуля не должен превышать 32 бита)

AREA |.text|, CODE, READONLY
sqrt_32 PROC
EXPORT sqrt_32 [WEAK]

MUL R0,R0,R0
MUL R1,R1,R1
ADD R0,R0,R1

;       Optimised 32-bit integer sqrt
;      INPUT
;       Calculates square root of R0
;      OUTPUT
;       Result returned in R0

среда, 4 февраля 2015 г.

CMSIS DSP Library: arm_sqrt_q15

Определение функции:

arm_status arm_sqrt_q15(q15_t in, q15_t * pOut)

q15 - формат с фиксированной точкой  1.15 в котором 0 представлен как 0х0000, а 1 представлена как 0х7FFF. Это значит, что например 1/2 будет представлена в формате 0х4000, а 1/4 как 0х2000. Функция возвращает статус  ARM_MATH_SUCCESS или ARM_MATH_ARGUMENT_ERROR. Результат функция возвращает по ссылке pOut. Результат представлен также в формате q15. Например

arm_sqrt_q15(0x1000,&out);

0х1000 является представлением в формате q15 числа 1/8 или 0.125. Корень квадратный sqrt(0.125)=0.3536. Функция дает результат 0х2D42 = 11586/2^15 = 0,3536. Время выполнения функции для 32F103 @72MHz  - 244 такта  (3,39 mks).

Аналогичным образом используется и более точная функция:

arm_sqrt_q31(q31_t in, q31_t * pOut);

Ее время выполнения функции для 32F103 @72MHz  - 286 тактов  (3,97 mks).

Для плавающей точки:

arm_sqrt_f32(float32_t in, float32_t * pOut);

Время выполнения функции для 32F103 @72MHz  - 544 такта  (7,56 mks).

Указанное время выполнения функций были определены для версии V1.4.4 библиотеки CMSIS DSP (Date: 12. March 2014), которая идентична предыдущим версиям V1.4.3, V1.4.2, и V1.4.1.

Для справки: при использовании стандартной библиотеки Си math.h для различных типов переменных получим примерно такие (в зависимости от аргумента) времена выполнения функций в тактах

float         sqrtf(float)     ~ 575
double      sqrt(double)  ~ 2640