AT32F407带存储器保护单元(MPU),内建单周期乘法和硬件除法
不同与一些51单片机或MSP430,在使用乘除法器时需要对相关寄存器进行操作,CoretexM内核的处理器时真实的把硬件乘法器关联到MUL中.
AT32F407还内建浮点运算(FPU),具有DSP指令集
开启FPU仅需要在魔术棒中配置
__FPU_PRESENT和__FPU_USED库文件已设置好,如果进行修改就会导致硬件错误HardFault_Handler
若要使用DSP则需要添加Libraries\CMSIS\Lib\ARM目录下的arm_cortexM4lf_math.lib
该目录下的文件有两个
1.arm_cortexM4bf_math.lib(浮点Cortex-M4大端模式)
2.arm_cortexM4lf_math.lib(浮点Cortex-M4小端模式) 407的内核CortexM4F采用小端模式,所以选择:arm_cortexM4lf_math.lib(浮点Cortex-M4小端模式)。
加入宏定义
#define ARM_MATH_CM4
#define ARM_MATH_MATRIX_CHECK
#define ARM_MATH_ROUNDING
在main.c中#include "arm_math.h"
DSP库主要包含以下几个分库:
BasicMathFunctions:基本数学函数:提供浮点数的各种基本运算函数,如向量加减乘除等运算。
CommonTables:arm_common_tables.c文件提供位翻转或相关参数表。
ComplexMathFunctions:复杂数学功能,如向量处理,求模运算的。
ControllerFunctions:控制功能函数。包括正弦余弦,PID电机控制,矢量Clarke变换,矢量Clarke逆变换等。
FastMathFunctions:快速数学功能函数。提供了一种快速的近似正弦,余弦和平方根等相比CMSIS计算库要快的数学函数。
FilteringFunctions:滤波函数功能,主要为FIR和LMS(最小均方根)等滤波函数。
MatrixFunctions:矩阵处理函数。包括矩阵加法、矩阵初始化、矩阵反、矩阵乘法、矩阵规模、矩阵减法、矩阵转置等函数。
StatisticsFunctions:统计功能函数。如求平均值、最大值、最小值、计算均方根RMS、计算方差/标准差等。
SupportFunctions:支持功能函数,如数据拷贝,Q格式和浮点格式相互转换,Q任意格式相互转换。
TransformFunctions:变换功能。包括复数FFT(CFFT)/复数FFT逆运算(CIFFT)、实数FFT(RFFT)/实数FFT逆运算(RIFFT)、和DCT(离散余弦变换)和配套的初始化函数。
TMR_SetCounter(TMR6,0);
TMR_Cmd(TMR6, ENABLE);
for (i = 0; i<10000; i++)
{
date = cosf(angle);
date = sinf(angle);
angle += 0.001f;//????
}
TMR_Cmd(TMR6, DISABLE);
time = TMR_GetCounter(TMR6);
printf("·ÇDSP:%d us \r\n ", time);
TMR_SetCounter(TMR6,0);
TMR_Cmd(TMR6, ENABLE);
for (i = 0; i<10000; i++)
{
date = arm_cos_f32(angle);
date = arm_cos_f32(angle);
angle += 0.001f;
}
TMR_Cmd(TMR6, DISABLE);
time = TMR_GetCounter(TMR6);
printf("DSP:%d us \r\n", time);
可以看出使用DSP库的函数会比mach(#include "math.h" )的sin和cos函数快一倍左右
单使用mach函数占用内存:
单使用dsp函数占用内存:
|