天天看點

第014課 異常與中斷

目錄

一、工作狀态和模式

二、異常

三、中斷控制器

四、中斷源

4.1 外部中斷

4.2 定時器中斷

一、工作狀态和模式

【兩種工作狀态】

THUMB THUMB指令集 2 Byte / 指令
ARM ARM指令集 4 Byte / 指令

【七種工作模式】

除使用者模式外,其他模式均為特權模式

CPSR Mode位
USR 使用者模式 10000
FIQ 快速中斷模式 10001
IRQ 中斷模式 10010
SVC 管理模式 10011
ABT 中止模式 10111
UND 未定義模式 11011
SYS 系統模式 11111

【CPSR】目前程式狀态寄存器,隻有一個,用于訓示目前模式下的程式狀态,格式如下:

第014課 異常與中斷

【SPSR】儲存程式狀态寄存器,格式與CPSR相同,每種模式都有一個,共 7 個,用于儲存前一模式(從該模式跳轉至目前模式);同時,每種模式都有各自專用的 R14 LR 和 R13 SP 寄存器,FIQ模式有自己專用的 R8 - R14 寄存器。

二、異常

【異常】程式在運作過程中發生由于某些問題導緻的程式異常事件。異常向量表如下,涉及 5 種異常:

第014課 異常與中斷

【進出異常】

進出異常時的操作
硬體自動進行 軟體手動進行
進入異常

1、複制 PC 到 LR_exception;

2、複制 CPSR 到 SPSR_exception;

3、修改 CPSR 的 Mode 位為 exception;

4、将 PC 值設為異常向量表的相應值。

1、設定 SP 的值,給異常配置設定一個新的棧;

2、将 LR(存儲着之前的 PC 值)進行偏移,偏移量為0/4/8,由晶片手冊可知;

3、将 R0 - R12、LR 的值壓入棧,防止被更改;

4、調用異常處理函數。

退出異常 從 SPSR_exception 中恢複 CPSR 值。

1、恢複壓入棧中的 R0 - R12值;

2、将棧中的 LR 值恢複到 PC。

三、中斷控制器

首先要在 CPSR 中使能 I位 和 F 位,分别對應 IRQ 和 FIQ,否則不支援中斷。

第014課 異常與中斷

中斷控制器的工作原理如下:

1、中斷源或次級中斷源發出中斷請求後,中斷源寄存器 SRCPND 的相應位置 1(可以有多位同時為 1);

2、如果中斷模式寄存器 INTMOD 中相應位為 1,則直接進入 FIQ 模式進行中斷;

* FIQ 模式下隻能處理一個中斷請求(因為沒有經過 INTMSK 和 PRIORITY 兩個選擇器,來哪個就處理哪個)是以 INTMOD 寄存器中同時隻能有一位為 1;

3、否則進入 IRQ 模式,如果中斷屏蔽寄存器 INTMSK 中相應位為 1,則該中斷被屏蔽,不予處理;

4、中斷優先級寄存器 PRIORITY 決定了中斷優先生成子產品的工作方式,中斷優先生成子產品原理如下:

第014課 異常與中斷

5、所有未屏蔽的 IRQ 在中斷優先生成子產品中經過兩級仲裁選出優先級最高的那一個,把中斷挂起寄存器 INTPND 的相應位置 1;

6、CPU 進入 IRQ 模式開始進行中斷請求;

7、中斷處理完成後,需要将 SRCPND 和 INTPND 中的相應位清零。

【其他】

1、可以通過讀取 INTPND 或 INTOFFSET 知道目前正在處理哪個中斷源;

2、有些中斷位對應多個次級中斷源,是以需要 SUBSRCPND 和 INTSUBMSK 寄存器;

3、通過讀取 SUBSRCPND 可以知道有哪些次級中斷源被觸發,但如果有多個同屬一個中斷位的次級中斷源被觸發,且正在處理其中的某一個,則僅通過 INTPND 或 INTOFFSET 是無法确定目前正在處理哪個的。這時需要了解次級中斷源的工作原理,找到其中記錄中斷觸發的地方。

四、中斷源

S3C2440 支援 60 個中斷源,對應中斷控制器中寄存器的 32 個位,每個位對應一個或多個中斷源。

4.1 外部中斷

外部裝置可以通過 連接配接到外部中斷引腳并向引腳發送中斷信号 來向 CPU 請求中斷。

S3C2440 支援 24 個外部中斷引腳:

  • 通過 EXTINT 寄存器配置中斷觸發的方式(高低電平、上升沿、下降沿等),使能外部中斷信号的過濾
  • 通過 EINTFLT 寄存器配置外部中斷信号的濾波時鐘和濾波寬度
  • 通過 EINTMASK 寄存器對外部中斷進行開關
  • 通過 EINTPEND 寄存器訓示外部中斷是否被觸發

4.2 定時器中斷

S3C2440A有五個16位定時器。定時器0、1、2和3具有脈沖寬度調制(PWM)功能。定時器4隻有一個内部定時器,沒有輸出引腳。計時器0有一個死區生成器,用于大電流裝置。

這些定時器都是下行計時器,結構圖如下:

第014課 異常與中斷

寄存器:TCFG0、TCFG1、TCON、TCNTBn、TCMPBn、TCNTOn

用于外圍低速裝置的時鐘信号 PCLK 進入定時器後,先由預分頻器(TCFG0)進行分頻,然後再由時鐘分頻器分頻,定時器從選擇器中選擇一個信号或使用外部時鐘 TCLK 作為計時時鐘(TCFG1)。

定時器初始值存儲在 TCNTB 寄存器中,TCMPB 寄存器用于脈沖寬度調制 PWM。

【PWM】定時器從初始值下行到 0 形成一個周期,可以為 TCMPB 設定一個 [ 0, TCNTB ] 的值,當 TCNTB 下行到TCMPB時,定時器的輸出産生一個上升沿,TCNTB 下行到 0 時,發出中斷信号,并産生一個下降沿。這樣,如果設定自動加載(TCON),定時器就輸出了一個穩定的時鐘,通過 TCNTB 設定時鐘的周期,通過 TCMPB 設定脈沖寬度,就生成了脈沖寬度可調制的時鐘信号。

可以通過 TCNTO 寄存器讀取目前 TCNTB 寄存器的值。

繼續閱讀