目錄
一、工作狀态和模式
二、異常
三、中斷控制器
四、中斷源
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】目前程式狀态寄存器,隻有一個,用于訓示目前模式下的程式狀态,格式如下:
【SPSR】儲存程式狀态寄存器,格式與CPSR相同,每種模式都有一個,共 7 個,用于儲存前一模式(從該模式跳轉至目前模式);同時,每種模式都有各自專用的 R14 LR 和 R13 SP 寄存器,FIQ模式有自己專用的 R8 - R14 寄存器。
二、異常
【異常】程式在運作過程中發生由于某些問題導緻的程式異常事件。異常向量表如下,涉及 5 種異常:
【進出異常】
進出異常時的操作 | ||
硬體自動進行 | 軟體手動進行 | |
進入異常 | 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,否則不支援中斷。
中斷控制器的工作原理如下:
1、中斷源或次級中斷源發出中斷請求後,中斷源寄存器 SRCPND 的相應位置 1(可以有多位同時為 1);
2、如果中斷模式寄存器 INTMOD 中相應位為 1,則直接進入 FIQ 模式進行中斷;
* FIQ 模式下隻能處理一個中斷請求(因為沒有經過 INTMSK 和 PRIORITY 兩個選擇器,來哪個就處理哪個)是以 INTMOD 寄存器中同時隻能有一位為 1;
3、否則進入 IRQ 模式,如果中斷屏蔽寄存器 INTMSK 中相應位為 1,則該中斷被屏蔽,不予處理;
4、中斷優先級寄存器 PRIORITY 決定了中斷優先生成子產品的工作方式,中斷優先生成子產品原理如下:
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有一個死區生成器,用于大電流裝置。
這些定時器都是下行計時器,結構圖如下:
寄存器: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 寄存器的值。