stm8具有最多32的中斷系統,在中斷的處理上類似於cortexm系列的晶元,首先是每個中斷的向量都是固化在系統內部的,使用者需要向相應的中斷向量flash位置寫入中斷處理函式,其二,每個中斷向量都具有可程式設計的優先順序,共有兩位優先順序,兩個bit的優先順序可以催化出4個優先順序,具體如下
中斷控制器內部有一些暫存器專門用來存放相應的中斷的中斷優先順序,同同時,在系統內部也有乙個系統暫存器cc他的第三位和第五位分別表示當前正在處理的中斷的優先順序
可以這樣認為,中斷發生的時候,系統暫存器在執行中斷向量跳轉的時候自動載入了相應的中斷優先順序到系統暫存器cc中.
中斷的處理遵循先判斷軟體優先順序後判斷硬體優先順序的模式,當幾個中斷同時發生的時候,系統會根據其固化的硬體優先順序進行相應,
另外,stm8支援中斷巢狀,因為軟體優先順序就4級,最多也就軟體優先順序三層巢狀
對stm8的中斷進行操作其實也簡單
1. 配置系統中斷的開啟或關閉
2. 配置想要使用的中斷向量的軟體優先順序
3. 開啟相應的外設中斷源的中斷,就可以響應了
針對於外部中斷來說,首先,stm8的每乙個引腳都能支援外部中斷,但是在中斷向量上,不是每乙個引腳都有
獨立的中斷向量,而是每個埠共用乙個中斷向量,在埠中斷向量處理函式中檢查到底是哪乙個引腳出現了問題,
對於外部中斷的配置,如下
可以定義中斷的觸發模式,電平觸發,下降沿觸發等,這個暫存器存放了a b cd四個向量的中斷模式
該暫存器存放了e向量的中斷
另外,外部中斷中有乙個特殊的中斷叫做tli不可遮蔽中斷,也就是pd7,他不屬於d中斷向量而是擁有自己的tli中斷向量
使用外部中斷的過程
1. 根據前面的描述配置中斷向量
2. 配置中斷埠的觸發模式
3. 對相應的gpio口選擇中斷輸入模式
在使用中斷函式的時候需要注意,外部中斷的中斷函式我們並沒有乙個暫存器告訴我們哪乙個中斷向量的哪乙個引腳發生了中斷
需要我們讀取埠的資訊,假設是下降沿中斷觸發,那麼中斷處理函式在執行的時候,該引腳應該是電平的,檢查哪乙個引腳是低電平,我們就可以知道哪乙個引腳發生了中斷
從而進行正確的處理
所以最好是乙個埠只有乙個引腳中斷,這樣易於判斷,省去了一些讀引腳的過程
具體操作請檢視一下**
#include "exti.h"void extiinit(void)
//tli中斷處理函式
interrupt_handler(tli_irqhandler, 0)
//port e中斷處理函式
interrupt_handler(exti_porte_irqhandler, 7)
}
#ifndef __exti_h_#define __exti_h_
#include "stm8s.h"
#include "key.h"
//我們是用兩個按鍵作為中斷觸發,其中,d7是tli中斷,e3是porte中斷
void extiinit(void);
#endif
stm8l051的外部中斷
stm8l051,如果開啟全域性中斷後再去設定外部中斷,在 情況下觀察暫存器沒有被設定,即使直接向中斷控制暫存器寫值也無效。關閉總中斷後,再去設定相應的外部中斷,則中斷相關暫存器設定成功,程式執行正常。如下 disableinterrupts exti deinit exti setpinsensi...
STM中斷系統
1.0 中斷向量表 在starup s 的啟動檔案當中 2.0 中斷函式 在starup s 的啟動檔案當中設計了中斷函式 weak 所以可以在外部再定義乙個中斷函式 此函式必須與啟動檔案中的中斷向理表定義的函式相同 3.0 中斷設計 3.1 中斷分組 0組到4組 注意,乙個程式只能一次分組,否則會...
STM32外部中斷
一 基本概念 arm coetex m3核心共支援256個中斷,其中16個內部中斷,240個外部中斷和可程式設計的256級中斷優先順序的設定。stm32目前支援的中斷共84個 16個內部 68個外部 還有16級可程式設計的中斷優先順序的設定,僅使用中斷優先順序設定8bit中的高4位。stm32可支援...