RM新时代网站-首页

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

一種軟件模擬內(nèi)核復(fù)位的方法

中穎電子 ? 來源:中穎電子 ? 作者:中穎電子 ? 2022-03-14 12:04 ? 次閱讀

1、關(guān)于復(fù)位

說到復(fù)位,我們都不會陌生,對于一個(gè)MCU系統(tǒng),復(fù)位電路是必不可少的一部分。復(fù)位的種類有很多:上電復(fù)位、低電壓復(fù)位、引腳復(fù)位、看門狗復(fù)位、軟件復(fù)位等等。本文說的內(nèi)核復(fù)位是軟件復(fù)位的一種。

Cortex-M3內(nèi)核芯片提供了兩種軟件復(fù)位,分別是系統(tǒng)復(fù)位和內(nèi)核復(fù)位,而Cortex-M0+內(nèi)核芯片只提供了系統(tǒng)復(fù)位,內(nèi)核復(fù)位不支持,只能軟件模擬

2、系統(tǒng)復(fù)位和內(nèi)核復(fù)位的區(qū)別

內(nèi)核復(fù)位:只復(fù)位內(nèi)核處理器,而不復(fù)位外設(shè)如GPIO、Timer、UART、Flash等的寄存器

系統(tǒng)復(fù)位:既復(fù)位內(nèi)核處理器,又復(fù)位外設(shè)寄存器。

下面分別是Cortex-M3和Cortex-M0+的應(yīng)用程序中斷及復(fù)位控制寄存器(AIRCR)配置圖,從圖中可以看出,置位AIRCR寄存器中的SYSRESETREQ位(位偏移:2),即可實(shí)現(xiàn)系統(tǒng)復(fù)位;置位VECTRESET位(位偏移:0),即可實(shí)現(xiàn)內(nèi)核復(fù)位。Cortex-M0+中沒有VECTRESET的定義,故不支持內(nèi)核復(fù)位。本文會介紹一種軟件模擬內(nèi)核復(fù)位的方法。

2523762e-a25f-11ec-952b-dac502259ad0.png

25358102-a25f-11ec-952b-dac502259ad0.png

圖1 Cortex-M3 應(yīng)用程序中斷及復(fù)位控制寄存器(AIRCR)

2547efcc-a25f-11ec-952b-dac502259ad0.png

圖2 Cortex-M0+應(yīng)用程序中斷及復(fù)位控制寄存器(AIRCR)

系統(tǒng)復(fù)位在ARM官方的庫文件中都有提供相關(guān)的函數(shù),用戶直接調(diào)用即可。官方給出的系統(tǒng)復(fù)位函數(shù)定義如下所示:

255b98a6-a25f-11ec-952b-dac502259ad0.png

25759544-a25f-11ec-952b-dac502259ad0.png

內(nèi)核復(fù)位在ARM官方的庫文件中沒有相關(guān)的函數(shù),需要用戶自行編寫。Cortex-M3的內(nèi)核復(fù)位函數(shù)編寫如下:

25973794-a25f-11ec-952b-dac502259ad0.png

3、軟件模擬內(nèi)核復(fù)位的方法

內(nèi)核復(fù)位在某些特殊應(yīng)用下,如OTA升級時(shí),往往會被用到。此時(shí),不希望復(fù)位外設(shè),只需要程序從頭開始跑即可。以中穎M0+內(nèi)核芯片為例,在啟動配置章節(jié)有介紹到,用軟件模擬內(nèi)核復(fù)位來使運(yùn)行在引導(dǎo)區(qū)的程序改由從用戶代碼區(qū)啟動。

中穎M0+內(nèi)核芯片從復(fù)位中退出時(shí),會首先讀取向量表中(從地址0x00000000開始,見圖3)的頭兩個(gè)字。第一個(gè)字為主棧指針(MSP)的初始值,而第二個(gè)字則為決定程序執(zhí)行起始地址(復(fù)位處理)的復(fù)位向量。該復(fù)位流程可以用軟件去模擬,圖4是軟件模擬內(nèi)核復(fù)位的C語言源碼。

25a92a30-a25f-11ec-952b-dac502259ad0.png

圖3 向量表

25c18242-a25f-11ec-952b-dac502259ad0.png

圖4 軟件模擬內(nèi)核復(fù)位的C語言源碼

