日本高清不卡中文字幕-一起草草视频在线观看-亚洲精品一区二区三区色-国产亚洲精品免费视频

你好!歡迎來到深圳市穎特新科技有限公司!
語言
當(dāng)前位置:首頁(yè) >> 技術(shù)中心 >> 單片機(jī)入門 >> AVR單片機(jī)——中斷系統(tǒng)

AVR單片機(jī)——中斷系統(tǒng)

關(guān)鍵字:AVR單片機(jī) 中斷系統(tǒng) 作者:admin 來源:不詳 發(fā)布時(shí)間:2018-05-18  瀏覽:12

中斷的優(yōu)點(diǎn)

中斷函數(shù)只在中斷觸發(fā)源觸發(fā)的時(shí)候才會(huì)執(zhí)行,其他時(shí)間不執(zhí)行. 如果不使用中斷而且如果要根據(jù)某個(gè)端口的變化而作相應(yīng)的函數(shù)操作,就必須不斷地查詢端口的信號(hào),而中斷不用,只要端口一有變化,就會(huì)系統(tǒng)就會(huì)自動(dòng)進(jìn)入中斷函數(shù), 我覺得這就是中斷的目的,也是優(yōu)點(diǎn).

中斷優(yōu)先級(jí)

1.png

1) AVR單片機(jī)在同一個(gè)優(yōu)先級(jí)中,中斷向量入口地址越低,其優(yōu)先級(jí)越高。AVR單片機(jī)在響應(yīng)中斷以后,會(huì)禁止系統(tǒng)響應(yīng)其余中斷。如果程序需要在某個(gè)中斷服務(wù)程序中響應(yīng)其它中斷事件,可以在該中斷服務(wù)程序中用重新使能全局中斷即可。否則,AVR單片機(jī)只有在退出中斷進(jìn)程時(shí),才重新使能全局中斷。

2) AVR(至少是ATmega16)單片機(jī)采用固定的硬件優(yōu)先級(jí)方式,不支持通過軟件對(duì)中斷優(yōu)先級(jí)重新設(shè)定。

AVR有不同的中斷源。每個(gè)中斷和復(fù)位在程序空間都有獨(dú)立的中斷向量。所有的中斷事件都有自己的使能位。當(dāng)使能位置位,且狀態(tài)寄存器的全局中斷使能位I 也置位時(shí),中斷可以發(fā)生。

3) AVR單片機(jī)的中斷優(yōu)先級(jí)只在同時(shí)觸發(fā)中斷時(shí) 優(yōu)先級(jí)高的中斷先進(jìn)行處理,而對(duì)于51單片機(jī)中低級(jí)別的中斷不能打斷高級(jí)別的中斷,在AVR單片機(jī)中低級(jí)別的中斷卻可以

中斷相關(guān)寄存器

1.MCUCR——MCU控制寄存器

SM2 SE SM1 SM0 ISC11 ISC10 ISC01 ISC00

位3,2——ISC11,ISC10:中斷觸發(fā)方式控制1 位1與位0

外部中斷1由引腳INT1激發(fā),如果SREG寄存器的I標(biāo)志位和相應(yīng)的中斷屏蔽位置位的話。在檢測(cè)邊沿前MCU首先采樣INT1引腳上的電平。如果選擇了邊沿觸發(fā)方式或電平變化觸發(fā)方式,那么持續(xù)時(shí)間大于一個(gè)時(shí)鐘周期的脈沖將觸發(fā)中斷,過短的脈沖則不能保證觸發(fā)中斷。如果選擇低電平觸發(fā)方式,那么低電平必須保持到當(dāng)前指令執(zhí)行完成。

ISC11 ISC10 說明

0 0 INT1為低電平時(shí)產(chǎn)生中斷請(qǐng)求

0 1 INT1引腳上任意的邏輯電平變化都將引發(fā)中斷

1 0 INT1的下降沿產(chǎn)生異步中斷請(qǐng)求

1 1 INT1的上升沿產(chǎn)生異步中斷請(qǐng)求

位1,0–ISC01,ISC00:中斷0觸發(fā)方式控制位 1與位0

