1、關(guān)于復位
說到復位,我們都不會陌生,對于一個MCU系統(tǒng),復位電路是必不可少的一部分。復位的種類有很多:上電復位、低電壓復位、引腳復位、看門狗復位、軟件復位等等。本文說的內(nèi)核復位是軟件復位的一種。
Cortex-M3內(nèi)核芯片提供了兩種軟件復位,分別是系統(tǒng)復位和內(nèi)核復位,而Cortex-M0+內(nèi)核芯片只提供了系統(tǒng)復位,內(nèi)核復位不支持,只能軟件模擬。
2、系統(tǒng)復位和內(nèi)核復位的區(qū)別
內(nèi)核復位:只復位內(nèi)核處理器,而不復位外設(shè)如GPIO、Timer、UART、Flash等的寄存器。
系統(tǒng)復位:既復位內(nèi)核處理器,又復位外設(shè)寄存器。
下面分別是Cortex-M3和Cortex-M0+的應(yīng)用程序中斷及復位控制寄存器(AIRCR)配置圖,從圖中可以看出,置位AIRCR寄存器中的SYSRESETREQ位(位偏移:2),即可實現(xiàn)系統(tǒng)復位;置位VECTRESET位(位偏移:0),即可實現(xiàn)內(nèi)核復位。Cortex-M0+中沒有VECTRESET的定義,故不支持內(nèi)核復位。本文會介紹一種軟件模擬內(nèi)核復位的方法。
圖1 Cortex-M3應(yīng)用程序中斷及復位控制寄存器(AIRCR)
圖2 Cortex-M0+應(yīng)用程序中斷及復位控制寄存器(AIRCR)
系統(tǒng)復位在ARM官方的庫文件中都有提供相關(guān)的函數(shù),用戶直接調(diào)用即可。官方給出的系統(tǒng)復位函數(shù)定義如下所示:
內(nèi)核復位在ARM官方的庫文件中沒有相關(guān)的函數(shù),需要用戶自行編寫。Cortex-M3的內(nèi)核復位函數(shù)編寫如下:
3、軟件模擬內(nèi)核復位的方法
內(nèi)核復位在某些特殊應(yīng)用下,如OTA升級時,往往會被用到。此時,不希望復位外設(shè),只需要程序從頭開始跑即可。以中穎M0+內(nèi)核芯片為例,在啟動配置章節(jié)有介紹到,用軟件模擬內(nèi)核復位來使運行在引導區(qū)的程序改由從用戶代碼區(qū)啟動。
中穎M0+內(nèi)核芯片從復位中退出時,會首先讀取向量表中(從地址0x00000000開始,見圖3)的頭兩個字。第一個字為主棧指針(MSP)的初始值,而第二個字則為決定程序執(zhí)行起始地址(復位處理)的復位向量。該復位流程可以用軟件去模擬,圖4是軟件模擬內(nèi)核復位的C語言源碼。
圖3向量表
圖4軟件模擬內(nèi)核復位的C語言源碼
圖4源碼中,第1行定義了函數(shù)指針類型,取名為“FUNC_CALL”;第2,3行申明了兩個變量,分別是無符號整型變量main_pgm和函數(shù)指針類型變量func;第5~20行定義了一個函數(shù),取名為__NVIC_CoreReset(),該函數(shù)可以實現(xiàn)對MSP裝載復位初始值,并使程序跳轉(zhuǎn)到復位向量處開始執(zhí)行,進而模擬了內(nèi)核復位。
函數(shù)__NVIC_CoreReset()中,第9行調(diào)用了ARM官方庫文件中的函數(shù)(見下圖),將存儲器0x0地址處的值賦給了寄存器MSP,實現(xiàn)了MSP復位初始值的裝載;第10行是將存儲器0x4地址處的值賦給變量main_pgm;第11行是將變量main_pgm強制轉(zhuǎn)換成函數(shù)指針類型并賦給func;第12行調(diào)用函數(shù)func(),最終使程序跳轉(zhuǎn)到了存儲器0x4地址存儲的復位向量處運行。
用戶需要內(nèi)核復位時,在程序中直接調(diào)用圖4中定義的函數(shù)__NVIC_CoreReset()即可。
4、總結(jié)
綜上所述,本文提供了一種軟件模擬內(nèi)核復位的方法,通過調(diào)用自定義函數(shù)__NVIC_CoreReset()即可實現(xiàn)內(nèi)核復位,給出了該函數(shù)的C語言源碼,用戶直接在自己程序中加載即可使用。該方法彌補了CortexM0+芯片沒有自帶內(nèi)核復位功能的不足。
來源:中穎電子(作者:余為國)
免責聲明:本文為轉(zhuǎn)載文章,轉(zhuǎn)載此文目的在于傳遞更多信息,版權(quán)歸原作者所有。本文所用視頻、圖片、文字如涉及作品版權(quán)問題,請聯(lián)系小編進行處理
審核編輯 黃宇
-
芯片
+關(guān)注
關(guān)注
456文章
51004瀏覽量
425206 -
寄存器
+關(guān)注
關(guān)注
31文章
5358瀏覽量
120771 -
內(nèi)核
+關(guān)注
關(guān)注
3文章
1377瀏覽量
40338 -
軟件模擬
+關(guān)注
關(guān)注
0文章
8瀏覽量
7244
發(fā)布評論請先 登錄
相關(guān)推薦
評論