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

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

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

ARM9中斷中(C語(yǔ)言)如何實(shí)現(xiàn)復(fù)位功能,而不是返回中斷前的狀態(tài)?

工程師鄧生 ? 來(lái)源:未知 ? 作者:劉芹 ? 2023-10-19 16:42 ? 次閱讀

ARM9中斷中(C語(yǔ)言)如何實(shí)現(xiàn)復(fù)位功能,而不是返回中斷前的狀態(tài)?

在ARM9處理器的中斷中,當(dāng)系統(tǒng)發(fā)生異常時(shí),處理器會(huì)暫停正在執(zhí)行的指令并處理中斷請(qǐng)求。處理中斷的方式有兩種,一種是通過(guò)向處理器發(fā)送中斷請(qǐng)求信號(hào),觸發(fā)處理器中斷程序的執(zhí)行;另一種是通過(guò)異常處理器,由處理器檢測(cè)異常事件并自動(dòng)觸發(fā)中斷程序的執(zhí)行。

當(dāng)CPU進(jìn)入中斷程序時(shí),它會(huì)先保存當(dāng)前現(xiàn)場(chǎng)的寄存器狀態(tài),并將中斷的處理程序指針指向中斷程序的入口地址。在中斷程序的執(zhí)行過(guò)程中,通常會(huì)完成一系列的操作,如訪問(wèn)狀態(tài)寄存器、中斷觸發(fā)寄存器、中斷向量表等。而針對(duì)本文討論的問(wèn)題,我們需要實(shí)現(xiàn)復(fù)位功能,即當(dāng)CPU進(jìn)入中斷程序后,不再返回到中斷前的狀態(tài),而是徹底地進(jìn)行復(fù)位操作。

實(shí)現(xiàn)復(fù)位功能需要我們進(jìn)行如下的步驟:

1. 設(shè)置復(fù)位向量

在ARM9中,復(fù)位向量被定義為地址為0x0000 0000的位置。在處理器執(zhí)行復(fù)位操作時(shí),會(huì)跳轉(zhuǎn)至該地址,執(zhí)行復(fù)位向量指針?biāo)赶虻?a target="_blank">程序代碼。在安裝復(fù)位函數(shù)之前,需要先確保復(fù)位向量指針正確地指向我們的復(fù)位程序。

2. 編寫(xiě)復(fù)位函數(shù)

復(fù)位函數(shù)是我們實(shí)現(xiàn)徹底復(fù)位操作的代碼。在該函數(shù)中,我們需要清除系統(tǒng)的所有狀態(tài)和寄存器信息,使其恢復(fù)至初始狀態(tài)。具體而言,我們需要執(zhí)行如下操作:

- 清除所有CPU寄存器
- 復(fù)位所有系統(tǒng)寄存器和狀態(tài)寄存器
- 清除所有外設(shè)寄存器
- 復(fù)位系統(tǒng)時(shí)鐘
- 清除所有中斷向量和中斷狀態(tài)寄存器

在完成上述所有操作后,我們需要修改復(fù)位向量指針,使其指向我們需要執(zhí)行的下一條指令地址。通常情況下,這個(gè)地址應(yīng)該是程序的入口地址,以啟動(dòng)系統(tǒng)的正常工作狀態(tài)。

3. 在中斷程序中調(diào)用復(fù)位函數(shù)

在中斷處理程序中,我們需要手動(dòng)調(diào)用復(fù)位函數(shù),并防止系統(tǒng)返回中斷前的狀態(tài)。具體而言,我們可以在復(fù)位函數(shù)中修改系統(tǒng)狀態(tài)寄存器,以防止中斷返回執(zhí)行。例如,對(duì)于ARM9,可以使用以下代碼:

```
void reset(void) __attribute__((naked));
void reset(void) {
__asm__("cpsid i"); // 禁止中斷
__asm__("ldr r0, =0x00000000"); // 設(shè)置復(fù)位向量指針
__asm__("ldr r1, [r0]"); // 讀取復(fù)位向量指針
__asm__("mov sp, r1"); // 更新棧指針
__asm__("ldr r0, =SystemInit"); // 加載復(fù)位函數(shù)
__asm__("bx r0"); // 跳轉(zhuǎn)至復(fù)位函數(shù)
}
```

