- keil中配置
- 在sdk_config.h中配置
// NRF_PWR_MGMT_CONFIG_FPU_SUPPORT_ENABLED - Enables FPU event cleaning. #ifndef NRF_PWR_MGMT_CONFIG_FPU_SUPPORT_ENABLED #define NRF_PWR_MGMT_CONFIG_FPU_SUPPORT_ENABLED 1 #endif
- 定义FPU相关宏
#define FPU_EXCEPTION_MASK 0x0000009F //!< FPU exception mask used to clear exceptions in FPSCR register. #define FPU_FPSCR_REG_STACK_OFF 0x40 //!< Offset of FPSCR register stacked during interrupt handling in FPU part stack.
- 使能FPU中断
NVIC_SetPriority(FPU_IRQn, APP_IRQ_PRIORITY_LOWEST); NVIC_ClearPendingIRQ(FPU_IRQn); NVIC_EnableIRQ(FPU_IRQn);
- FPU中断处理函数
/**
* @brief FPU Interrupt handler. Clearing exception flag at the stack.
*
* Function clears exception flag in FPSCR register and at the stack. During interrupt handler
* execution FPU registers might be copied to the stack (see lazy stacking option) and
* it is necessary to clear data at the stack which will be recovered in the return from
* interrupt handling.
*/
void FPU_IRQHandler(void)
{
// Prepare pointer to stack address with pushed FPSCR register.
uint32_t * fpscr = (uint32_t * )(FPU->FPCAR + FPU_FPSCR_REG_STACK_OFF);
// Execute FPU instruction to activate lazy stacking.
(void)__get_FPSCR();
// Clear flags in stacked FPSCR register.
*fpscr = *fpscr & ~(FPU_EXCEPTION_MASK);
}
以上步骤是使能硬件FPU功能操作