前言
本文基于MSP432P401R,总所周知MSP432基于Cortex-M4内核,Cortex-M4内核相比于M3而言多了FPU(浮点运算单元)并支持DSP指令集,FPU配合DSP指令使得单片机浮点运算时间大大缩短。官方给出的数据是有近10倍的缩短。TI官方给只给出的FPU的例程,没有给出DSP例程,而且FPU例程描述的不清晰。下文将介绍如何开启FPU和移植DSP库并进行测试。
以下是本篇文章的正文内容
一、开启FPU
MSP432是ARM内核,自然就支持MDK了。个人习惯使用MDK,也推荐MSP432使用MDK开发。
开启FPU之前先查看当前设备是否支持FPU,进入MDK调试界面,右下角查看地址0xE000ED88 数据, 如果为0x00F00000 00000000 00000800, 则说明设备支持 FPU。
在MDK编译器就可以开启FPU。
如图点击魔术棒后点击Target,在Floating Point Hardware选项框中选择Single Precision。不同版本的选项名称可能不同,只要不是Not Used就行了。
二、使用DSP指令集
1.移植
开启FPU后可以提升浮点运算的速度,但是一些数学运算还需要配合DSP指令。
在魔术棒C++ define中添加如下定义
__MSP432P401R__ TARGET_IS_MSP432P4XX keil,ARM_MATH_CM4,CC_ARM
添加头文件
#include
添加完这个头文件编译后会报一推错误,主要是缺少相关文件。
在MDK安装目录下ARMPACKARMCMSIS5.8.0CMSISDSPInclude下找到下列文件,不同版本的安装目录有所不同,可以直接使用搜素功能搜素文件名字。整个include文件夹都需要包含进工程。
include中DSP文件夹的文件也需要包含。
如果使用sin、cos等数学函数需要添加对应源文件和头文件,如arm_sin_f32.c 和arm_cos_f32.c。 建议直接添加arm_cortexM4lf_math.lib库文件,里面包含所有数学函数。该库文件在 KeilARMCMSISDSP_LibSourceFastMathFunctions可以找到。
进行完上述操作后就可以愉快使用DSP指令集了,如果找不到相关文件,在文章下方有上传的工程模板。
2.测试
for(i=0;i<20000;i++)
{
c = (arm_sin_f32(50.5) * (12.2f / 50.1f) * 10.22f / 3) * i;
//c = (sin(50.5) * (12.2f / 50.1f) * 10.22f / 3) * i;
}
在while循环中进行多次浮点运算,对比使用DSP指令和普通数学指令的时间就可以了。或者直接翻转LED,可以明显看到使用DSP库后LED的翻转频率加快。同时开启FPU下,使用DSP速度提升约20%。注意在开启FPU后不管用不用DSP指令浮点运算时间都会缩短。
关键字:MSP432 FPU
引用地址:
MSP432 FPU与DSP测试
推荐阅读最新更新时间:2024-11-11 10:44
MSP432--GPIO IAR环境
GPIO 1.特点:众多的独立可编程I/O口 任意端口的输入输出组合 中断 独立的输入输出寄存器 独立可配置的上拉下拉寄存器 2.分布:总共有P1 P2 P3 P4 P5 P6 P7 P8 P9 P10 PJ P1-P10共78个I/O,PJ有6个I/O P1.0,P1.4,P1.5,P3.0,P3.4,P3.5,P6.6,P6.7自带硬件滤波,消抖 P1.2-- BSLRXD P1.3-- BSLTXD SPI引脚:P1.4-- BSLSTE P1.5-- BSLCLK P1.6-- BSLSIMO P1.7-- BSLSOMI IIC引脚:P3.6-- BSLSDA P3.7-- BSLSCL 总共100引脚 ZXH封装
[单片机]
基于DSP的列车应变力测试系统设计方案
车轮与轨道间的作用力是评价车辆运行品质的重要因素,能否准确及时地获取轮轨间的作用力直接影响着车辆脱轨系数等参数的计算。应变力测试系统是设计列车运行状态地面安全监测平台的关键环节,本文用DSP芯片开发的测试系统正是针对这一需要。 测试系统硬件设计 系统整体结构 测试系统以高速、高精度的DSP为核心,构成了包括模拟信号预处理、A/D转换、D/A转换等环节的实时信号测试处理系统。其原理框图如图1所示。 应变传感器输出的模拟信号,经RC滤波网络初步滤去信号中的高频成分,然后经A/D转换后,变为数字信号。RC滤波网络、A/D转换构成了测试系统的前向通道。 中央处理单元以TMS320VC33为主体,该DSP是一款高精度、大容量、宽功率范
[嵌入式]
msp432记录-timer
timer驱动API非常简单,就只有几个,开始计时,停止计时,获得计数值。认识初始化参数结构体即可 typdef struct { Timer_Mode timerMode; //模式 Timer_PeriodUnits periodUnits; //计数周期单位 Timer_CallBackFxn timerCallback; //回调函数 uint32_t period; //计数周期,联系periodUnits } //下面记录一下具体的数据结构参数 //模式结构体 注意,某些定时器可以被配置为向上计数和向下计数模式,通过Timer_getCount()得到计数值 typedef enum{ Timer
[单片机]
STM32CubeMX下FPU,DSP库的移植
1.关于FPU的移植 只要是硬件带有FPU功能的芯片,FPU的使用一般都是默认开启的。也可在Options选项卡中自行选择; 2.关于DSP库的移植 使用STM32的DSP库一定要开启FPU功能 使用STM32CubeMx生成的项目工程中,一般都包含了STM32的DSP库(存在于CMSIS中),不过需要根据硬件的大小端模式选择相应的DSP库。其DSP库位于: 固件库安装路径+ \STM32Cube\Repository\STM32Cube_FW_F4_V1.16.0\Drivers\CMSIS\Lib\ARM 其中arm_cortexM4b_math.lib代表设备为大端模式; 其中arm_cortexM4bf_math
[单片机]
微控制器DSP/FPU硬件加速芯片整合
微控制器(MCU)深入人们应用生活,几乎大小设备都看得到MCU踪影,在MCU导入DSP数位讯号处理器、FPU浮点运算单元功能后,MCU更大幅扩展元件可适用范围,这几年来,在众多MCU大厂纷纷针对旗下商品推出多样整合方案,不管是产品策略还是市场区隔,也让MCU市场更加丰富多元...
MCU(Microcontroller Unit)深入生活应用是不容易质疑的趋势,尤其是MCU在功能优化或市场区隔目的下,进行DSP(digital signal processor)数位讯号处理器或FPU(Floating Point Unit)浮点运算单元功能整合,使得MCU的可应用场域大幅扩展。
MCU整合FPU可以在进阶数值运
[手机便携]
MSP432库函数学习笔记-CS
时钟初始化设置 void CS_setExternalClockSourceFrequency(uint32_t lfxt_XT_CLK_frequency, uint32_t hfxt_XT_CLK_frequency); //设置外部晶振LFXT和HFXT的频率值 如果不使用外部时钟来源则不管这个,时钟故障机制会选择其他时钟来源 void CS_initClockSignal(uint32_t selectedClockSignal,uint32_t clockSource, uint32_t clockSourceDivider); //初始化时钟信号
[单片机]
msp432快速入门第一节之找齐资料
老话说:授人以鱼不如授人以渔,这里我会讲一下自己如何快速入门一款单片机,便于回看,在2020年省赛我被430折磨,故今年提前准备。主要是记录自己的方法,仅仅代表个人观点。 (1)需要的资料整理 先看一下大概需要的资料 ,我手里是TI的msp432p401r 小火箭板(红色),对于先入门一款单片机,可以先想一下我们需要的资料: (1)usermanual,各种外设的使用在这里; (2)datasheet,主要看一下电气特性以及引脚复用 (3)相应的sdk,TI官方应该有,最好SDK里边有例子程序,那么可以直接用了,当然重新整理下也不错。 (4)板子的原理图,其他就不太需要了, 那么我们按照需要挨个找链接下载。 (2)TI官网下载
[单片机]
MSP432(Keil5)——9.ADC驱动
本次例程驱动了板载的ADC来读取一个模拟的角度传感器,大家可以在ADC读取中断里面换成其他的计算,具体引脚见程序代码。 adc.c #include adc.h void ADC_Init(void) { /* Initializing ADC (MCLK/1/4) */ MAP_ADC14_enableModule(); MAP_ADC14_initModule(ADC_CLOCKSOURCE_MCLK, ADC_PREDIVIDER_1, ADC_DIVIDER_4, 0); /* Configuring GPIOs (5.5 A0) */ MAP_GPIO_setAsPeripher
[单片机]