新聞中心

STM8 中斷控制器ITC

作者: 時(shí)間:2016-11-11 來源:網(wǎng)絡(luò) 收藏
簡(jiǎn)介

中斷控制器提供如下功能:
● 硬件中斷的管理
─ 所有I/O 引腳都具有外部中斷能力,每一個(gè)端口都有獨(dú)立的中斷向量以及獨(dú)立的標(biāo)志。
─ 外設(shè)中斷能力
● 軟件中斷的管理(TRAP)
● 具有靈活的優(yōu)先級(jí)和中斷等級(jí)管理,支持可嵌套的或同級(jí)中斷管理:
– 多達(dá)4個(gè)軟件可編程的嵌套等級(jí)
– 最多有32個(gè)中斷向量,其入口地址由硬件固定
– 2 不可屏蔽的事件: RESET, TRAP
– 1 個(gè)不可屏蔽的最高優(yōu)先級(jí)的硬件中斷 (TLI)
基于如下資源的中斷管理:
● 位I1 和I0 位于CPU的條件代碼寄存器(CCR)
● 軟件優(yōu)先級(jí)寄存器 (ITC_SPRx)
● 復(fù)位向量地址0x00 8000 位于程序空間的起始部分。對(duì)于具有啟動(dòng)ROM的型號(hào),ST公司把復(fù)位初始化程序固化在ROM區(qū)中。
● 固定的中斷向量地址位于程序空間映像的高位地址段(0x00 8004 to 0x00 807C) ,其地址順序即為硬件的優(yōu)先順序。

本文引用地址:http://butianyuan.cn/article/201611/316707.htm

中斷屏蔽和處理流程
中斷屏蔽是通過CC寄存器的位I1 和位I0 以及設(shè)置每個(gè)中斷向量( 表13) 的軟件優(yōu)先級(jí)的ITC_SPRx來管理的。處理流程如圖所示:
當(dāng)一個(gè)中斷請(qǐng)求必須被響應(yīng)時(shí):
1. 在當(dāng)前正在執(zhí)行指令結(jié)束之后,正常的操作被懸起;
2. PC,X,Y,A和CC寄存器被自動(dòng)壓棧;
3. 根據(jù)ITC_SPRx 寄存器中的值對(duì)應(yīng)的中斷服務(wù)向量,CC寄存器中的位I1 和I0 被相應(yīng)設(shè)置;
4. 通過中斷向量載入中斷服務(wù)子程序的入口地址,接著對(duì)中斷服務(wù)子程序的第一條指令取址( 參考表中斷映射表 來了解向量地址的更詳細(xì)情況)。
中斷服務(wù)子程序必須以IRET指令結(jié)束,該指令會(huì)把堆棧中的保存的寄存器內(nèi)容出棧,同時(shí)由于運(yùn)行IRET 指令,位I1 和位I0 被重新恢復(fù),程序也恢復(fù)運(yùn)行。

處理等待(排隊(duì))的中斷
同一時(shí)間可以有幾個(gè)中斷排隊(duì)等待處理。中斷響應(yīng)是根據(jù)如下兩步來決定的:
1、最高軟件優(yōu)先級(jí)的中斷被響應(yīng);
2、如果幾個(gè)排隊(duì)的中斷具有相同的軟件優(yōu)先級(jí),那么最高硬件優(yōu)先級(jí)的中斷先響應(yīng)。
當(dāng)中斷請(qǐng)求沒有立即得到響應(yīng)時(shí),該中斷請(qǐng)求被鎖存;當(dāng)其軟件優(yōu)先級(jí)及硬件優(yōu)先級(jí)均為最高的時(shí)候,該中斷被處理。
注意:

1、與軟件優(yōu)先級(jí)不同,每個(gè)中斷的硬件優(yōu)先級(jí)是唯一且互不相同的,這樣就可保證一個(gè)時(shí)刻只有一個(gè)中斷被唯一確定地處理。
2、RESET, TLI 和 TRAP 這個(gè)幾個(gè)中斷被認(rèn)為是擁有最高的軟件優(yōu)先級(jí)來處理。
3、一個(gè)TLI中斷可中斷除TRAP 及RESET之外的3級(jí)中斷。
見圖了解更加詳細(xì)的排隊(duì)等待處理的中斷服務(wù)過程。

