單片機
返回首頁

S3c2440ARM異常與中斷體系詳解1---概念引入與處理流程

2021-09-10 來源:eefocus

取個場景解釋中斷。


假設有個大房間里面有小房間,嬰兒正在睡覺,他的媽媽在外面看書。


問:這個母親怎么才能知道這個小孩醒?


過一會打開一次房門,看嬰兒是否睡醒,讓后接著看書

一直等到嬰兒發出聲音以后再過去查看,期間都在讀書

第一種 叫做查詢方式: 

*優點:簡單 

*缺點: 累 

寫程序如何:


while(1)

{

    1 read book(讀書)

    2 open door(開門)

    if(睡)

        return(read book)

    else

        照顧小孩

}

第二種叫中斷方式:


優點:不累

缺點:復雜

寫程序:


 

while(1)

{

    read book

    中斷服務程序()//如何被調用?

    {

    處理照顧小孩

    }

}

我們看看母親被小孩哭聲打斷如何照顧小孩?


母親的處理過程:


1 平時看書


2 發生了各種聲音,如何處理這些聲音 

:: 有遠處的貓叫(聽而不聞,忽略) 

:: 門鈴聲有快遞(開門收快遞) 

:: 小孩哭聲(打開房門,照顧小孩) 

3 母親的處理 

:: 只會處理門鈴聲和小孩哭聲 

:: a 現在書中放入書簽,合上書(保存現場) 

:: b 去處理 (調用對應的中斷服務程序) 

:: c 繼續看書(恢復現場)


不同情況,不同處理:


a 對于門鈴:開門取快件


b 對于哭聲:照顧小孩


我們將母親的處理過程抽象化——母親的頭腦相當于CPU


耳朵聽到聲音會發送信號給腦袋,聲音來源有很多種,有遠處的貓叫,門鈴聲,小孩哭聲。這些聲音傳入耳朵,再由耳朵傳給大腦,除了這些可以中斷母親的看書,還有其他情況,比如身體不舒服,有只蜘蛛掉下來,對于特殊情況無法回避,必須立即處理

有CPU,有中斷控制器。


中斷控制器可以發信號給CPU告訴它發生了那些緊急情況


中斷源有按鍵、定時器、有其它的(比如網絡數據)


這些信號都可以發送信號給中斷控制器,再由中斷控制器發送信號給CPU表明有這些中斷產生了,這些成為中斷(屬于一種異常)


還有什么可以中斷CPU運行?


指令不對,數據訪問有問題


reset信號,這些都可以中斷CPU 這些成為異常中斷


重點在于保存現場以及恢復現場


處理過程


a 保存現場(各種寄存器)


b 處理異常(中斷屬于一種異常)


c 恢復現場


arm對異常(中斷)處理過程


1 初始化: 

:: a 設置中斷源,讓它可以產生中斷 

:: b 設置中斷控制器(可以屏蔽某個中斷,優先級) 

:: c 設置CPU總開關,(使能中斷)


2 執行其他程序:正常程序


3 產生中斷:按下按鍵—>中斷控制器—>CPU


4 cpu每執行完一條指令都會檢查有無中斷/異常產生


5 發現有中斷/異常產生,開始處理。對于不同的異常,跳去不同的地址執行程序。這地址上,只是一條跳轉指令,跳去執行某個函數(地址),這個就是異常向量。如下就是異常向量表,對于不同的異常都有一條跳轉指令。

 


.globl _start

_start: b   reset

    ldr pc, _undefined_instruction

    ldr pc, _software_interrupt

    ldr pc, _prefetch_abort

    ldr pc, _data_abort

    ldr pc, _not_used

    ldr pc, _irq //發生中斷時,CPU跳到這個地址執行該指令 **假設地址為0x18**

    ldr pc, _fiq

//我們先在0x18這里放 ldr pc ,__irq,于是cpu最終會跳去執行__irq代碼

//保護現場,調用處理函數,恢復現場

(3-5都是硬件強制做的)


6 這些函數做什么事情? 

:: 軟件做的: 

:: a 保存現場(各種寄存器) 

:: b 處理異常(中斷): 

:::: 分辨中斷源 

:::: 再調用不同的處理函數 

:: c 恢復現場


對比母親的處理過程來比較arm中斷的處理過程。


中斷處理程序怎么被調用?


CPU—>0x18 –跳轉到其他函數-> 

:: 做保護現場 

:: 調用函數 

:::: 分辨中斷源 

:::: 調用對應函數 

:: 恢復現場


cpu到0x18是由硬件決定的,跳去執行更加復雜函數(由軟件決定)

進入單片機查看更多內容>>
相關視頻
  • TI 新一代 C2000? 微控制器:全方位助力伺服及馬達驅動應用

  • MSP430電容觸摸技術 - 防水Demo演示

  • 直播回放: Microchip Timberwolf? 音頻處理器在線研討會

  • 新唐 8051單片機教程

  • 基于靈動MM32W0系列MCU的指夾血氧儀控制及OTA升級應用方案分享

  • 基于靈動MM32SPIN系列MCU的無感FOC便攜冰箱應用方案分享

    相關電子頭條文章
萝卜大香蕉