外部中斷0由引腳INT0激發(fā),如果SREG寄存器的I標(biāo)志位和相應(yīng)的中斷屏蔽位置位的話。在檢測(cè)邊沿前MCU首先采樣INT0引腳上的電平。如果選擇了邊沿觸發(fā)方式或電平變化觸發(fā)方式,那么持續(xù)時(shí)間大于一個(gè)時(shí)鐘周期的脈沖將觸發(fā)中斷,過短的脈沖則不能保證觸發(fā)中斷。如果選擇低電平觸發(fā)方式,那么低電平必須保持到當(dāng)前指令執(zhí)行完成。

ISC01 ISC00 說明

0 0 INT0為低電平時(shí)產(chǎn)生中斷請(qǐng)求

0 1 INT0引腳上任意的邏輯電平變化都將引發(fā)中斷

1 0 INT0的下降沿產(chǎn)生異步中斷請(qǐng)求

1 1 INT0的上升沿產(chǎn)生異步中斷請(qǐng)求

2.MCUCSR——MCU控制與狀態(tài)寄存器

JTD ISC2 – JTRF WDRF BORF EXTRF PORF

位6——ISC2:中斷2觸發(fā)方式控制

異步外中斷2由外部引腳INT2激活,如果SREG寄存器的I標(biāo)志和GICR寄存器相應(yīng)的中斷屏蔽位置位的話。若ISC2寫0,INT2的下降沿激活中斷。若ISC2寫1,INT2的上升沿激活中斷。INT2的邊沿觸發(fā)方式是異步的。只要INT2引腳上產(chǎn)生寬度大于Table 36所示數(shù)據(jù)的脈沖就會(huì)引發(fā)中斷。若選擇了低電平中斷,低電平必須保持到當(dāng)前指令完成,

然后才會(huì)產(chǎn)生中斷。而且只要將引腳拉低,就會(huì)引發(fā)中斷請(qǐng)求。改變ISC2時(shí)有可能發(fā)生中斷。因此建議首先在寄存器GICR里清除相應(yīng)的中斷使能位INT2,然后再改變ISC2。最后,不要忘記在重新使能中斷之前通過對(duì)GIFR寄存器的相應(yīng)中斷標(biāo)志位INTF2寫'1’其清零。

3.GICR——通用中斷控制寄存器

INT1 INT0 INT2 – – – IVSEL IVCE

位7——INT1:使能外部中斷請(qǐng)求1

當(dāng)INT1為'1’,而且狀態(tài)寄存器SREG的I標(biāo)志置位,相應(yīng)的外部引腳中斷就使能了。MCU通用控制寄存器–MCUCR的中斷敏感電平控制1位1/0(ISC11與ISC10)決定中斷是由上升沿、下降沿,還是INT1電平觸發(fā)的。只要使能,即使INT1引腳被配置為輸出,只要引腳電平發(fā)生了相應(yīng)的變化,中斷將產(chǎn)生。

位6——INT0:使能外部中斷請(qǐng)求0

當(dāng)INT0為'1’,而且狀態(tài)寄存器SREG的I標(biāo)志置位,相應(yīng)的外部引腳中斷就使能了。MCU通用控制寄存器–MCUCR的中斷敏感電平控制0位1/0(ISC01與ISC00)決定中斷是由上升沿、下降沿,還是INT0電平觸發(fā)的。只要使能,即使INT0引腳被配置為輸出,只要引腳電平發(fā)生了相應(yīng)的變化,中斷將產(chǎn)生。

位 5——INT2:使能外部中斷請(qǐng)求2

當(dāng)INT2為'1’,而且狀態(tài)寄存器SREG的I標(biāo)志置位,相應(yīng)的外部引腳中斷就使能了。MCU通用控制寄存器–MCUCR的中斷敏感電平控制2位1/0(ISC2與ISC2)決定中斷是由上升沿、下降沿,還是INT2電平觸發(fā)的。只要使能,即使INT2引腳被配置為輸出,只要引腳電平發(fā)生了相應(yīng)的變化,中斷將產(chǎn)生。

4.GIFR——通用中斷標(biāo)志寄存器

INTF1 INTF0 INTF2 – – – – –

