S32K14x系列使用之硬件FPU特性介绍和使用详解
- Cortex M4F CPU内核的FPU特性介绍
1.1. Cortex M4F CPU内核FPU的寄存器组以及控制状态寄存器功能介绍
1.2 Cortex M4F CPU内核FPU的汇编指令集介绍
1.3 CM4F内核的FPU异常
- S32K14X系列MCU的FPU使用(基于S32K144的S32DS应用工程)
2.1 创建使能硬件FPU的S32DS应用工程
2.2 配置S32K14x的S32DS应用工程使能内核硬件FPU
2.3 关于S32DS应用工程FPU Support选项配置的说明
- 编译结果分析与使用Tips
3.1 EWL库with FP instructions(hard)
3.2 EWL库with Libary with FP(softfp)
3.3 EWL库with Libary(soft)
3.4 EWL库with Toolchain default
3.5 使用单精度浮点数进行数学函数运算
3.6 S32K14x系列MCU硬件FPU使用注意事项(Tips)
S32K14x系列汽车级MCU使用了ARM Cortex M4F作为CPU内核,其配置了硬件的FPU--Float Process Unit, 浮点数处理单元,可以支持IEEE 754规范的32-bit单精度浮点数(Single Precision floating point)运算。但是关于Cortex M4F CPU内核的FPU特性和具体在应用程序中如何使用以及使用时的注意事项,并不清楚。
基于此,本文先介绍一下Cortex M4F CPU内核的FPU特性,然后结合S32K144的S32DS应用工程,介绍如何配置使能M4F内核的FPU单元,并给出一些FPU使用的注意事项供大家参考学习。
- Cortex M4F CPU内核的FPU特性介绍
CM4F CPU内核的硬件FPU单元具有如下特性:
包含专用的32个32-bit的寄存器组,既可以当做32个32-bit寄存器使用也可以当做16个双字(Double-word 64-bit)寄存器使用;
支持IEEE 754规范的32-bit单精度的浮点数运算;
提供转换指令支持:
整型数<-->单精度浮点数;
定点数<-->单精度浮点数;
半精度<-->单精度浮点数;
支持FPU寄存器组与存储器之间的单精度或者双字数据搬移;
支持FPU寄存器组与CPU整型数寄存器组之间的单精度或者双字数据搬移;
1.1. Cortex M4F CPU内核FPU的寄存器组以及控制状态寄存器功能介绍
Cortex M4F CPU内核为FPU提供了专门的数据寄存器S0~S31,这些寄存器时可以作为单独的32-bit寄存器为FPU使用,也可以两两组合为64-bit的D0~D15为FPU所使用,这样其不占用CPU做整数运算和逻辑控制的通用寄存器R0~R11,大大提高了计算效率。
此外,为了获取FPU浮点数计算的结果,还提供FPU专用的状态和控制寄存器--FPSCR(Floating Point Status and Control Register),其定义如下:
Tips: 复位后CP10和CP11都是0'b00,为关闭FPU,允许低功耗的配置。因此使用FPU之前必须通过以下配置将其配置为0'b11:
SCB->CPACR= 0x00F00000; // Enable the floating point unit for full access
除此之外,FPU还提供可以下可以通过CPU地址映射进行访问的额外寄存器:
除此之外,FPU还提供可以下可以通过CPU地址映射进行访问的额外寄存器:
使能FPU后,若发生CPU中断或者异常,则不但CPU通用寄存器(R0~R3, R12, LR)返回地址(Return Address)和状态寄存器(xPSR)需要压栈保存,FPU数据寄存器(S0~S15)以及状态寄存器(FPSCR)也需要压栈保存:
由于硬件FPU的存在,CM4F内核提供了额外的浮点数处理汇编指令集,如下图,CM4F内核使用的FPU为基于ARMv7-M架构的扩展,称作FPUv4-SP(Floating Point version 4 --Single Precision),其为ARMv-7A 和ARMv7-R架构扩展VFPv4-D16(VFP stands for Vector Floating Point--向量浮点数)的子集。这两个版本中很多浮点数指令都是相同的,因此通常浮点数操作也被称作VFP,且所有的浮点数汇编指令助记符都以字母V开头:
①Libary(soft): GCC编译时调用软件库;
②Libary with FP(softfp):允许使用硬件FPU指令,但依然使用GCC库的软件浮点数调用约定(conventions);
③FP instructions(hard):生成硬件FPU指令,且使用FPU规范的调用约定;
④Toolchain default:为新建应用工程默认设置,取决于具体的目标配置;
Tips: 其中选项①Libary(soft)和④Toolchain default都不会使用硬件FPU,在应用程序中遇到浮点数计算时,将使用CM4 CPU内核的整数指令通过软件库的方式实现;