スリープモードと NVIC_reset()、別名ソフトウェア リセットの両方に問題があります。
この問題は、LPC1769 uC を搭載した 2 つの完全に異なるボードで発生します。
割り込みルーチンを除いて、main() または別の関数内でスリープ モードに入ると、スリープ モードは完全に機能します。uC は、EINT0 の外部割り込みでもウェイクアップします。リセット関数は、メイン関数でもうまく機能します。
しかし、割り込みルーチン内でスリープモードまたはリセット要求が呼び出されると、トラブルが発生します。スリープ モードに入ったように見えますが、uC はもうウェイクアップしません。
たとえば、EINT1 でスリープ モードに入り、EINT0 でウェイクします。
void EINT0_IRQHandler(void)
{
EXTI_ClearEXTIFlag(0);
}
void EINT1_IRQHandler(void)
{
EXTI_ClearEXTIFlag(1);
CLKPWR_Sleep();
}
なぜこれが適切に機能しないのか、誰にも手がかりがありますか?