<acronym id="s8ci2"><small id="s8ci2"></small></acronym>
<rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
<acronym id="s8ci2"></acronym>
<acronym id="s8ci2"><center id="s8ci2"></center></acronym>
0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

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

3天內不再提示

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

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

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

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

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

實現復位功能需要我們進行如下的步驟:

1. 設置復位向量

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

2. 編寫復位函數

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

- 清除所有CPU寄存器
- 復位所有系統寄存器和狀態寄存器
- 清除所有外設寄存器
- 復位系統時鐘
- 清除所有中斷向量和中斷狀態寄存器

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

3. 在中斷程序中調用復位函數

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

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

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

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

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

    關注

    134

    文章

    8708

    瀏覽量

    362609
  • 寄存器
    +關注

    關注

    30

    文章

    5141

    瀏覽量

    118055
  • C語言
    +關注

    關注

    180

    文章

    7542

    瀏覽量

    131036
  • 系統時鐘
    +關注

    關注

    1

    文章

    30

    瀏覽量

    9096
收藏 人收藏

    評論

    相關推薦

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

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

    如何實現SysTick中斷的嵌套自身?

    中斷直接退出到我想要執行的調度函數RTTaskSchedule ,執行完調度函數RTTaskSchedule 后再執行函數IrqReturn返回到main。但是這段代碼并不能實現我想
    發表于 03-25 06:20

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

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

    N76E003開了一個定時器0中斷和串口0中斷,兩個中斷打開后,串口發送數據無法進入中斷的原因?

    N76E003開了一個定時器0中斷和串口0中斷,兩個中斷打開后,串口發送數據無法進入中斷,單獨使用沒有什么問題,還望各位指教
    發表于 01-17 06:44

    s3c2410中斷控制模塊的中斷狀態寄存器是?

    S3C2410是一款由三星電子公司設計的具有多種功能的嵌入式處理器。其中的中斷控制模塊用于管理系統的中斷請求和中斷服務程序。在S3C2410中,中斷
    的頭像 發表于 01-05 17:28 ?311次閱讀

    arm中斷是怎么實現

    ARM中斷實現是通過中斷控制器和異常模式實現的。ARM處理器通過
    的頭像 發表于 01-05 15:18 ?333次閱讀

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

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

    中斷ARM體系中對中斷的處理

    今天來看一下中斷ARM體系中對中斷的處理,直接進入正題。 中斷是指計算機運行過程中,出現某些意外情況需主機干預時,機器能自動停止正在運行的程序并轉入處理新情況的程序,處理完畢后又
    的頭像 發表于 11-07 17:11 ?294次閱讀
    <b class='flag-5'>中斷</b>及<b class='flag-5'>ARM</b>體系中對<b class='flag-5'>中斷</b>的處理

    如何配置GPIO為中斷功能

    Manual_V1.0(Draft).pdf》的<10.6 port control>小節。另外,不是所有引腳都有中斷功能,中斷
    發表于 10-26 17:38

    ARM中的異常中斷是如何實現進入中斷程序的?如何進入呢?

    ARM中的異常中斷是如何實現進入中斷程序的?如何進入呢? 在計算機系統中,異常和中斷是兩個常見的概念。 在
    的頭像 發表于 10-19 16:36 ?629次閱讀

    arm處理器有哪些中斷源?arm處理器對異常中斷的響應過程

    arm處理器有哪些中斷源?arm處理器對異常中斷的響應過程? ARM處理器是一種廣泛使用的嵌入式處理器,運行著各種不同類型的應用程序。為了保
    的頭像 發表于 10-19 16:35 ?937次閱讀

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

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

    arm中斷是怎么實現

    arm中斷是怎么實現的? 首先,了解什么是中斷。中斷是指在CPU執行某個程序時,突然發生的一些事件需要CPU立即停止正在執行的程序并去執行該
    的頭像 發表于 09-05 16:22 ?736次閱讀

    8051中斷的編號系統應用說明

    我們接到許多客戶打來的電話,他們對8051中斷的編號系統感到困惑。本應用程序說明說明了如何在程序聲明中斷,以及中斷編號的來源。
    發表于 09-04 07:29

    ARM C語言擴展規范

    的應用程序程序員 ? 系統程序員需要對ARM目標的低級訪問,不是C/C++所提供的訪問權限 ? 編譯器
    發表于 08-02 06:27
    亚洲欧美日韩精品久久_久久精品AⅤ无码中文_日本中文字幕有码在线播放_亚洲视频高清不卡在线观看
    <acronym id="s8ci2"><small id="s8ci2"></small></acronym>
    <rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
    <acronym id="s8ci2"></acronym>
    <acronym id="s8ci2"><center id="s8ci2"></center></acronym>