圖4源碼中,第1行定義了函數(shù)指針類型,取名為“FUNC_CALL”;第2,3行申明了兩個(gè)變量,分別是無符號整型變量main_pgm和函數(shù)指針類型變量func;第5~20行定義了一個(gè)函數(shù),取名為__NVIC_CoreReset(),該函數(shù)可以實(shí)現(xiàn)對MSP裝載復(fù)位初始值,并使程序跳轉(zhuǎn)到復(fù)位向量處開始執(zhí)行,進(jìn)而模擬了內(nèi)核復(fù)位。

函數(shù)__NVIC_CoreReset()中,第9行調(diào)用了ARM官方庫文件中的函數(shù)(見下圖),將存儲器0x0地址處的值賦給了寄存器MSP,實(shí)現(xiàn)了MSP復(fù)位初始值的裝載;第10行是將存儲器0x4地址處的值賦給變量main_pgm;第11行是將變量main_pgm強(qiáng)制轉(zhuǎn)換成函數(shù)指針類型并賦給func;第12行調(diào)用函數(shù)func(),最終使程序跳轉(zhuǎn)到了存儲器0x4地址存儲的復(fù)位向量處運(yùn)行。

25d51bfe-a25f-11ec-952b-dac502259ad0.png

用戶需要內(nèi)核復(fù)位時(shí),在程序中直接調(diào)用圖4中定義的函數(shù)__NVIC_CoreReset()即可。

4、總結(jié)

綜上所述,本文提供了一種軟件模擬內(nèi)核復(fù)位的方法,通過調(diào)用自定義函數(shù)__NVIC_CoreReset()即可實(shí)現(xiàn)內(nèi)核復(fù)位,給出了該函數(shù)的C語言源碼,用戶直接在自己程序中加載即可使用。該方法彌補(bǔ)了CortexM0+芯片沒有自帶內(nèi)核復(fù)位功能的不足。

原文標(biāo)題:中穎M0+內(nèi)核芯片軟件模擬內(nèi)核復(fù)位的方法

文章出處:【微信公眾號:中穎電子】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

審核編輯:湯梓紅

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報(bào)投訴
  • 芯片
    +關(guān)注

    關(guān)注

    455

    文章

    50714

    瀏覽量

    423116
  • 內(nèi)核
    +關(guān)注

    關(guān)注

    3

    文章

    1372

    瀏覽量

    40275
  • 函數(shù)
    +關(guān)注

    關(guān)注

    3

    文章

    4327

    瀏覽量

    62569
  • 中穎電子
    +關(guān)注

    關(guān)注

    4

    文章

    174

    瀏覽量

    7434

原文標(biāo)題:中穎M0+內(nèi)核芯片軟件模擬內(nèi)核復(fù)位的方法