位 7——INTF1:外部中斷標(biāo)志1

INT1引腳電平發(fā)生跳變時(shí)觸發(fā)中斷請(qǐng)求,并置位相應(yīng)的中斷標(biāo)志INTF1。如果SREG的位I以及GICR寄存器相應(yīng)的中斷使能位INT1為”1”,MCU即跳轉(zhuǎn)到相應(yīng)的中斷向量。進(jìn)入中斷服務(wù)程序之后該標(biāo)志自動(dòng)清零。此外,標(biāo)志位也可以通過寫入”1”來清零。

位6——INTF0:外部中斷標(biāo)志0

INT0引腳電平發(fā)生跳變時(shí)觸發(fā)中斷請(qǐng)求,并置位相應(yīng)的中斷標(biāo)志INTF0。如果SREG的位I以及GICR寄存器相應(yīng)的中斷使能位INT0為”1”,MCU即跳轉(zhuǎn)到相應(yīng)的中斷向量。進(jìn)入中斷服務(wù)程序之后該標(biāo)志自動(dòng)清零。此外,標(biāo)志位也可以通過寫入”1”來清零。

位 5——INTF2:外部中斷標(biāo)志2

INT2引腳電平發(fā)生跳變時(shí)觸發(fā)中斷請(qǐng)求,并置位相應(yīng)的中斷標(biāo)志INTF2。如果SREG的位I以及GICR寄存器相應(yīng)的中斷使能位INT2為”1”,MCU即跳轉(zhuǎn)到相應(yīng)的中斷向量。進(jìn)入中斷服務(wù)程序之后該標(biāo)志自動(dòng)清零。此外,標(biāo)志位也可以通過寫入”1”來清零。注意,當(dāng)INT2中斷禁用進(jìn)入某些休眠模式時(shí),該引腳的輸入緩沖將禁用。這會(huì)導(dǎo)致INTF2標(biāo)志設(shè)置信號(hào)的邏輯變化。

一些重要的點(diǎn)

一、中斷信號(hào)往往是電信號(hào)的某種變化形式,如

脈沖的上升沿或下降沿

高電平或低電平

電平變化

二、中斷向量

中斷請(qǐng)求被cpu檢測(cè)到之后,如果中斷控制系統(tǒng)允許,cpu會(huì)自動(dòng)轉(zhuǎn)移,執(zhí)行一個(gè)固定的程序空間地址的指令。

這個(gè)固定地址叫做中斷入口地址,也叫中斷向量。而這個(gè)地址是有單片機(jī)的硬件來決定的。

一般這個(gè)地址不放置具體的程序,只放置一條跳轉(zhuǎn)指令,轉(zhuǎn)向真正的中斷服務(wù)程序。

三、AVR不支持軟件改變中斷優(yōu)先級(jí),即其優(yōu)先級(jí)是固定的。

四、中斷源分為三類

1.非屏蔽中斷,如reset中斷,無法屏蔽

2.屏蔽中斷,大部分中斷都是可屏蔽的

3.軟件中斷,AVR不支持,好像ARM里面有,可以作為操作系統(tǒng)的中斷調(diào)用。

五、中斷響應(yīng)條件

響應(yīng)A中斷 = 全局中斷允許標(biāo)志 AND 中斷A允許標(biāo)志 AND 中斷A標(biāo)志

全局中斷允許標(biāo)志對(duì)于AVR就是其標(biāo)志寄存器SREG的I位,SREG.7,gcc中打開和關(guān)閉的方法為sei()和cli()

中斷允許標(biāo)志,一般來說每個(gè)中斷都會(huì)有單獨(dú)的允許標(biāo)志位,放置在某個(gè)相關(guān)的寄存器中,通過單獨(dú)設(shè)置那一位可以打開或關(guān)閉相應(yīng)的中斷。

中斷標(biāo)志,一般說來這個(gè)標(biāo)志都是硬件觸發(fā)的,就是一旦滿足那個(gè)條件,這個(gè)標(biāo)志自動(dòng)為1,不需要手動(dòng)設(shè)置。

六、中斷向量區(qū)大小 = 中斷源個(gè)數(shù) x 每個(gè)中斷向量所占的字?jǐn)?shù)

