相关规格:
- STM32F407IG 处理器,带 FPv4-SP FPU (Cortex M4F);
- STM32F40G-EVAL 开发板;
- IAR 嵌入式工作台 - ARM,v6.50
问题:如何在 FP 计算之前以编程方式打开 FPU,并在完成后再次将其关闭?
- IAR EWARM 提供了在构建之前在项目选项中关闭/打开 FPU 的功能
在
SystemInit()
之前调用的 中main
,执行以下代码:#if (__FPU_PRESENT == 1) && (__FPU_USED == 1) SCB->CPACR |= ((3UL << 10*2)|(3UL << 11*2)); /* set CP10 and CP11 Full Access */ #endif
请注意,这会将 CPACR 位 [23:20] 设置为 1。这是必需的,否则将在下一条 FPU 汇编器指令上调用 HardFault IRQ。但是禁用它是否会产生任何额外的影响,例如降低功耗等,或者这个寄存器是否只是监管协处理器(FPU)?
如果没有进一步的暗示,那么也许通过 CPACR 将其“关闭”并没有完成任何事情,这表明 FPU 仅在执行 FPU 指令集命令时消耗额外的功率。
谢谢,