由AIRCR寄存器定义可知,在Cortex-M3中,有两种方式可以执行软件复位:
该方式下,,复位的作用范围覆盖整个CM3,但不影响内核以外的所有其他电路,所以片上外设和其他电路不受影响。
该方式下,复位操作波及整个芯片上的电路。
3、reset在redboot上的实现
HAL_PLATFORM_RESET()宏实现如下:
#define HAL_PLATFORM_RESET()\{\HAL_WRITE_UINT32(CYGARC_REG_NVIC_BASE+CYGARC_REG_NVIC_AIRCR,\CYGARC_REG_NVIC_AIRCR_KEY|\CYGARC_REG_NVIC_AIRCR_SYSRESETREQ );\for(;;);\}
在此:
_register_ = CYGARC_REG_NVIC_BASE+CYGARC_REG_NVIC_AIRCR = 0xE000E000 + 0xD0C = 0xE000ED0C_value_ = CYGARC_REG_NVIC_AIRCR_KEY | CYGARC_REG_NVIC_AIRCR_SYSRESETREQ = (0x5FA<<16) + (1<<2)
0x5FA是访问该寄存器的钥匙。
for(;;);死循环保证后面的指令不被执行到。
蚁穴虽小,溃之千里。