七、中斷標(biāo)志位一般會(huì)在cpu響應(yīng)中斷后自動(dòng)清除,或在中斷服務(wù)程序中通過讀寫專門的寄存器而自動(dòng)清除。

當(dāng)然也可以對(duì)其進(jìn)行軟件清除,清除方法是對(duì)其寫1(這點(diǎn)比較怪)

八、中斷標(biāo)志會(huì)一直保持,如果中斷被禁止或者是cpu不能馬上響應(yīng)的話。這是稱作“掛起”,一旦cpu可以響應(yīng)了,則馬上按優(yōu)先級(jí)處理中斷。

九、個(gè)別中斷不帶中斷標(biāo)志,比如配置為低電平觸發(fā)的外部中斷。只要滿足條件就會(huì)向cpu一直發(fā)送中斷申請(qǐng)。

這里就會(huì)出現(xiàn)這樣的問題:

1.cpu暫時(shí)沒響應(yīng)中斷,低電平?jīng)]有了,這樣就少了一次服務(wù)

2.cpu響應(yīng)了,響應(yīng)完事,低電平還在,又多服務(wù)了一次

所以設(shè)計(jì)的時(shí)候要注意

一般這種低電平觸發(fā)中斷方式用于喚醒處于休眠模式的cpu,可參考具體方案。

十、AVR響應(yīng)中斷時(shí)會(huì)將全局中斷允許位關(guān)掉,不響應(yīng)其它中斷,所以也就不允許中斷的嵌套。

當(dāng)然可以在中斷服務(wù)程序中,將其開啟,但是這樣做是非常危險(xiǎn)的,不提倡。

十一、中斷響應(yīng)的過程如下

1.清零全局中斷

2.將具體被響應(yīng)的中斷標(biāo)志位清零

3.中斷斷點(diǎn)地址壓入堆棧,同時(shí)SP減2

4.自動(dòng)將中斷向量地址壓入PC,強(qiáng)制執(zhí)行。

以上均由硬件自動(dòng)完成,軟件需要做的事情如下:

1.中斷入口處指令:rjmp reset

2.中斷服務(wù)程序

3.返回指令 reti

十二、

非常要注意的是中斷只保存和恢復(fù)了斷點(diǎn)的PC值,對(duì)其它的寄存器均沒有保護(hù),所以如果在中斷服務(wù)程序中要是改變了某些寄存器的值的話就容易出現(xiàn)問題。

所以,中斷服務(wù)程序要盡量短,不做多余的操作,并且一旦對(duì)sreg有破壞的話,一定要在先將其壓入堆棧。

十三、技巧

在使能一個(gè)中斷允許位之前,最好將改中斷的中斷標(biāo)志位清除,然后馬上使能允許位。

這樣可以避免一些不必要的錯(cuò)誤,如果之前改標(biāo)志為1的話,就會(huì)產(chǎn)生一個(gè)錯(cuò)誤的中斷。

再說一次,清除標(biāo)志位的方法是對(duì)其寫1。

編輯:admin  最后修改時(shí)間:2018-05-25

聯(lián)系方式

0755-82591179

傳真:0755-82591176

郵箱:vicky@yingtexin.net

地址:深圳市龍華區(qū)民治街道民治大道973萬眾潤(rùn)豐創(chuàng)業(yè)園A棟2樓A08

Copyright © 2014-2023 穎特新科技有限公司 All Rights Reserved.  粵ICP備14043402號(hào)-4

碌曲县| 景谷| 民和| 吴旗县| 西平县| 综艺| 轮台县| 宁国市| 常熟市| 通渭县| 山西省| 姚安县| 高密市| 齐河县| 哈尔滨市| 海南省| 永安市| 嫩江县| 许昌县| 武平县| 乌拉特中旗| 灵川县| 常熟市| 永靖县| 忻州市| 奉新县| 泸州市| 栾川县| 民乐县| 蒙城县| 繁昌县| 安达市| 比如县| 乌鲁木齐市| 容城县| 岳西县| 武宣县| 寿光市| 滁州市| 安徽省| 黄浦区|