<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

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

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

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


          本文引用地址:http://www.ex-cimer.com/article/201611/318393.htm

          中斷控制器內(nè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)中斷的打開或關(guān)閉

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


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

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

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

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

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


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

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

          使用外部中斷的過程

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

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

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

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

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

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

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

          具體操作請(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();//打開中斷}//TLI中斷處理函數(shù)INTERRUPT_HANDLER(TLI_IRQHandler, 0){keyValue = KEY_VALUE1;}//PORT E中斷處理函數(shù)INTERRUPT_HANDLER(EXTI_PORTE_IRQHandler, 7){//保險(xiǎ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ù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();