系統復位是置位同一個寄存器中的 SYSRESETREQ 位。這種復位則會波及整個芯片上的電路:它會使 CM3 處理器把送往系統復位發生器的請求線置為有效。但是系統復位發生器不是CM3的一部分,而是由芯片廠商實現,因此不同的芯片對此復位的響應也不同。因此,讀者需要認真參閱該芯片規格書,明白當發生片內復位時,各外設和功能模塊都會回到什么樣的初始狀態,或者有哪些功能模塊不受影響(比如, STM32系列的芯片有后備存儲區,該區就被特殊對待)。
大多數情況下,復位發生器在響應 SYSRESETREQ 時,它也會同時把 CM3 處理器的系統復位信號(SYSRESETn)置為有效。通常, SYSRESETREQ 不應復位調試邏輯。
這里有一個要注意的問題:從 SYSRESETREQ 被置為有效,到復位發生器執行復位命令,往往會有一個延時。在此延時期間,處理器仍然可以響應中斷請求。但我們的本意往往是要讓此次執行到此為止,不要再做任何其它事情了。所以,最好在發出復位請求前,先把FAULTMASK置位。因此,我在提供源代碼中有這么一句:__set_FAULTMASK(1);,也就是置位FAULTMASK。
C語言版函數:
voidNVIC_SysReset(void){ __DSB(); SCB->AIRCR = ((0x5FA << SCB_AIRCR_VECTKEY_Pos) | (SCB->AIRCR & SCB_AIRCR_PRIGROUP_Msk) | SCB_AIRCR_SYSRESETREQ_Msk); __DSB(); while(1);}
匯編版函數:
__asm void NVIC_SysReset_a(void){ LDR R0, =0xE000ED0C LDR R1, =0x05FA0004 STR R1, [R0]deadloop_Sys B deadloop_Sys}
內核復位與系統源代碼和相近,差異在于SYSRESETREQ和SYSRESETREQ這兩位。
關于復位的知識,在實際項目中應用的比較多。
可以結合上面提供例程理解,以及結合Cortex-M手冊理解。
-
處理器
+關注
關注
68文章
19407瀏覽量
231182 -
復位電路
+關注
關注
13文章
322瀏覽量
44705
原文標題:31個驚艷的數據可視化作品,讓你感受“數據之美”!
文章出處:【微信號:mcuworld,微信公眾號:嵌入式資訊精選】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論