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

STM32F303調(diào)用NVIC_SystemReset函數(shù)軟件復(fù)位失敗的原因?怎么解決?
STM32 HAL_NVIC_SystemReset()死機(jī)的原因?
Ch579 NVIC_SystemReset()函數(shù)不復(fù)位怎么解決?
華大單片機(jī)怎么用NVIC_SystemReset()軟復(fù)位?
NVIC_CoreReset內(nèi)核復(fù)位
STM32F1單片機(jī)軟件復(fù)位

基于STM32L4的NVIC中斷系統(tǒng)

STM32學(xué)習(xí)筆記(五)---NVIC

STM32 NVIC相關(guān)庫函數(shù)解析

NVIC_SystemReset使用及系統(tǒng)復(fù)位

STM32軟件復(fù)位

STM32F1----NVIC

GD32 MCU電源復(fù)位和系統(tǒng)復(fù)位有什么區(qū)別

評(píng)論