• 沒有找到結果。

I2S_IRQ I2C_IRQ

在文檔中 嵌入式微處理器 (頁 127-130)

第 3 組中斷優先順序暫存器:P_INT_GROUP3_PRI(0x880A001C) 透過 P_INT_GROUP3_PRI 暫存器控制第 3 組各中斷源的優先順序。

I2S_IRQ I2C_IRQ

嵌入式微處理器 SPCE3200 原理及應用

© Sunplus Technology Co., Ltd. PAGE 127 V1.1 - Agu 29, 2007

3.6.6 中斷機制

SPCE3200 的中斷機制是採用中斷向量的模式,每個中斷向量對應一個中斷源(中斷源列表 參考表 3-15),但是每個中斷源不一定對應一個中斷,比如 UART 中斷源分別有發送中斷和 接收中斷。中斷的處理過程如圖 3-6。中斷的處理過程涉及的硬體單元包括:週邊設備單元

(ADC、Timer 等)、中斷控制器和 S+core7 內核。

中断状态寄存器相应位置1

优先级裁决

通过. exception_vec

根据Cr2 中b23~16

入并执行相应中断服务程序

恢复现场

设定中断优先级

通过cr0 的b1 使能

通过cr3 设置基地址

CPU 通过cr3

*__ startup.s

IRQ 函数

irq_ dispatch(cp0_ cause) save_reg()

IntXX_vec

外部功能模組發出中斷請求 使能模組中斷

週邊

中斷狀態暫存器相應位置1 允許中斷源中斷

中斷控制器

優先順序裁決 設定中斷優先順序

Cr2中b23~16相應中斷請求位置1 通過cr0的b1使能所有硬

體及軟體中斷

根據Cr2的b23~16和cr3設置的基底位 址和偏移量計算向量位址

通過cr3設置基底位址

CPU通過cr3設置向量偏移量

通過.exception_vec區段進入向量入口

保護現場

週邊IRQ 函數

根據Cr2中b23~16確定的向量號進入 並執行相應中斷服務程式

恢復現場

S+core 內核

圖 3-6 中斷的處理過程圖

圖 3-6中週邊設備單元部分主要負責使能硬體模組中斷和發出中斷請求,必須透過相應暫存

器使能模組中斷,該模組才會發出中斷請求。比如先要透過 0x88160000 位址使能 Timer0

中斷,Timer 才會在設定定時時間時發出中斷請求。

嵌入式微處理器 SPCE3200 原理及應用

© Sunplus Technology Co., Ltd. PAGE 128 V1.1 - Agu 29, 2007

中斷控制器主要負責中斷源的遮罩和中斷優先順序的裁決,在週邊設備發出中斷請求前,中 斷控制器必須要先關閉該模組對應中斷源的中斷遮罩,這樣中斷控制器才會做優先順序裁決 並發出中斷請求;如果在週邊設備發出中斷請求前,該中斷源的中斷是被遮罩的,則在週邊 設備發出中斷請求時中斷控制器不做任何處理;中斷控制器有專門的暫存器可設置中斷優先 順序,中斷控制器按照設置好的優先順序進行優先順序裁決。

S+core7 內核必須允許來自模組中斷源的中斷,才會回應中斷;透過程式狀態暫存器 PSR

(cr0)允許 63 個(含 SPCE3200 的 40 個中斷源)硬體中斷。S+core7 在透過異常原因暫 存器 ECR(cr2)得到中斷請求相應位置 1 時,透過 cr2 的 b23~b18 得到向量號,並透過向 量號、基底位址和偏移量得到其向量入口位址;透過 cr3 設置中斷的基底位址,其中最低位 設置偏移量,當最低位為 0 時,偏移量為 0x04,當最低位為 1 時,偏移量為 0x10;比如透 過異常向量暫存器 EVCPVec(cr3)設置中斷的基底位址為 0xa0000000,偏移量為 0x04,

中斷區段的起始位址為 0xa00001fc,例如 Timer 請求中斷的向量號為 56,那麼其中斷向量 位址為 0xa0000200+4×56。在 S+core7 找到中斷向量入口位址後即可轉到相應的中斷服務 程式執行,控制週邊設備進行相應操作,如圖 3-6虛線箭頭部分。

圖 3-6中關於中斷的各個過程分別在*_startup.s、Sys_isr.s、Sys_IRQ.c 和 User_IRQ.c 四個 檔中進行設置或者定義,這些檔在建立工程時可根據用戶要求自動生成。

*_startup.s(“*"為工程名)定義了 S+core7 內核的所有硬體中斷的使能、中斷基底位址的 設置和偏移量的設置。中斷相關程式區段如下:

//=======================================================================

// 中斷使能

//=======================================================================

li r4, 0x1

mtcr r4, cr0 // 使能所有 63 個硬體中斷和 2 個軟體中斷 li r4, 0xa0000000

mtcr r4, cr3 // 指定異常基底位址為 0xa0000000, // 並指定向量位址的偏移模式為偏移 0x4

注意:

cr0 和 cr3 各位功能可參考第 1 章 S+core7 內核暫存器。

在 *_startup.s 檔 中 指 定 了 異 常 的 基 底 位 址 , 另 外 *_Prog.ld 定 義 了 包 括 可 以 定 義 包 括.DATA、.TEXT、異常區段等所有工程中用到的區段,*_Prog.ld 也是在建立工程時會自動 生成的檔,異常區段定義程式如下:

.exception 0xA00001fc : // 定義中斷異常區段,起始位址為 0xA00001fc {

*(.exception_vec) // 異常區段名“.exception_vec",該區段在 Sys_isr.S 檔中定義 } = 0

Sys_isr.s 定 義 個 各 中 斷 向 量 的 入 口 ( IntX_vec ) 和 調 用 中 斷 服 務 函 數

(irq_dispatch(cp0_cause));其中 IntX_vec 中的 X=1,2,3…62,63。

參考以下程式區段:由於.exception_vec 異常區段的起始位址為 0xa00001fc,兩個軟體位址

嵌入式微處理器 SPCE3200 原理及應用

© Sunplus Technology Co., Ltd. PAGE 129 V1.1 - Agu 29, 2007

在文檔中 嵌入式微處理器 (頁 127-130)