もうちょっときれいに
昨日のコードを少し書き直しました。
void boot_for_gdb(void) { if ( ! (*pSWRST & RESET_SOFTWARE ) ){ /* ソフトウェアリセットが起きていないなら以下実行 */ *pSWRST = 0x07; /* 内蔵ペリフェラルのリセット */ asm volatile( "ssync;" ); *pSWRST = 0x00; /* 内蔵ペリフェラルのリセット解除。 */ asm volatile( "ssync;" ); *pSYSCR |= 0x10; /* no boot on core reset */ asm volatile( "ssync;" ); asm volatile( "raise 1;" ); /* コアリセット */ while( 1 ) ; /*リセットが発生するまでループ*/ } }
リセットがあったか否かを、USPではなくSWRSTレジスタのビットで判断しています。すっきりしました。