中斷源
STM8 中斷控制器處理2種類型的中斷源:
● 不可屏蔽的中斷: RESET ,TLI 和 TRAP
● 可屏蔽中斷: 外部中斷或者內(nèi)嵌的外設(shè)中斷
不可屏蔽中斷源
不可屏蔽中斷不會(huì)考慮CC寄存器的I1 和I0 的狀態(tài)(參見圖) 。僅僅當(dāng)TRAP 中斷發(fā)生時(shí)候?qū)C, X, Y, A 和 CC 寄存器的內(nèi)容壓棧。相應(yīng)的向量載入到PC寄存器中同時(shí)置位I1 和I0 位禁止中斷(3級(jí)優(yōu)先級(jí))。
● TRAP (不可屏蔽的軟件中斷)
當(dāng)執(zhí)行TRAP 指令時(shí)就響應(yīng)軟件中斷。它響應(yīng)過程如圖所示的流程圖。
TRAP 中斷不能使處理器從停機(jī)(Halt) 模式下退出。
● RESET 復(fù)位
復(fù)位中斷是STM8 的軟件和硬件中斷的最高優(yōu)先級(jí),這也就是說在復(fù)位程序的開始所有的中斷被禁止。必須通過RIM 指令來使能它們(見表)。
復(fù)位中斷可以使處理器從停機(jī)(Halt) 模式退出。
更詳細(xì)的復(fù)位中斷管理見復(fù)位章節(jié)。
● TLI最高等級(jí)的硬件中斷
當(dāng)在特定的 I/O 邊沿檢測(cè)到在相應(yīng)的TLI輸入時(shí)將產(chǎn)生硬件中斷。
注意: 在TLI中斷服務(wù)子程序中禁止使用TRAP 指令。

可屏蔽的中斷源
對(duì)于可屏蔽中斷,如果相應(yīng)的中斷被使能,而且如果在ITC_SPRx 寄存器的中斷優(yōu)先級(jí)比當(dāng)前正在執(zhí)行的中斷(根據(jù)CC寄存器的I1 和I0 位)的優(yōu)先級(jí)高的話那么就可以被響應(yīng)。如果上面2個(gè)條件中 的任何一個(gè)不滿足那么該中斷會(huì)被鎖存并保持在等待狀態(tài)。
● 外部中斷
外部中斷可以用來把MCU從停機(jī)(Halt) 模式喚醒。外部中斷觸發(fā)方式的選擇可以通過軟件寫控制外部中斷控制寄存器(EXTI_CRx) 來實(shí)現(xiàn)。
當(dāng)多個(gè)連接到同一個(gè)中斷向量的外部引腳中斷被同時(shí)選定時(shí)候,那么他們是‘邏輯或’的關(guān)系。
當(dāng)外部的電平觸發(fā)中斷被鎖存后,如果該給定的電平一直保持到中斷子程序結(jié)束,那么該電平信號(hào)將再次觸發(fā)中斷,除非在中斷子程序中禁用該中斷。
● 外設(shè)中斷
大部分的外設(shè)中斷會(huì)導(dǎo)致MCU從停機(jī)(Halt) 模式下喚醒。見表。
當(dāng)對(duì)應(yīng)外設(shè)狀態(tài)寄存器的中斷標(biāo)志位被置位,同時(shí)相應(yīng)的外設(shè)控制寄存器的使能位被置位時(shí)將產(chǎn)生一個(gè)外設(shè)中斷。
清除一個(gè)外設(shè)中斷的標(biāo)準(zhǔn)順序是在對(duì)狀態(tài)寄存器的訪問后再對(duì)相關(guān)寄存器進(jìn)行讀或者寫操作。
當(dāng)一個(gè)清除過程被執(zhí)行之后相應(yīng)的懸起中斷(一個(gè)將被執(zhí)行的中斷)會(huì)丟失。

中斷和低功耗模式
所有的中斷都可以使處理器從待機(jī)模式(Wait) 退出。
僅有外部中斷和另外一些特定中斷使才能使處理器從停機(jī)(Halt) 模式退出(請(qǐng)參考表16)。
當(dāng)MCU從掛起模式喚醒時(shí)候, 如果有多個(gè)排隊(duì)中斷存在,那么第一個(gè)被響應(yīng)的中斷一定具有從掛起模式退出的能力。該選擇是通過如圖18所示的判斷過程實(shí)現(xiàn)的。如果最高優(yōu)先級(jí)的待相應(yīng)的中斷不能把設(shè)備從掛起模式喚醒的話,那么它將在后續(xù)被響應(yīng)。
如果在執(zhí)行HALT指令時(shí),有一個(gè)內(nèi)部或外部中斷( 例如時(shí)鐘中斷)發(fā)生,HALT指令會(huì)繼續(xù)執(zhí)行完畢,但這個(gè)中斷會(huì)立刻調(diào)用喚醒進(jìn)程。
這種情況下MCU實(shí)際上是從停機(jī)(Halt) 模式被喚醒到運(yùn)行模式,模式切換的延時(shí)為tWUH,詳見數(shù)據(jù)手冊(cè)。

