深度睡眠模式下中断唤醒失败?
MCU:hdsc32l17x外设:lis3dh
问题:正常模式下,中断可进,数据可读。进入深度睡眠模式,中断可进,但是数据读不出(进入深度睡眠的函数是官方的库函数),
非常疑惑,希望大家帮我看看是什么问题。先写过各位了!
以下为代码:
int main(void)
{
App_LIS3DHIOCfg(); //模拟SPI端口设置
Lis3dh_Init(); //LIS3DH寄存器初始化设置
Lpm_GotoDeepSleep(TRUE); //进入深度睡眠模式
while(1)
{
if(Int_Status.Lis3dh_Int == 1)
{
Gpio_SetIO(GpioPortB,GpioPin0);//示波器看波形,便于低功耗调试
Int_Status.Lis3dh_Int = 0;
for(i=0;i<32;i++)
{
Get_Fifo_Data(&result);
}
Gpio_ClrIO(GpioPortB,GpioPin0);
}
}
}
void PORTA_IRQHandler(void)
{
if(TRUE == Gpio_GetIrqStatus(GpioPortA,GpioPin8))
{
Gpio_SetIO(GpioPortB,GpioPin11);
Int_Status.Lis3dh_Int = 1;
LIS3DH_WriteReg(LIS3DH_FIFO_CTRL_REG,0x00);//清除FIFO数据
LIS3DH_WriteReg(LIS3DH_FIFO_CTRL_REG,0x40);//FIFO设置
Gpio_ClearIrq(GpioPortA,GpioPin8);
Gpio_ClrIO(GpioPortB,GpioPin11);
}
}
刚才试了下定时器中断也是这样子,怎么破? 我明白了,中断唤醒后只是执行中断服务函数里面的程序,while(1)中的程序却不会执行。
Lpm_GotoDeepSleep(FALSE);//进入深度睡眠模式唤醒后不再进入深度休眠
Lpm_GotoDeepSleep(TRUE);//进入深度睡眠模式唤醒后继续进入深度休眠
所以只能使用参数为FALSE的函数,利用中断唤醒后执行完while(1)中的函数再进入深度休眠。目前是这么理解的,不知道对不对。
哈哈,第一次搞低功耗没啥经验。这波是我大意了,没有闪!
页:
[1]