文章目錄
- MC9S12XS128 事件處理
-
- 一、複位
-
- 1.1 上電複位(Power-On Reset )
- 1.2 外部複位(External Hardware Reset )
- 1.3 計算機工作正常複位 (Computer Operating Properly)
- 1.4 時鐘監控複位(Crystal Monitor )
- 二、中斷
-
- 2.1 /XIRQ非屏蔽中斷
- 2.2 非法指令陷阱
- 2.3 軟體中斷指令 SWI
- 2.3 中斷現場保護
- 2.4 中斷寄存器
- 2.4 中斷優先級
- 2.5 中斷向量表
MC9S12XS128 事件處理
一、複位
1.1 上電複位(Power-On Reset )
在 S12 的 VDD 引腳上的一個正向變化将觸發上電複位,當給 S12 上電時,它以一個已知的、确定的設定啟動,具體啟動流程如下圖
- 首先 VDD 有一個正跳變初始化
- 然後 CPU 經曆 8192 個 E-clock 延時保持晶振的穩定
- CPU 内部軟體複位,啟動系統

如果VDD上升緩慢,到延時結束時尚未到達MCU的額定工作電壓,那麼退出POR開始工作就可能出現無法預料的結果,特别是片内EEPROM的安全,在混亂中如果意外被改寫,将造成系統資訊的丢失
1.2 外部複位(External Hardware Reset )
為了解決上面的問題,S12配備一個标記為 /RESET 的低電平有效複位引腳,系統在上電階段讓 /RESET 引腳保持足夠長時間的有效電平,與電壓聯系起來,確定電壓達到額定值後再釋放該引腳,而在掉電階段則通過監視電源電壓,確定低于額定值前讓/RESET有效,強迫MCU進入複位狀态進而停止運作,當該引腳電壓為低時,觸發複位
簡單的 RC 延時複位電路在裡面不能使用,因為 MCU 内部還有 COP 和時鐘監視電路這兩個複位源,它們複位MCU 時也會将/RESET引腳拉低,并随後釋放,而MCU必須依靠該引腳狀态判斷複位源,然後轉向不同的入口。事實上一旦出現複位條件,内部電路就會将/RESET拉低64個E時鐘周期,随後釋放,再過32個E時鐘周期,從内部采樣/RESET引腳,如果仍然是低電平,CPU就認為是外部複位;如果回到高電平,就表明是内部複位。如果外加RC電路,内部拉低/RESET引腳并釋放後,由于電容充電延遲效應,其電平很難保證在32個E時鐘周期内恢複到高狀态,于是就可能導緻MCU錯誤判定複位源
複位我們可以使用下面的複位電路
使用三極管如下:
注意:上電複位和RESET引腳複位共用一個複位向量 $FFFE ~ $FFFF,必須確定該矢量指向工作程式入口
1.3 計算機工作正常複位 (Computer Operating Properly)
COP 系統允許 S12 檢測軟體執行故障。通常,COP在軟體開發過程中是關閉的。這是一項重要的安全保障功能。COP系統包含一個使用者設定的倒計數定時器。若定時器過期,則觸發一個系統複位。為了防止定時器過期,執行的程式必須在倒計數定時器失效前向ARM/RESET COP定時器寄存器(COPRST)中寫入 $55 和 $AA,他通常有另外一個稱呼:看門狗,如果不在設定的周期内喂狗,就會引發系統軟體複位
COP複位的矢量位址是 $FFFA ~ $FFFB,他必須在逾時前被服務,其有一個控制寄存器如下:
COPCTL - COP 控制寄存器($003C)
Bit 7 | Bit 6 | Bit 5 | Bit 4 | Bit 3 | Bit 2 | Bit 1 | Bit 0 |
---|---|---|---|---|---|---|---|
功能 | WCOP | RSBCK | CR2 | CR1 | CR0 | ||
複位 |
-
WCOP - Window COP Mode
1 : Window COP operation
0 : Normal COP operation
COP可以運作在普通模式或者Window模式,在window操作模式下,軟體必須服務COP在選擇的逾時周期的最後25%;如果軟體企圖寫入ARM 的 COP寄存器在 window 之外,COP将産生複位
-
CR[2:0]
COP 看門狗定時器逾時時間間隔
ARMCOP - COP 複位寄存器($003F)
Bit 7 | Bit 6 | Bit 5 | Bit 4 | Bit 3 | Bit 2 | Bit 1 | Bit 0 |
---|---|---|---|---|---|---|---|
為了防止定時器過期,執行的程式必須在倒計數定時器失效前向 ARMCOP定時器寄存器(COPRST)中寫入 $55 和 $AA,寫入除 $55 和 $AA 以外的任何内容都使MCU立即複位
1.4 時鐘監控複位(Crystal Monitor )
CPU 内部內建了時鐘螢幕,它專門負責監視系統時鐘是否正常,如果時鐘頻率跌到預定值以下,它就會強制系統複位,這同時也等于為 MCU 限定了一個最低工作頻率,當系統選用的時鐘頻率過低時,時鐘螢幕也會動作。複位後時鐘螢幕預設為關閉狀态,如果确實需要在低速度下工作,可以不啟動它
時鐘螢幕複位的矢量位址是 $FFFC ~ $FFFD,其優先級僅低于上電複位
PLLCTL — CRG PLL 控制寄存器($003A)
Bit 7 | Bit 6 | Bit 5 | Bit 4 | Bit 3 | Bit 2 | Bit 1 | Bit 0 |
---|---|---|---|---|---|---|---|
CME | PLLON | FM1 | FM0 | FSTWKP | PRE | PCE | SCME |
1 | 1 | 1 |
-
CME——Clock Monitor Enable
1 = 允許時鐘監控功能
0 = 禁止時鐘監控功能
-
SCME——Self-Clock-Mode Enable
1 = 檢測到晶振時鐘失效,MCU進入自時鐘模式;
0 = 檢測到晶振時鐘失效時,引起時鐘監控複位
二、中斷
2.1 /XIRQ非屏蔽中斷
XIRQ 是非屏蔽中斷引腳,無論MCU處于哪種運作狀态,該引腳一旦被拉成低電平,MCU執行完目前指令後,都會響應該中斷,中斷矢量為 $FFF4 ~ $FFF5,該中斷一般用于系統掉電、硬體故障等重要場合,當MCU處于等待或暫停模式時,該中斷将喚醒MCU
2.2 非法指令陷阱
MCU 正常工作時,每次取址得到的都是由彙編或編譯程式生成的有效操作碼,MCU能夠正确解釋并執行它們,但當受到幹擾或系統出現混亂時,可能得到無法識别的操作碼,即非法指令,這時MCU自動産生一次中斷,中斷矢量位址為 $FFF8 ~ $FFF9
2.3 軟體中斷指令 SWI
SWI 是一條指令,但其執行過程與中斷相同,即通過中斷矢量确定目标位址,中斷矢量為$FFF6 ~ $FFF7,它自動儲存 MCU 的寄存器和傳回位址,最後必須通過RTI指令傳回
2.3 中斷現場保護
在進入中斷的時候,系統會進行一次中斷現場保護,中斷保護就是儲存目前程式的入口位址,以及運作的寄存器環境到堆棧,具體儲存的内容如下:
序号 | 堆棧位址 | 入棧内容 | 說明 |
---|---|---|---|
1 | SP - 2 | RTNH:RTNL | 儲存中斷傳回位址 |
2 | SP - 4 | YH:YL | 儲存變址寄存器Y |
3 | SP - 6 | XH:XL | 儲存變址寄存器X |
4 | SP - 8 | B:A | 儲存累加器B:A(D) |
5 | SP - 9 | CCR | 儲存程式狀态字CCR |
中斷響應前,堆棧必須有效,SP必須指向一個有效的RAM區,而且堆棧的大小必須不少于9個位元組
2.4 中斷寄存器
2.4.1 INTCR — 中斷控制寄存器($001E)
Bit 7 | Bit 6 | Bit 5 | Bit 4 | Bit 3 | Bit 2 | Bit 1 | Bit 0 |
---|---|---|---|---|---|---|---|
IRQE | IRQEN | ||||||
1 |
IRQE - Interrupt Select Edge Sensitive
- 1 = IRQ PIN is configured for negative edge
- 0 = IRQ PIN is configured for level sensitive
IRQEN - External IRQ Enable
- 1 = IRQ PIN is connected to interrupt logic
- 0 = IRQ PIN is disconnected from interrupt logic
2.4.2 HPRIO — 高優先級設定寄存器($001F)
Bit 7 | Bit 6 | Bit 5 | Bit 4 | Bit 3 | Bit 2 | Bit 1 | Bit 0 |
---|---|---|---|---|---|---|---|
PSEL7 | PSEL6 | PSEL5 | PSEL4 | PSEL3 | PSEL2 | PSEL1 | |
1 | 1 | 1 | 1 | 1 |
該寄存器用于将某個可屏蔽中斷的優先級 “ 推進 ” 為可屏蔽中斷的最高可能中斷,複位後該寄存器預設值為 $F2,則IRQ( $FFF2,$FFF3)中斷在可屏蔽中斷中的優先級最高
- 寫入HPRIO中的中斷向量的後八位,可以改變中斷的優先級
- 優先級的作用隻有在多個中斷源同時請求中斷時在能展現
2.4 中斷優先級
一般來說,不可屏蔽中斷比可屏蔽中斷的優先級高,上面我們提到的幾個優先級的順序如下:
RESET > 時鐘監控複位 > COP 看門狗複位 > 非法指令陷阱 > 軟體中斷指令(SWI) > XIRQ
中斷響應的三種狀态
- 預設狀态:
- 在進入中斷服務程式時,I位自動置1,禁止其他可屏蔽中斷
- 即使有優先級更高的中斷請求,必須等目前中斷服務程式執行完以後才能響應
- 優先級的作用隻有在多個中斷源同時請求中斷時才能展現
- 無法實作中斷嵌套
- 中斷嵌套狀态
- 在進入中斷服務程式時,手動對I位清零
- 任何其他可屏蔽中斷都可以被響應,無論其優先級有多高
-
中斷優先處理機制
與上面中斷處理機制不同的是,低優先級的中斷可以被高優先級響應
開啟優先處理機制的方法
- 在中斷服務程式中,首先對 I 清零,即EnableInterrupts
- 選擇優先級更高的中斷源可以進入響應中斷
- 設定優先等級
優先等級 | 設定方式 |
---|---|
兩級 | 一個中斷源為低優先級,其他為高優先級 在低優先級中斷服務程式中,對 I 位清零 在高優先級中斷服務程式中,不清零 |
多級 | 利用局部的中斷屏蔽位 比如Timer Channel0 的中斷屏蔽位 TIE_C0I |
2.5 中斷向量表
中斷向量表是中斷源的識别标志,可用來 形成相應的中斷服務程式的入口位址或存放中斷服務程式的首位址稱為中斷向量,預設的向量表如下: