STM8 中斷控制器ITC
中斷控制器提供如下功能:
● 硬件中斷的管理
─ 所有I/O 引腳都具有外部中斷能力,每一個端口都有獨立的中斷向量以及獨立的標志。
─ 外設中斷能力
● 軟件中斷的管理(TRAP)
● 具有靈活的優(yōu)先級和中斷等級管理,支持可嵌套的或同級中斷管理:
– 多達4個軟件可編程的嵌套等級
– 最多有32個中斷向量,其入口地址由硬件固定
– 2 不可屏蔽的事件: RESET, TRAP
– 1 個不可屏蔽的最高優(yōu)先級的硬件中斷 (TLI)
基于如下資源的中斷管理:
● 位I1 和I0 位于CPU的條件代碼寄存器(CCR)
● 軟件優(yōu)先級寄存器 (ITC_SPRx)
● 復位向量地址0x00 8000 位于程序空間的起始部分。對于具有啟動ROM的型號,ST公司把復位初始化程序固化在ROM區(qū)中。
● 固定的中斷向量地址位于程序空間映像的高位地址段(0x00 8004 to 0x00 807C) ,其地址順序即為硬件的優(yōu)先順序。
中斷屏蔽和處理流程
中斷屏蔽是通過CC寄存器的位I1 和位I0 以及設置每個中斷向量( 表13) 的軟件優(yōu)先級的ITC_SPRx來管理的。處理流程如圖所示:
當一個中斷請求必須被響應時:
1. 在當前正在執(zhí)行指令結(jié)束之后,正常的操作被懸起;
2. PC,X,Y,A和CC寄存器被自動壓棧;
3. 根據(jù)ITC_SPRx 寄存器中的值對應的中斷服務向量,CC寄存器中的位I1 和I0 被相應設置;
4. 通過中斷向量載入中斷服務子程序的入口地址,接著對中斷服務子程序的第一條指令取址( 參考表中斷映射表 來了解向量地址的更詳細情況)。
中斷服務子程序必須以IRET指令結(jié)束,該指令會把堆棧中的保存的寄存器內(nèi)容出棧,同時由于運行IRET 指令,位I1 和位I0 被重新恢復,程序也恢復運行。
處理等待(排隊)的中斷
同一時間可以有幾個中斷排隊等待處理。中斷響應是根據(jù)如下兩步來決定的:
1、最高軟件優(yōu)先級的中斷被響應;
2、如果幾個排隊的中斷具有相同的軟件優(yōu)先級,那么最高硬件優(yōu)先級的中斷先響應。
當中斷請求沒有立即得到響應時,該中斷請求被鎖存;當其軟件優(yōu)先級及硬件優(yōu)先級均為最高的時候,該中斷被處理。
注意:
1、與軟件優(yōu)先級不同,每個中斷的硬件優(yōu)先級是唯一且互不相同的,這樣就可保證一個時刻只有一個中斷被唯一確定地處理。
2、RESET, TLI 和 TRAP 這個幾個中斷被認為是擁有最高的軟件優(yōu)先級來處理。
3、一個TLI中斷可中斷除TRAP 及RESET之外的3級中斷。
見圖了解更加詳細的排隊等待處理的中斷服務過程。
中斷源
STM8 中斷控制器處理2種類型的中斷源:
● 不可屏蔽的中斷: RESET ,TLI 和 TRAP
● 可屏蔽中斷: 外部中斷或者內(nèi)嵌的外設中斷
不可屏蔽中斷源
不可屏蔽中斷不會考慮CC寄存器的I1 和I0 的狀態(tài)(參見圖) 。僅僅當TRAP 中斷發(fā)生時候?qū)C, X, Y, A 和 CC 寄存器的內(nèi)容壓棧。相應的向量載入到PC寄存器中同時置位I1 和I0 位禁止中斷(3級優(yōu)先級)。
● TRAP (不可屏蔽的軟件中斷)
當執(zhí)行TRAP 指令時就響應軟件中斷。它響應過程如圖所示的流程圖。
TRAP 中斷不能使處理器從停機(Halt) 模式下退出。
● RESET 復位
復位中斷是STM8 的軟件和硬件中斷的最高優(yōu)先級,這也就是說在復位程序的開始所有的中斷被禁止。必須通過RIM 指令來使能它們(見表)。
復位中斷可以使處理器從停機(Halt) 模式退出。
更詳細的復位中斷管理見復位章節(jié)。
● TLI最高等級的硬件中斷
當在特定的 I/O 邊沿檢測到在相應的TLI輸入時將產(chǎn)生硬件中斷。
注意: 在TLI中斷服務子程序中禁止使用TRAP 指令。
可屏蔽的中斷源
對于可屏蔽中斷,如果相應的中斷被使能,而且如果在ITC_SPRx 寄存器的中斷優(yōu)先級比當前正在執(zhí)行的中斷(根據(jù)CC寄存器的I1 和I0 位)的優(yōu)先級高的話那么就可以被響應。如果上面2個條件中 的任何一個不滿足那么該中斷會被鎖存并保持在等待狀態(tài)。
● 外部中斷
外部中斷可以用來把MCU從停機(Halt) 模式喚醒。外部中斷觸發(fā)方式的選擇可以通過軟件寫控制外部中斷控制寄存器(EXTI_CRx) 來實現(xiàn)。
當多個連接到同一個中斷向量的外部引腳中斷被同時選定時候,那么他們是‘邏輯或’的關系。
當外部的電平觸發(fā)中斷被鎖存后,如果該給定的電平一直保持到中斷子程序結(jié)束,那么該電平信號將再次觸發(fā)中斷,除非在中斷子程序中禁用該中斷。
● 外設中斷
大部分的外設中斷會導致MCU從停機(Halt) 模式下喚醒。見表。
當對應外設狀態(tài)寄存器的中斷標志位被置位,同時相應的外設控制寄存器的使能位被置位時將產(chǎn)生一個外設中斷。
清除一個外設中斷的標準順序是在對狀態(tài)寄存器的訪問后再對相關寄存器進行讀或者寫操作。
當一個清除過程被執(zhí)行之后相應的懸起中斷(一個將被執(zhí)行的中斷)會丟失。
中斷和低功耗模式
所有的中斷都可以使處理器從待機模式(Wait) 退出。
僅有外部中斷和另外一些特定中斷使才能使處理器從停機(Halt) 模式退出(請參考表16)。
當MCU從掛起模式喚醒時候, 如果有多個排隊中斷存在,那么第一個被響應的中斷一定具有從掛起模式退出的能力。該選擇是通過如圖18所示的判斷過程實現(xiàn)的。如果最高優(yōu)先級的待相應的中斷不能把設備從掛起模式喚醒的話,那么它將在后續(xù)被響應。
如果在執(zhí)行HALT指令時,有一個內(nèi)部或外部中斷( 例如時鐘中斷)發(fā)生,HALT指令會繼續(xù)執(zhí)行完畢,但這個中斷會立刻調(diào)用喚醒進程。
這種情況下MCU實際上是從停機(Halt) 模式被喚醒到運行模式,模式切換的延時為tWUH,詳見數(shù)據(jù)手冊。
活動等級/低功耗模式的控制
MCU的活動等級的配置是通過編程CFG_GCR 寄存器的AL位來實現(xiàn)。( 見1.3全局配置寄存器(CFG_GCR) )。
該位是用來控制MCU的低功耗模式。在超低功耗的應用中,MCU大部分時間是運行在WFI/Halt模式中,僅在為執(zhí)行特別任務的時候被喚醒( 通過中斷) 。一些重復的任務可以直接在一個ISR( 中斷服務子程序) 執(zhí)行完成而不需要返回到主程序。為了處理這樣情況,用戶可以在進入低功耗模式( 通過執(zhí)行WFI/HALT指令) 之前置位AL位,之后中斷子程序返回之后就直接回到低功耗模式。由于相關寄存器保存只是在第一次中斷會進行所以減少了中斷服務程序運行的時間。
在一些非常簡單的應用中所有的操作都可以只在ISR 中執(zhí)行。對于一些更復雜的任務,中斷子程序要判斷是否要啟動主程序,可以通過重設AL的簡單方式來實現(xiàn)。
例如:一個應用需要通過自動喚醒功能來每隔50ms喚醒一次來檢測一些引腳/ 傳感器/ 按鍵的狀態(tài)。如果這些引腳大部分時間是不工作的,那么MCU可以直接回到低功耗模式而不需要運行主程序的。如果其中之一的引腳處于工作狀態(tài),那么ISR 將要進行相應判斷,通過重設AL位來啟動主程序。
同時的和嵌套的中斷管理
STM8S提供2種中斷管理模式:
● 同時發(fā)生模式
● 嵌套模式
同時發(fā)生中斷管理模式
在該模式下,所有的中斷的中斷優(yōu)先級都是3 級,因此它們都是不可以被中斷的( 除了被TLI,RESET或TRAP 中斷之外)。
硬件的中斷優(yōu)先級按如下順序排列,從低到高的優(yōu)先級是:MAIN, IT4, IT3, IT2, IT1, IT0, TRAP/TLI( 同等優(yōu)先級)以及RESET。
圖 所示是一個同時發(fā)生中斷管理模式的例子
嵌套中斷管理模式
在該模式下,允許在中斷子程序中響應中斷。一旦一個中斷的優(yōu)先級被設置低于3 級時該模式就立即有效。
硬件優(yōu)先級從低到高按如下順序給定,即MAIN, IT4,IT3,IT2,IT1,IT0 和TRAP 。
通過設定ITC_SPRx 寄存器的相應的I1_x 和I0_x 位來配置每一個中斷向量的軟件優(yōu)先級。I1_x 和I0_x 位具有和CC寄存器的I1 和I0 位相同的意思(見表)。
不可以將中斷優(yōu)先級設為級別0(I1_x=1, I0_x=0),在這種情況下,該中斷的優(yōu)先級將保持為先前的值。例如:如果先前的值是CFh ,然后編程的值是64h ,那么結(jié)果是44h 。
RESET 和 TRAP 向量是沒有軟件優(yōu)先級的。當兩者的任何一個被響應時,CC寄存器的位I1 和I0 兩位都被置位。
注意:
在中斷被響應時如果位 I1 和 I0 被修改,那么設備將作如下處理: 如果一個中斷 X 仍然處在懸起狀態(tài)(新的中斷或者中斷標志沒有被清除)同時該新的優(yōu)先級又比先前的優(yōu)先級高的話,那么該中斷 X 會被重新響應。否則該中斷的軟件優(yōu)先級在下一個中斷請求( X中斷的IRET之后)來之前保持不變。
在中斷子程序的執(zhí)行過程中,執(zhí)行 HALT, POP CC, RIM , SIM 和 WFI指令會改變當前的軟件優(yōu)先級直到下一條IRET 指令被執(zhí)行或者先前提到的指令之一被執(zhí)行。 。
圖 所示嵌套中斷管理的例子。
1. ITC_SPRx 寄存器對應于TLI的位可以被讀寫,但是它們對中斷處理的管理是沒有作用的。
外部中斷
STM8S為外部中斷事件專門分配了五個中斷向量:
● Port A 口的5個引腳:PA[6:2]
● Port B 口的8個引腳:PB[7:0]
● Port C 口的8個引腳:PC[7:0]
● Port D 口的7個引腳:PD[6:0]
● Port E 口的8個引腳:PE[7:0]
PD7 是最高優(yōu)先級的中斷源 (TLI) 。
為了產(chǎn)生中斷,相應的GPIO端口必須被配置為中斷使能的輸入口,詳細內(nèi)容請參考GPIO章節(jié)的
寄存器描述部分。
中斷的觸發(fā)方式由外部中斷控制寄存器1(EXTI_CR1) 和外部中斷控制寄存器2(EXTI_CR2) 所配置
中斷指令
中斷映射
評論