精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

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

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

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

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

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

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

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

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

實現(xiàn)復位功能需要我們進行如下的步驟:

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

在ARM9中,復位向量被定義為地址為0x0000 0000的位置。在處理器執(zhí)行復位操作時,會跳轉(zhuǎn)至該地址,執(zhí)行復位向量指針所指向的程序代碼。在安裝復位函數(shù)之前,需要先確保復位向量指針正確地指向我們的復位程序。

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

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

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

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

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

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

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

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

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

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

    關(guān)注

    134

    文章

    8963

    瀏覽量

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

    關(guān)注

    31

    文章

    5250

    瀏覽量

    119175
  • C語言
    +關(guān)注

    關(guān)注

    180

    文章

    7575

    瀏覽量

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

    關(guān)注

    1

    文章

    30

    瀏覽量

    9246
收藏 人收藏

    評論

    相關(guān)推薦

    STM32中斷分組及外部中斷的配置過程分享

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

    STM32F103RCT6 uart1中斷方式接收后不返回主程序了,但新的中斷還能進來是怎么回事?

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

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

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

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

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

    stm32中斷怎么處理的

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

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

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

    中斷ARM體系中斷的處理

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

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

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

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

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

    為什么有些STM32中斷沒有子優(yōu)先級?

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

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

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

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

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

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

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

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

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

    Linux為什么中斷不允許休眠

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