Embedded 在中断中调用LPC17xx睡眠模式和软件重置错误

Embedded 在中断中调用LPC17xx睡眠模式和软件重置错误,embedded,microcontroller,Embedded,Microcontroller,我的睡眠模式和NVIC_reset()都有问题,也称为软件重置 问题出现在两个完全不同的板上,两个板都带有LPC1769 uC 如果我在main()或其他函数(中断例程除外)中进入睡眠模式,睡眠模式将正常工作。uC也会在EINT0上通过外部中断唤醒。重置功能在主功能中也能很好地完成其工作 但当在中断例行程序中调用睡眠模式或重置请求时,故障就会开始。睡眠模式似乎要进入,但uC不再醒来 例如,使用EINT1进入睡眠模式,使用EINT0唤醒: void EINT0_IRQHandler(void) {

我的睡眠模式和NVIC_reset()都有问题,也称为软件重置

问题出现在两个完全不同的板上,两个板都带有LPC1769 uC

如果我在main()或其他函数(中断例程除外)中进入睡眠模式,睡眠模式将正常工作。uC也会在EINT0上通过外部中断唤醒。重置功能在主功能中也能很好地完成其工作

但当在中断例行程序中调用睡眠模式或重置请求时,故障就会开始。睡眠模式似乎要进入,但uC不再醒来

例如,使用EINT1进入睡眠模式,使用EINT0唤醒:

void EINT0_IRQHandler(void)
{
  EXTI_ClearEXTIFlag(0);
}

void EINT1_IRQHandler(void)
{
    EXTI_ClearEXTIFlag(1);
    CLKPWR_Sleep();
}

有人知道为什么不能正常工作吗?

您检查过中断优先级了吗

34.3.5.2.1从注射用水中醒来或在出口处睡觉
通常,处理器只有在检测到具有足够优先级的异常时才会唤醒 导致异常条目。
是的,它应该使用默认优先级列表(18比19高)。但只有当我手动更改优先级时,中断才会在睡眠时工作。问题有点复杂。我想完成的事情是制作一个开/关按钮,首先将uC置于睡眠模式,第二次按下时(相同的按钮相同的中断),使用看门狗定时器重置uC。当使用两个按钮和两个不同的中断例程时,这种方法效果很好。但是,当仅使用一个中断例程(EINT0)时,我会遇到相同的问题,即uC不再唤醒,因为当uC进入睡眠模式时,它仍然处于具有相同优先级的中断例程中。在进入睡眠之前将优先级更改为较低(较高优先级)值也没有帮助。你可能会认为这种功能是经常需要的,但我没有看到有人这样做。至少在网上是这样。这是代码:void EINT0_IRQHandler(void){EXTI_ClearEXTIFlag(0);CLKPWR_Sleep();WDT_Init(WDT_CLKSRC_IRC,WDT_MODE_RESET);WDT_Start(1)}有人知道实现这种功能的方法吗?@wlamers没有,这不是经常需要的,因为在中断时睡觉是不寻常的。在大多数系统中,为了省电,通常在空闲环路中,当你无事可做时,你就睡觉。在你的情况下,我会用中断来唤醒你。为了入睡,我会在一个任务中周期性地对按钮进行采样(也会去抖动)。