文章出處:【微信號:SINO_25181447,微信公眾號:中穎電子】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    Cortex-M內(nèi)核軟件復(fù)位方式

    這里只討論內(nèi)核軟件復(fù)位方式。像STM32的備份域復(fù)位里面也有軟件復(fù)位,則不在本文討論范圍。額外
    的頭像 發(fā)表于 12-06 16:18 ?2202次閱讀
    Cortex-M<b class='flag-5'>內(nèi)核</b>的<b class='flag-5'>軟件</b><b class='flag-5'>復(fù)位</b>方式

    給大家介紹一種軟件修正方法

    本文介紹一種三軸正交型傳感器正交性的軟件修正方法。
    發(fā)表于 05-07 06:53

    單片機(jī)軟件產(chǎn)生高頻方波的一種方法

    單片機(jī)軟件產(chǎn)生高頻方波的一種方法
    發(fā)表于 05-15 14:00 ?50次下載

    一種基于構(gòu)件的軟件開發(fā)方法

    針對傳統(tǒng)軟件開發(fā)方法在開發(fā)過程中軟件復(fù)用性的欠缺,文章先闡述了構(gòu)件的概念和標(biāo)準(zhǔn),然后提出了一種實(shí)用的基于構(gòu)件開發(fā)方法的原理和
    發(fā)表于 03-02 12:11 ?5次下載

    一種模擬電路故障診斷方法

    為了解決模擬電路故障診斷復(fù)雜多樣難于辨識的問題, 有效提高分類的準(zhǔn)確度, 提出了一種模擬電路故障診斷的新方法。
    發(fā)表于 03-30 16:10 ?55次下載
    <b class='flag-5'>一種</b><b class='flag-5'>模擬</b>電路故障診斷<b class='flag-5'>方法</b>

    得到模擬應(yīng)用設(shè)計(jì)經(jīng)驗(yàn)的一種方法

    得到模擬應(yīng)用設(shè)計(jì)經(jīng)驗(yàn)的一種方法
    發(fā)表于 01-24 16:29 ?8次下載

    基于數(shù)據(jù)特征的內(nèi)核惡意軟件檢測

    問題,提出了一種基于數(shù)據(jù)特征的內(nèi)核惡意軟件檢測方法,通過分析內(nèi)核運(yùn)行過程中內(nèi)核數(shù)據(jù)對象的訪問過程
    發(fā)表于 01-05 11:39 ?0次下載

    使用單片機(jī)實(shí)現(xiàn)軟件復(fù)位方法詳細(xì)說明

    單片機(jī)軟復(fù)位有什么好的方法?如從機(jī)收到復(fù)位命令(軟件命令),程序怎么使機(jī)器復(fù)位?雖然要使軟件始終
    發(fā)表于 09-25 17:17 ?4次下載
    使用單片機(jī)實(shí)現(xiàn)<b class='flag-5'>軟件</b><b class='flag-5'>復(fù)位</b>的<b class='flag-5'>方法</b>詳細(xì)說明

    移動通信中使用軟件無線電實(shí)現(xiàn)AGC的一種方法

    移動通信中使用軟件無線電實(shí)現(xiàn)AGC的一種方法說明。
    發(fā)表于 05-27 17:01 ?2次下載

    復(fù)位操作《Cortex?-M0+等內(nèi)核通用》

    《《《《《正文》》》》》軟件復(fù)位就是用系列指令來模仿硬件復(fù)位功能。現(xiàn)在arm越來越強(qiáng)大,就連蘋果macbook都用上了arm架構(gòu),下面分享基于arm
    發(fā)表于 01-12 19:04 ?4次下載
    軟<b class='flag-5'>復(fù)位</b>操作《Cortex?-M0+等<b class='flag-5'>內(nèi)核</b>通用》

    一種AUTOSAR軟件架構(gòu)中RTE的實(shí)現(xiàn)方法

    介紹了一種AUTOSAR軟件架構(gòu)中RTE的實(shí)現(xiàn)方法。
    發(fā)表于 07-13 16:02 ?6次下載

    一種改善模擬調(diào)光關(guān)斷性能的方法

    一種改善模擬調(diào)光關(guān)斷性能的方法
    發(fā)表于 10-28 12:00 ?0次下載
    <b class='flag-5'>一種</b>改善<b class='flag-5'>模擬</b>調(diào)光關(guān)斷性能的<b class='flag-5'>方法</b>

    一種拓展模擬采樣通道數(shù)的方法

    一種拓展模擬采樣通道數(shù)的方法
    發(fā)表于 10-28 12:00 ?0次下載
    <b class='flag-5'>一種</b>拓展<b class='flag-5'>模擬</b>采樣通道數(shù)的<b class='flag-5'>方法</b>

    stm32軟復(fù)位 內(nèi)核復(fù)位和系統(tǒng)復(fù)位

    內(nèi)核復(fù)位:它會使STM32內(nèi)核(Cortex-M)進(jìn)行復(fù)位,而不會影響其外設(shè),如GPIO、TIM、USART、SPI等這些寄存器的復(fù)位
    的頭像 發(fā)表于 08-01 17:21 ?4847次閱讀

    中穎M0+內(nèi)核芯片軟件模擬內(nèi)核復(fù)位方法

    中穎M0+內(nèi)核芯片軟件模擬內(nèi)核復(fù)位方法
    的頭像 發(fā)表于 09-27 15:27 ?1176次閱讀
    中穎M0+<b class='flag-5'>內(nèi)核</b>芯片<b class='flag-5'>軟件</b><b class='flag-5'>模擬</b><b class='flag-5'>內(nèi)核</b><b class='flag-5'>復(fù)位</b>的<b class='flag-5'>方法</b>
    RM新时代网站-首页