解决NRF52832使用浮点运算后功耗过高的问题

    当nrf52832使用浮点运算后,再做低功耗。功耗再怎么调,都比较高。这是因为,nrf52832使用FPU后,不会自动关闭,所以我们要解决这个功耗问题,需要在nrf52832不使用浮点运算时关闭FPU.实现方式是在FPU的中断中关闭FPU.如下:

/***********************************************************************************

 *                          FPU IRQ 

 * 2020/11/3 add

 * *********************************************************************************/

#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

/**

 * @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的时候关闭FPU.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值