STM32中断控制全解
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
操作 讀/寫
功能描述 中斷遮罩暫存器
重置值 0x003F,FFFF
當中斷遮罩位元被置為 ‘1’ 時,對應的中斷請求不能被 CPU回應,當中斷遮罩位元為 ‘0’ 時,中斷請求會被回應
全局遮罩位(位元21)為 ‘1’時,所有的中斷請求都不能 被回應,但只要中斷請求產生,對應的中斷懸置位元會 被設定為‘1’,當全域遮罩位元被清除時,中斷請求會得 到回應。
跳躍指令
程式計數器傳輸指令
使用C語言建立中斷向量表
跳躍指令
使用跳躍指令設計中斷向量表是比較簡單的方式,但跳 躍空間只有32M位內
B
Reset_Handler
B
Underfined_Handler
B
SWI_Handler
B
Prefetch_Handler
B
Abort_Handler
pc,[pc,#offset])來產生替換向量的數值。 將中斷服務常式的位址放到儲存的區域。
unsigned Install_Handle(unsigned location, unsigned *vector) {
計時器的輸出電位會持續到下一次的計數溢位時觸發產生翻轉 發生計時器計數溢位時,會產生計時器中斷請求,同時由配置接腳
輸出電位狀態。 計時器輸出接腳輸出工作週期為50%的Clock信號。 接腳的輸出脈衝頻率可按下式計算:
fOUT = fMCLK/(2×計時器的數據值)
計Βιβλιοθήκη Baidu器工作原理
計時器輸出信號時序
[31:0]計時器0或計時器1 的計數值
計時器工作原理
計時器的工作過程描述
當致能計數器時,向計數器的計數暫存器寫入資料值, 然後計數暫存器開始遞減。
計時器計數溢位產生相應的中斷請求,同時重新裝入原 來的資料值並開始遞減。
在禁用計時器的情況下,可以向計時器的暫存器寫入一 個新的資料。
中斷控制器工作原理
中斷優先順序暫存器 (Interrupt Priority Register)
每一個中斷源的索引號寫入一個預定義的中斷優先順序暫存 器,以獲得特定的優先順序。
中斷優先順序預定義為0~20
中斷控制器工作原理
中斷優先順序暫存器 (Interrupt Priority Register)
使用程式計數器(PC)傳輸指令的方法如下
取得包含例外事件處理器位址(中斷服務常式的位址)的字元組位址。 將這位址減去相對向量的位址。 允許預先存取,所以需先減去0x8. 檢查結果值是否以12位元來表示。 與0x59FF000做OR邏輯運算(此為程式計數器傳輸指令的指令碼,LDR
例外事件 重置
未定義指令 軟體中斷 終止(預取指令) 終止(數據)
保留 IRQ FIQ
例外事件模式 管理模式 未定義模式 管理模式 終止模式 終止模式 保留 IRQ FIQ
中斷控制器工作原理
中斷基本概念與特性
S3C4510B支援多達21個中斷源,且中斷請求可由內部功 能模組或外部引腳信號產生
中斷控制器工作原理
中斷模式暫存器 (Interrupt Mode Register)
INTMOD會透過對每一位元的設定來決定每一種中斷是按照快 速中斷(FIQ)還是按照正常中斷(IRQ)加以回應
暫存器 INTMOD
偏移位址 0x4000
操作 讀/寫
功能描述 中斷模式暫存器
重置值 0x0000,0000
[0]計時器0致能(TE0) [1]計時器模式選擇(TMD0)
0 = 禁止計時器0
0 = 間隔模式
1 = 致能計時器0
1 = 觸發模式
計時器工作原理
[2]計時器0初始化TOUT0的值(TCLR0) 0 = 在觸發模式下,初始化TOUT0為0 1 = 在觸發模式下,初始化TOUT0為1
[3]計時器1致能(TE1) 0 = 禁用計時器1 1 = 致能計時器1
組) 將所得的結果向右偏移一個字元組,而不是作一個位元組的偏移。 測試最高的8位元是已被清除的,如此可確定結果值只有24位元長
度(這是因為跳躍指令限制了偏移值) 與0xEA000000(此為跳躍指令的指令運算碼)做OR邏輯運算,以產生
在向量中所要放置的數值。
unsigned Install_Handle(unsigned routine, unsigned *vector) {
unsigned vec, oldvect; vec = (( routine-(unsigned)vector-0x8) >> 2); vec = 0xea000000 | vec; oldvect = *vector; *vector = vec; return (oldvect); }
程式設計原理
計時器工作原理
計時器計數暫存器(Timer Count Register):
保存計時器0或計時器1在正常工作情況下的當前計數值
暫存器 TCNT0 TCNT1
偏移位址 0x600C 0x6010
操作 讀/寫 讀/寫
功能描述 計時器0計數暫存器 計時器1計數暫存器
重置值 0xFFFF, FFFF 0xFFFF, FFFF
間隔模式(Interval Mode)
當計時器計數溢位時產生一個脈衝輸出,該脈衝輸出產生定時中斷 請求,同時從計時器配置輸出接腳(TOUTn)Pin196、Pin199輸出。
接腳的輸出脈衝頻率可按下式計算: fOUT = fMCLK/計時器的數據值 ; fMCLK = 50MHz
觸發模式(Toggle Mode)
索引碼 [20] [19] [18] [17] [16] [15] [14] [13] [12] [11] [10]
中斷源 I2C匯流排中斷 乙太網控制器MAC接收中斷 乙太網控制器MAC傳送中斷 乙太網控制器BDMA接收中斷 乙太網控制器BDMA傳送中斷 HDLC通道B接收中斷 HDLC通道B傳送中斷 HDLC通道A接收中斷 HDLC通道A傳送中斷 計時器1中斷 計時器0中斷
如果計時器在執行時暫停,原來的資料值不會被自動重 新裝入。
中斷控制器的工作過程描述
當中斷遮罩暫存器的整體遮罩位元與相對應的中斷遮罩 位元清除為0時,對應的中斷請求被打開
當中斷條件發生時,PC指標會跳躍到例外事件處理程式 中,執行相對應的操作
程式設計原理
一般中斷服務常式可以由三種方式來建立
LDR PC, Abort_Addr
NOP
LDR PC, IRQ_Addr
LDR PC, FIQ_Addr
Reset_Addr DCD Reset_Handler
Underfined_Addr DCD Undefined_Addr
SWI_Addr
DCD SWI_Addr
Prefetch_Addr
DCD Prefetch_Addr
當有中斷請定產生時,對應的中斷懸置位元會被設定為 ‘1’ ,且在整體中斷遮罩位元和對應的中斷遮罩位元為 ‘0’ 時,中斷請求就會被加以回應
計時器工作原理
S3C4510B提供兩個32位元的計時器T0和T1 可工作在間隔模式(Interval Mode)或觸發模式(Toggle
Mode),對應的信號輸出為 TOUT0 和 TOUT1。
第七章 中斷控制器工作原理與程式設計
Ping-Liang Lai (賴秉樑)
中斷控制器工作原理
中斷向量表
位址 0x0000,0000 0x0000,0004 0x0000,0008 0x0000,000C 0x0000,0010 0x0000,0014 0x0000,0018 0x0000,001C
操作 讀/寫
功能描述 中斷懸置暫存器
重置值 0x0000,0000
指示中斷請求是否處於懸置狀態(未處理)。
如果中斷懸置位元被設定的話,則中斷懸狀態會一直保 存著,直到CPU透過寫入 ‘1’ 到中斷懸置暫存器的相對應 位元來加以清除 (注意,是寫 ‘1’ 來清除,而不是寫 ‘0’ )
當中斷懸置位元被設定時,無論中斷遮罩暫存器是否為 ‘0’,中斷服務程式都會開始執行。
計時器工作原理
計時器的工作描述
當致能計數器時,會向計數器的計數暫存器填入一個資料值,然後 計數暫存器開始遞減。
當計時器計數溢位時,會產生相對應的中斷請求,同時重新填入原 來的資料值並開始加以遞減。
在禁用計時器的情況下,可以向計時器的暫存器寫入一個新的資料 如果計時器在執行時暫停,且原來的資料值不會被自動重新填入。
[20:0]中斷模式位元元,
當中斷模式位元元被置為 “1”: FIQ方式處理中斷 “0”: IRQ方式處理中斷
中斷控制器工作原理
中斷懸置暫存器 (Interrupt Pending Register)
INTPND是用來保持每一個中斷源的中斷懸置位元
暫存器 INTPND
偏移位址 0x4004
其值決定計時器的計數溢位時間的長短。
該時間的計算公式為:
(計時器資料+1)個Clock週期
暫存器 TDATA0 TDATA1
偏移位址 0x6004 0x6008
操作 讀/寫 讀/寫
功能描述 計時器0資料暫存器 計時器1資料暫存器
重置值 0x0000,0000 0x0000,0000
[31:0]計時器0或計時器1 的數據值
計時器工作原理
通過設置計時器控制暫存器TCON中的控制位元可以 禁止或致能T0和T1。
計時器模式暫存器 (Timer Mode Register, TMOD)
TMOD是用於控制兩個32位元計時器的操作。
暫存器 TMOD
偏移位址 0x6000
操作 讀/寫
功能描述 計時器模式暫存器
重置值 0x0000,0000
NOP
B
IRQ_Handler
B
FIQ_Handler
程式設計原理
程式計數器傳輸指令
此一方式主要是將程式計數器直接指到中斷服務常式的位址。
LDR PC, Reset_Addr
LDR PC, Undefined_Addr
LDR PC, SWI_Addr
LDR PC, Prefetch_Addr
中斷控制器工作原理
在中斷服務程式中,必須透過向中斷懸置暫存器的相對應位 元寫入 ‘1’ 來清除中斷懸置旗標,以避免由於同一個中斷懸 置位元導致了中斷服務程式的反覆執行。
中斷控制器工作原理
中斷遮罩暫存器(Interrupt Mask Register)
暫存器 偏移位址 INTMSK 0x4008
Abort_Addr DCD Abort_Addr
DCD 0
IRQ_Addr
DCD IRQ_Addr
FIQ_Addr
DCD FIQ_Addr
DCD P4-7
程式設計原理
使用C語言建立中斷向量表 由MAIN主函式中直接加入中斷向量表的建立。
使用跳躍指令的方法如下所列:
取得中斷服務常式的位址。 將這位址減去相對應的向量。 為了允許執行預先存取的工作,需先減去0x8(2個字元組,8個位元
[4]計時器1模式選擇(TMD1) 0 = 間隔模式 1 = 觸發模式
[5]計時器1初始化TOUT1的值(TCLR1) 0 = 在觸發模式下初始化TOUT1為0 1 = 在觸發模式下初始化TOUT1為1
計時器工作原理
計時器資料暫存器(Timer Data Registers,TDATA0, TDATA1):
兩種類型的中斷
正常中斷請求(Normal Interrupt Request, IRQ) 快速中斷請求(Fast Interrupt Request, FIQ)
每個中斷源都有一個中斷懸置位元( Interrupt Pending Bit) 由四個暫存器來控制中斷的產生以及中斷進行處理
中斷控制器工作原理
中斷優先順序暫存器 (Interrupt Priority Register)
索引碼 [9] [8] [7] [6] [5] [4] [3] [2] [1] [0]
中斷源 GDMA通道1中斷 GDMA通道0中斷 UART1接收與錯誤中斷 UART1傳送中斷 UART0接收與錯誤中斷 UART0傳送中斷 外部中斷3 外部中斷2 外部中斷1 外部中斷0
中斷優先順序暫存器 (Interrupt Priority Register) 中斷模式暫存器 (Interrupt Mode Register) 中斷懸置暫存器 (Interrupt Pending Register) 中斷遮罩暫存器(Interrupt Mask Register)