新聞中心

EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > STM8的中斷系統(tǒng)以及外部中斷詳解

STM8的中斷系統(tǒng)以及外部中斷詳解

作者: 時(shí)間:2016-11-19 來(lái)源:網(wǎng)絡(luò) 收藏
STM8具有最多32的中斷系統(tǒng),在中斷的處理上類(lèi)似于cortexm系列的芯片,首先是每個(gè)中斷的向量都是固化在系統(tǒng)內(nèi)部的,用戶(hù)需要向相應(yīng)的中斷向量flash位置寫(xiě)入中斷處理函數(shù),其二,每個(gè)中斷向量都具有可編程的優(yōu)先級(jí),共有兩位優(yōu)先級(jí),兩個(gè)BIT的優(yōu)先級(jí)可以催化出4個(gè)優(yōu)先級(jí),具體如下


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

中斷控制器內(nèi)部有一些寄存器專(zhuān)門(mén)用來(lái)存放相應(yīng)的中斷的中斷優(yōu)先級(jí),同同時(shí),在系統(tǒng)內(nèi)部也有一個(gè)系統(tǒng)寄存器CC他的第三位和第五位分別表示當(dāng)前正在處理的中斷的優(yōu)先級(jí)

可以這樣認(rèn)為,中斷發(fā)生的時(shí)候,系統(tǒng)寄存器在執(zhí)行中斷向量跳轉(zhuǎn)的時(shí)候自動(dòng)載入了相應(yīng)的中斷優(yōu)先級(jí)到系統(tǒng)寄存器CC中.

中斷的處理遵循先判斷軟件優(yōu)先級(jí)后判斷硬件優(yōu)先級(jí)的模式,當(dāng)幾個(gè)中斷同時(shí)發(fā)生的時(shí)候,系統(tǒng)會(huì)根據(jù)其固化的硬件優(yōu)先級(jí)進(jìn)行相應(yīng),

另外,STM8支持中斷嵌套,因?yàn)檐浖?yōu)先級(jí)就4級(jí),最多也就軟件優(yōu)先級(jí)三層嵌套

對(duì)STM8的中斷進(jìn)行操作其實(shí)也簡(jiǎn)單

1.配置系統(tǒng)中斷的打開(kāi)或關(guān)閉

2.配置想要使用的中斷向量的軟件優(yōu)先級(jí)


3.打開(kāi)相應(yīng)的外設(shè)中斷源的中斷,就可以響應(yīng)了

針對(duì)于外部中斷來(lái)說(shuō),首先,STM8的每一個(gè)引腳都能支持外部中斷,但是在中斷向量上,不是每一個(gè)引腳都有

獨(dú)立的中斷向量,而是每個(gè)端口共用一個(gè)中斷向量,在端口中斷向量處理函數(shù)中檢查到底是哪一個(gè)引腳出現(xiàn)了問(wèn)題,

對(duì)于外部中斷的配置,如下

可以定義中斷的觸發(fā)模式,電平觸發(fā),下降沿觸發(fā)等,這個(gè)寄存器存放了A B CD四個(gè)向量的中斷模式


該寄存器存放了E向量的中斷

另外,外部中斷中有一個(gè)特殊的中斷叫做TLI不可屏蔽中斷,也就是PD7,他不屬于D中斷向量而是擁有自己的TLI中斷向量

使用外部中斷的過(guò)程

1.根據(jù)前面的描述配置中斷向量

2.配置中斷端口的觸發(fā)模式

3.對(duì)相應(yīng)的GPIO口選擇中斷輸入模式

在使用中斷函數(shù)的時(shí)候需要注意,外部中斷的中斷函數(shù)我們并沒(méi)有一個(gè)寄存器告訴我們哪一個(gè)中斷向量的哪一個(gè)引腳發(fā)生了中斷

需要我們讀取端口的信息,假設(shè)是下降沿中斷觸發(fā),那么中斷處理函數(shù)在運(yùn)行的時(shí)候,該引腳應(yīng)該是電平的,檢查哪一個(gè)引腳是低電平,我們就可以知道哪一個(gè)引腳發(fā)生了中斷

從而進(jìn)行正確的處理

所以最好是一個(gè)端口只有一個(gè)引腳中斷,這樣易于判斷,省去了一些讀引腳的過(guò)程

具體操作請(qǐng)查看一下代碼

#include "exti.h"void ExtiInit(void){//首先禁用中斷disableInterrupts();//配置IO口為輸入中斷模式//D7初始化GPIOD->DDR &= ~(1<<7);//設(shè)置為輸入GPIOD->CR1 =  (1<<7);GPIOD->CR2 =  (1<<7);//中斷上拉輸入//E3初始化GPIOE->DDR &= ~(1<<3);//設(shè)置為輸入GPIOE->CR1 =  (1<<3);GPIOE->CR2 =  (1<<3);//中斷上拉輸入//設(shè)定中斷優(yōu)先級(jí),TLI是最高的不可屏蔽中斷優(yōu)先級(jí),所以不需要設(shè)置軟件優(yōu)先級(jí),只//需要設(shè)置E3也就是端口E的優(yōu)先級(jí)即可,中斷向量號(hào)為7 對(duì)應(yīng)寄存器ITC_SPR2ITC->ISPR2 &= (3<<6);//清楚中斷優(yōu)先級(jí)ITC->ISPR2 = (1<<6);//中斷優(yōu)先級(jí)01//設(shè)置中斷觸發(fā)模式EXTI->CR2 &= ~(1<<2);//TLI下降沿觸發(fā)EXTI->CR2 &= ~(3<<0);//清除PORTEEXTI->CR2 = (2<<0);//Porte僅僅下降沿觸發(fā)enableInterrupts();//打開(kāi)中斷}//TLI中斷處理函數(shù)INTERRUPT_HANDLER(TLI_IRQHandler, 0){keyValue = KEY_VALUE1;}//PORT E中斷處理函數(shù)INTERRUPT_HANDLER(EXTI_PORTE_IRQHandler, 7){//保險(xiǎn)起見(jiàn),這里進(jìn)行一次電平if((GPIOE->IDR&0X08) == 0)//檢測(cè)是不是低電平{keyValue = KEY_VALUE2;}}

#ifndef __EXTI_H_#define __EXTI_H_#include "stm8s.h"#include "key.h"http://我們是用兩個(gè)按鍵作為中斷觸發(fā),其中,D7是TLI中斷,E3是portE中斷void ExtiInit(void);#endif


評(píng)論


技術(shù)專(zhuān)區(qū)

關(guān)閉