在上述函數(shù)中,我們首先禁止了中斷服務(wù)。然后,我們?cè)O(shè)置了復(fù)位向量指針,并用該指針更新了棧指針。接著,我們加載復(fù)位函數(shù)并跳轉(zhuǎn)至其執(zhí)行。在函數(shù)執(zhí)行完畢后,我們可以根據(jù)需要選擇是否啟用中斷服務(wù)。

總之,實(shí)現(xiàn)ARM9中斷的徹底復(fù)位操作需要我們進(jìn)行復(fù)位向量的設(shè)置、編寫(xiě)復(fù)位函數(shù),并在中斷程序中調(diào)用該函數(shù)并防止中斷返回執(zhí)行。這樣可以保證系統(tǒng)處于一個(gè)完全初始化和安全的狀態(tài),使其能夠愉快地進(jìn)行下一輪的工作!

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

    關(guān)注

    134

    文章

    8966

    瀏覽量

    365008
  • 寄存器
    +關(guān)注

    關(guān)注

    31

    文章

    5250

    瀏覽量

    119194
  • C語(yǔ)言
    +關(guān)注

    關(guān)注

    180

    文章

    7575

    瀏覽量

    134026
  • 系統(tǒng)時(shí)鐘
    +關(guān)注

    關(guān)注

    1

    文章

    30

    瀏覽量

    9246
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    STM32中斷分組及外部中斷的配置過(guò)程分享

    STM32中斷分組   STM32 的每一個(gè)GPIO都能配置成一個(gè)外部中斷觸發(fā)源,這點(diǎn)也是 STM32 的強(qiáng)大之處。STM32 通過(guò)根據(jù)引腳的序號(hào)不同將眾多中斷觸發(fā)源分成不同的組,比如:PA0
    發(fā)表于 04-08 08:05

    STM32F103RCT6 uart1中斷方式接收后不返回主程序了,但新的中斷還能進(jìn)來(lái)是怎么回事?

    uart1中斷方式接收后不返回主程序了,但新的中斷還能進(jìn)來(lái),芯片型號(hào)STM32F103RCT6 void HAL_UART_RxCpltCallback(UART_HandleTypeDef
    發(fā)表于 03-22 07:01

    s3c2410中斷控制模塊的中斷狀態(tài)寄存器是?

    事件的寄存器。 中斷是計(jì)算機(jī)系統(tǒng)中一種重要的機(jī)制,它可以中斷當(dāng)前的程序執(zhí)行,轉(zhuǎn)而執(zhí)行一個(gè)與當(dāng)前事件相關(guān)的特定程序,然后再返回原來(lái)的程序繼續(xù)執(zhí)行。S3C2410
    的頭像 發(fā)表于 01-05 17:28 ?511次閱讀

    arm中斷是怎么實(shí)現(xiàn)

    ARM中斷實(shí)現(xiàn)是通過(guò)中斷控制器和異常模式實(shí)現(xiàn)的。ARM處理器通過(guò)
    的頭像 發(fā)表于 01-05 15:18 ?584次閱讀

    stm32中斷怎么處理的

    STM32是一款非常強(qiáng)大的微控制器系列,具有豐富的外設(shè)和功能中斷是STM32非常重要的部分,能夠幫助我們提高系統(tǒng)的響應(yīng)速度和效率。本文將詳細(xì)介紹STM32中斷的處理方法。 一、
    的頭像 發(fā)表于 01-02 17:35 ?2171次閱讀

    ADE7753開(kāi)啟了過(guò)零中斷和線周期中斷,可是沒(méi)有過(guò)零中斷產(chǎn)生只有周期中斷產(chǎn)生是為什么?

    開(kāi)啟了過(guò)零中斷和線周期中斷,可是沒(méi)有過(guò)零中斷產(chǎn)生,只有周期中斷產(chǎn)生,用示波器測(cè)了channel2的兩個(gè)管腳的波形是周期為20ms的正弦波。
    發(fā)表于 12-27 07:05

    中斷ARM體系對(duì)中斷的處理

    今天來(lái)看一下中斷ARM體系對(duì)中斷的處理,直接進(jìn)入正題。 中斷是指計(jì)算機(jī)運(yùn)行過(guò)程,出現(xiàn)某些意
    的頭像 發(fā)表于 11-07 17:11 ?533次閱讀
    <b class='flag-5'>中斷</b>及<b class='flag-5'>ARM</b>體系<b class='flag-5'>中</b>對(duì)<b class='flag-5'>中斷</b>的處理

    基于ARM9和μC-OS-II的SD卡文件系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)

    電子發(fā)燒友網(wǎng)站提供《基于ARM9和μC-OS-II的SD卡文件系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn).pdf》資料免費(fèi)下載
    發(fā)表于 10-24 09:56 ?0次下載
    基于<b class='flag-5'>ARM9</b>和μ<b class='flag-5'>C</b>-OS-II的SD卡文件系統(tǒng)設(shè)計(jì)與<b class='flag-5'>實(shí)現(xiàn)</b>

    ARM的異常中斷是如何實(shí)現(xiàn)進(jìn)入中斷程序的?如何進(jìn)入呢?

    ARM的異常中斷是如何實(shí)現(xiàn)進(jìn)入中斷程序的?如何進(jìn)入呢? 在計(jì)算機(jī)系統(tǒng),異常和
    的頭像 發(fā)表于 10-19 16:36 ?818次閱讀

    為什么有些STM32中斷沒(méi)有子優(yōu)先級(jí)?

    看到一個(gè)交流群在討論關(guān)于【關(guān)于STM32中斷優(yōu)先級(jí)的話(huà)題】,其中就有小伙伴提到:為什么有些STM32中斷沒(méi)有【子優(yōu)先級(jí)】?
    的頭像 發(fā)表于 10-17 15:50 ?694次閱讀
    為什么有些STM32<b class='flag-5'>中斷</b>沒(méi)有子優(yōu)先級(jí)?

    C51中斷函數(shù)和匯編語(yǔ)言中斷服務(wù)程序在用法上有什么不同?

    C51中斷函數(shù)和匯編語(yǔ)言中斷服務(wù)程序在用法上有何不同?
    發(fā)表于 10-17 08:31

    基于ARM9的VOIP電話(huà)終端的設(shè)計(jì)與實(shí)現(xiàn)

    電子發(fā)燒友網(wǎng)站提供《基于ARM9的VOIP電話(huà)終端的設(shè)計(jì)與實(shí)現(xiàn).pdf》資料免費(fèi)下載
    發(fā)表于 10-13 11:26 ?0次下載
    基于<b class='flag-5'>ARM9</b>的VOIP電話(huà)終端的設(shè)計(jì)與<b class='flag-5'>實(shí)現(xiàn)</b>

    基于ARM9的USB設(shè)計(jì)與實(shí)現(xiàn)

    電子發(fā)燒友網(wǎng)站提供《基于ARM9的USB設(shè)計(jì)與實(shí)現(xiàn).pdf》資料免費(fèi)下載
    發(fā)表于 10-11 11:35 ?0次下載
    基于<b class='flag-5'>ARM9</b>的USB設(shè)計(jì)與<b class='flag-5'>實(shí)現(xiàn)</b>

    U54內(nèi)核中斷控制和狀態(tài)寄存器

    中斷控制和狀態(tài)寄存器 Machine Status Register (mstatus) mstatus 寄存器跟蹤并控制 hart 的當(dāng)前操作狀態(tài),包括是否啟用中斷。 通過(guò)設(shè)置 ms
    的頭像 發(fā)表于 10-08 09:54 ?610次閱讀
    U54內(nèi)核<b class='flag-5'>中斷</b>控制和<b class='flag-5'>狀態(tài)</b>寄存器

    Linux為什么中斷不允許休眠

    ,此時(shí)獲取的 struct thread info 數(shù)據(jù)結(jié)構(gòu)是 發(fā)生中斷時(shí)該進(jìn)程棧信息 ,不是中斷上下文調(diào)用 schedule 時(shí)任何信息。這就導(dǎo)致再也無(wú)法
    的頭像 發(fā)表于 09-27 17:48 ?1053次閱讀