1

スリープモードと 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();
}

なぜこれが適切に機能しないのか、誰にも手がかりがありますか?

4

1 に答える 1

3

割り込みの優先順位を確認しましたか?

34.3.5.2.1 WFI またはスリープ オン エグジットからのウェイクアップ
通常、プロセッサは、例外エントリを引き起こすのに十分な優先度を持つ例外を検出した場合にのみウェイクアップします。
于 2012-08-27T19:52:57.603 に答える