活動(dòng)等級(jí)/低功耗模式的控制
MCU的活動(dòng)等級(jí)的配置是通過編程CFG_GCR 寄存器的AL位來實(shí)現(xiàn)。( 見1.3全局配置寄存器(CFG_GCR) )。
該位是用來控制MCU的低功耗模式。在超低功耗的應(yīng)用中,MCU大部分時(shí)間是運(yùn)行在WFI/Halt模式中,僅在為執(zhí)行特別任務(wù)的時(shí)候被喚醒( 通過中斷) 。一些重復(fù)的任務(wù)可以直接在一個(gè)ISR( 中斷服務(wù)子程序) 執(zhí)行完成而不需要返回到主程序。為了處理這樣情況,用戶可以在進(jìn)入低功耗模式( 通過執(zhí)行WFI/HALT指令) 之前置位AL位,之后中斷子程序返回之后就直接回到低功耗模式。由于相關(guān)寄存器保存只是在第一次中斷會(huì)進(jìn)行所以減少了中斷服務(wù)程序運(yùn)行的時(shí)間。
在一些非常簡(jiǎn)單的應(yīng)用中所有的操作都可以只在ISR 中執(zhí)行。對(duì)于一些更復(fù)雜的任務(wù),中斷子程序要判斷是否要啟動(dòng)主程序,可以通過重設(shè)AL的簡(jiǎn)單方式來實(shí)現(xiàn)。
例如:一個(gè)應(yīng)用需要通過自動(dòng)喚醒功能來每隔50ms喚醒一次來檢測(cè)一些引腳/ 傳感器/ 按鍵的狀態(tài)。如果這些引腳大部分時(shí)間是不工作的,那么MCU可以直接回到低功耗模式而不需要運(yùn)行主程序的。如果其中之一的引腳處于工作狀態(tài),那么ISR 將要進(jìn)行相應(yīng)判斷,通過重設(shè)AL位來啟動(dòng)主程序。

同時(shí)的和嵌套的中斷管理
STM8S提供2種中斷管理模式:
● 同時(shí)發(fā)生模式
● 嵌套模式

同時(shí)發(fā)生中斷管理模式
在該模式下,所有的中斷的中斷優(yōu)先級(jí)都是3 級(jí),因此它們都是不可以被中斷的( 除了被TLI,RESET或TRAP 中斷之外)。
硬件的中斷優(yōu)先級(jí)按如下順序排列,從低到高的優(yōu)先級(jí)是:MAIN, IT4, IT3, IT2, IT1, IT0, TRAP/TLI( 同等優(yōu)先級(jí))以及RESET。
圖 所示是一個(gè)同時(shí)發(fā)生中斷管理模式的例子

嵌套中斷管理模式
在該模式下,允許在中斷子程序中響應(yīng)中斷。一旦一個(gè)中斷的優(yōu)先級(jí)被設(shè)置低于3 級(jí)時(shí)該模式就立即有效。
硬件優(yōu)先級(jí)從低到高按如下順序給定,即MAIN, IT4,IT3,IT2,IT1,IT0 和TRAP 。
通過設(shè)定ITC_SPRx 寄存器的相應(yīng)的I1_x 和I0_x 位來配置每一個(gè)中斷向量的軟件優(yōu)先級(jí)。I1_x 和I0_x 位具有和CC寄存器的I1 和I0 位相同的意思(見表)。
不可以將中斷優(yōu)先級(jí)設(shè)為級(jí)別0(I1_x=1, I0_x=0),在這種情況下,該中斷的優(yōu)先級(jí)將保持為先前的值。例如:如果先前的值是CFh ,然后編程的值是64h ,那么結(jié)果是44h 。
RESET 和 TRAP 向量是沒有軟件優(yōu)先級(jí)的。當(dāng)兩者的任何一個(gè)被響應(yīng)時(shí),CC寄存器的位I1 和I0 兩位都被置位。
注意:

在中斷被響應(yīng)時(shí)如果位 I1 和 I0 被修改,那么設(shè)備將作如下處理: 如果一個(gè)中斷 X 仍然處在懸起狀態(tài)(新的中斷或者中斷標(biāo)志沒有被清除)同時(shí)該新的優(yōu)先級(jí)又比先前的優(yōu)先級(jí)高的話,那么該中斷 X 會(huì)被重新響應(yīng)。否則該中斷的軟件優(yōu)先級(jí)在下一個(gè)中斷請(qǐng)求( X中斷的IRET之后)來之前保持不變。
在中斷子程序的執(zhí)行過程中,執(zhí)行 HALT, POP CC, RIM , SIM 和 WFI指令會(huì)改變當(dāng)前的軟件優(yōu)先級(jí)直到下一條IRET 指令被執(zhí)行或者先前提到的指令之一被執(zhí)行。 。
圖 所示嵌套中斷管理的例子。

1. ITC_SPRx 寄存器對(duì)應(yīng)于TLI的位可以被讀寫,但是它們對(duì)中斷處理的管理是沒有作用的。

外部中斷
STM8S為外部中斷事件專門分配了五個(gè)中斷向量:
● Port A 口的5個(gè)引腳:PA[6:2]
● Port B 口的8個(gè)引腳:PB[7:0]
● Port C 口的8個(gè)引腳:PC[7:0]
● Port D 口的7個(gè)引腳:PD[6:0]
● Port E 口的8個(gè)引腳:PE[7:0]
PD7 是最高優(yōu)先級(jí)的中斷源 (TLI) 。
為了產(chǎn)生中斷,相應(yīng)的GPIO端口必須被配置為中斷使能的輸入口,詳細(xì)內(nèi)容請(qǐng)參考GPIO章節(jié)的
寄存器描述部分。
中斷的觸發(fā)方式由外部中斷控制寄存器1(EXTI_CR1) 和外部中斷控制寄存器2(EXTI_CR2) 所配置

中斷指令

中斷映射



關(guān)鍵詞: STM8中斷控制器IT

評(píng)論


技術(shù)專區(qū)

關(guān)閉