《STM8S系列單片機(jī)原理與應(yīng)用》課件第6章_第1頁(yè)
《STM8S系列單片機(jī)原理與應(yīng)用》課件第6章_第2頁(yè)
《STM8S系列單片機(jī)原理與應(yīng)用》課件第6章_第3頁(yè)
《STM8S系列單片機(jī)原理與應(yīng)用》課件第6章_第4頁(yè)
《STM8S系列單片機(jī)原理與應(yīng)用》課件第6章_第5頁(yè)
已閱讀5頁(yè),還剩38頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

第6章STM8中斷控制系統(tǒng)

6.1CPU與外設(shè)通信方式概述

6.2STM8S中斷系統(tǒng)6.1CPU與外設(shè)通信方式概述6.1.1查詢方式查詢方式包括查詢輸入方式和查詢輸出方式。所謂查詢輸入方式,是指CPU讀外設(shè)數(shù)據(jù)前,先查詢外設(shè)是否處于準(zhǔn)備就緒狀態(tài),即外設(shè)是否已將數(shù)據(jù)輸出到CPU的數(shù)據(jù)總線上。查詢輸出方式是指CPU向外設(shè)輸出數(shù)據(jù)前,先查詢外設(shè)是否處于空閑狀態(tài),即外設(shè)是否可以接收CPU輸出的數(shù)據(jù)。下面以CPU向外設(shè)輸出數(shù)據(jù)為例,簡(jiǎn)要介紹查詢傳輸方式的工作過(guò)程。當(dāng)CPU需要向外設(shè)輸出數(shù)據(jù)時(shí),先將控制命令(如外設(shè)的啟動(dòng)命令)寫入外設(shè)的控制端口,然后不斷讀取外設(shè)的狀態(tài)口,當(dāng)發(fā)現(xiàn)外設(shè)處于空閑狀態(tài)后,就將數(shù)據(jù)寫入外設(shè)的數(shù)據(jù)口,完成數(shù)據(jù)的輸出過(guò)程??梢?jiàn),查詢方式硬件開(kāi)銷少、傳輸驅(qū)動(dòng)程序簡(jiǎn)單,但缺點(diǎn)是CPU占用率高,原因是在外設(shè)未準(zhǔn)備就緒或處于非空閑狀態(tài)前,CPU一直處于查詢狀態(tài),不能執(zhí)行其他操作。任何時(shí)候CPU只能與一個(gè)外設(shè)進(jìn)行數(shù)據(jù)交換。6.1.2中斷通信方式采用中斷傳輸方式可以克服查詢傳輸方式存在的缺陷。當(dāng)CPU需要向外設(shè)輸出數(shù)據(jù)時(shí),將啟動(dòng)命令寫入外設(shè)控制口后,就繼續(xù)執(zhí)行隨后的指令序列,而不是被動(dòng)等待。當(dāng)外設(shè)處于空閑狀態(tài),可以接收數(shù)據(jù)時(shí),由外設(shè)向CPU發(fā)出允許數(shù)據(jù)傳送的請(qǐng)求信號(hào)—中斷請(qǐng)求信號(hào),如果滿足中斷響應(yīng)條件,CPU將暫停執(zhí)行隨后的指令序列,轉(zhuǎn)去執(zhí)行預(yù)先安排好的數(shù)據(jù)傳送程序—中斷服務(wù)程序,CPU響應(yīng)外設(shè)中斷請(qǐng)求的過(guò)程稱為中斷響應(yīng)。在數(shù)據(jù)傳送完成后,CPU再返回?cái)帱c(diǎn)處繼續(xù)執(zhí)行被中斷了的程序,這個(gè)過(guò)程稱為中斷返回??梢?jiàn),在這種方式中,CPU發(fā)出控制命令后,將繼續(xù)執(zhí)行控制命令后的指令序列,而不是通過(guò)讀取外設(shè)的狀態(tài)信息來(lái)確定外設(shè)是否處于空閑狀態(tài),這不僅提高了CPU的利用率,而且能同時(shí)與多個(gè)外設(shè)進(jìn)行數(shù)據(jù)交換—合理安排相應(yīng)中斷的優(yōu)先級(jí)以及同優(yōu)先級(jí)中斷的查詢順序。因此,中斷傳輸方式是CPU與外設(shè)之間最常見(jiàn)的一種數(shù)據(jù)傳輸方式。

1.中斷源在計(jì)算機(jī)控制系統(tǒng)中,把引起中斷的事件稱為中斷源。在單片機(jī)控制系統(tǒng)中,常見(jiàn)的中斷源有:

(1)外部中斷,如MCU某些特定引腳電平變化(由高到低或由低到高)引起的中斷。

(2)各類定時(shí)/計(jì)數(shù)器溢出中斷,即定時(shí)時(shí)間到或計(jì)數(shù)器滿中斷。

(3)?EEPROM或FlashROM操作(擦除、寫入)結(jié)束中斷。

(4)?AD轉(zhuǎn)換結(jié)束中斷。

(5)串行發(fā)送結(jié)束中斷。

(6)串行接收有效中斷。

(7)電源掉電中斷。

2.中斷優(yōu)先級(jí)當(dāng)多個(gè)外設(shè)以中斷方式與CPU進(jìn)行數(shù)據(jù)交換時(shí),就可能遇到兩個(gè)或兩個(gè)以上外設(shè)中斷請(qǐng)求同時(shí)有效的情形。在這種情況下,CPU先響應(yīng)哪一外設(shè)的中斷請(qǐng)求呢?這就涉及中斷優(yōu)先級(jí)問(wèn)題。一般來(lái)說(shuō),為了能夠處理多個(gè)中斷請(qǐng)求,中斷控制系統(tǒng)均提供中斷優(yōu)先級(jí)控制。有了中斷優(yōu)先級(jí)控制后,在有多個(gè)中斷請(qǐng)求同時(shí)有效時(shí),可先響應(yīng)高優(yōu)先級(jí)的中斷請(qǐng)求,并且高優(yōu)先級(jí)中斷請(qǐng)求可中斷低優(yōu)先級(jí)中斷的處理進(jìn)程,從而可以實(shí)現(xiàn)中斷嵌套。

3.中斷開(kāi)關(guān)為避免某一個(gè)處理過(guò)程被中斷,中斷控制器給每一個(gè)中斷源都設(shè)置了一個(gè)中斷請(qǐng)求屏蔽位,用于屏蔽(即禁止)相應(yīng)中斷源發(fā)出的的中斷請(qǐng)求。當(dāng)某一個(gè)中斷源的中斷請(qǐng)求處于禁止?fàn)顟B(tài)時(shí),即使該中斷請(qǐng)求有效,CPU也不響應(yīng)。此外,還設(shè)有一個(gè)總的中斷請(qǐng)求屏蔽位,當(dāng)該位處于禁止?fàn)顟B(tài)時(shí),CPU忽略所有中斷源的中斷請(qǐng)求,相當(dāng)于中斷源的總開(kāi)關(guān)。

4.中斷處理過(guò)程中斷處理過(guò)程涉及中斷查詢和響應(yīng)兩個(gè)方面。下面結(jié)合STM8S中斷控制系統(tǒng)逐一介紹。6.2STM8S中斷系統(tǒng)6.2.1中斷源及其優(yōu)先級(jí)

STM8S支持32個(gè)中斷,中斷服務(wù)程序的入口地址稱為中斷向量,放在地址為8000H~807FH之間的存儲(chǔ)區(qū)域,每個(gè)中斷向量占用4個(gè)字節(jié),共計(jì)4?×?32(即128)字節(jié),其內(nèi)容為“82H,VTee,VThh,VTll”[1]。其中,82H為中斷操作碼,隨后三個(gè)字節(jié)為中斷服務(wù)程序入口地址。因此,STM8S中斷服務(wù)程序可放在16MB線性地址空間內(nèi)的任意一個(gè)存儲(chǔ)區(qū)中。

[1]

在應(yīng)用程序中,并不是把24位中斷入口物理地址直接填入對(duì)應(yīng)的中斷向量表中,而是在中斷向量段內(nèi)用DC.L偽指令“DC.L{82000000H+中斷入口地址標(biāo)號(hào)}”的形式,經(jīng)編譯后自動(dòng)生成對(duì)應(yīng)的中斷向量表(詳見(jiàn)第5章內(nèi)容)。

STM8S支持的32個(gè)中斷向量中包含了兩個(gè)不可屏蔽中斷事件(復(fù)位中斷RESET、軟件中斷TRAP);一個(gè)不可屏蔽的最高優(yōu)先級(jí)硬件中斷源TLI;可屏蔽中斷,包括I/O引腳外部中斷EXTI以及內(nèi)嵌的多個(gè)外設(shè)中斷,如定時(shí)/計(jì)數(shù)器溢出中斷、捕獲中斷、發(fā)送結(jié)束中斷、接收有效中斷等,如表6-1所示。表6-1STM8S中斷源及其中斷向量表不可屏蔽中斷事件(復(fù)位中斷RESET、軟件中斷TRAP)、硬件頂級(jí)中斷源TLI(由PD_CR2[7]位控制)不受RIM、SIM指令控制,即使中斷未開(kāi)放,CPU也依然能響應(yīng)這類中斷請(qǐng)求。除不可屏蔽中斷(軟件中斷TRAP、頂級(jí)中斷TLI)外,每一個(gè)中斷均具有3個(gè)優(yōu)先級(jí)(原因是10級(jí)已分配給主程序,剩余的01、00、11三個(gè)優(yōu)先級(jí)分配給可屏蔽中斷源),分別由ITC_SPRx(中斷控制器軟件優(yōu)先級(jí)寄存器)定義,每?jī)晌粚?duì)應(yīng)一個(gè)中斷源,如表6-2所示。該寄存器在復(fù)位后初值為FFH,即所有中斷的優(yōu)先級(jí)都處于最高級(jí)。STM8內(nèi)核CPU中斷源優(yōu)先級(jí)可用圖6-1描述。表6-2軟件優(yōu)先級(jí)寄存器圖6-1STM8中斷源優(yōu)先級(jí)排列順序在表6-2中:(1)每?jī)晌粚?duì)應(yīng)一個(gè)中斷源,其含義如表6-3所示。表6-3中斷源優(yōu)先

(2)?ITC_SPR1寄存器中的VECT0SPR[1:0]對(duì)應(yīng)頂級(jí)中斷TLI,即PD7引腳中斷,其中斷優(yōu)先級(jí)被系統(tǒng)強(qiáng)制置為11(最高級(jí)),不可更改,且屬于不可屏蔽中斷,即TLI中斷有效時(shí),可中斷優(yōu)先級(jí)為3的任意一個(gè)可屏蔽中斷源的中斷服務(wù)程序。

(3)不可屏蔽中斷事件RESET、TRAP優(yōu)先級(jí)被默認(rèn)為11(最高),因此沒(méi)有軟件優(yōu)先級(jí)寄存器位與之對(duì)應(yīng)。一旦這兩個(gè)中斷有效,CPU響應(yīng)后CC寄存器內(nèi)的中斷優(yōu)先級(jí)標(biāo)志I1、I0位自動(dòng)置1。正因如此,ITC_SPR1寄存器的b1、b0對(duì)應(yīng)TLI,即0號(hào)中斷,而不是復(fù)位中斷RESET;同理,TC_SPR1寄存器的b3、b2對(duì)應(yīng)AWU,即1號(hào)中斷,而不是軟件中斷TRAP;ITC_SPR8寄存器的b3、b2對(duì)應(yīng)29號(hào)中斷。即ITC_SPR8~I(xiàn)TC_SPR1定義了30個(gè)中斷源(編號(hào)為0~29,其中25~29中斷號(hào)保留,沒(méi)有定義)的優(yōu)先級(jí),而ITC_SPR8寄存器的高4位沒(méi)有定義。

(4)優(yōu)先級(jí)10最低,分配給主程序使用。因此,不允許將中斷優(yōu)先級(jí)設(shè)為10。如果將某一個(gè)中斷優(yōu)先級(jí)設(shè)為10,為使對(duì)應(yīng)中斷請(qǐng)求得到響應(yīng),STM8CPU將保留該中斷源先前的優(yōu)先級(jí)。換句話說(shuō),當(dāng)前中斷優(yōu)先級(jí)設(shè)置操作無(wú)效。

(5)當(dāng)兩個(gè)或兩個(gè)以上可屏蔽中斷源具有相同的軟件優(yōu)先級(jí)時(shí),硬件查詢順序如表6-1所示,即1號(hào)中斷(自動(dòng)喚醒中斷AWU)優(yōu)先級(jí)最高,CLK中斷次之,而24號(hào)中斷(FLASH)優(yōu)先級(jí)最低。未被響應(yīng)的中斷請(qǐng)求處于等待狀態(tài)。

(6)對(duì)于RESET、TRAP、TLI不可屏蔽源來(lái)說(shuō),復(fù)位中斷RESET級(jí)別最高,只要復(fù)位中斷RESET有效,任何時(shí)候CPU均可響應(yīng)。而當(dāng)TRAP(軟件中斷)、TLI(頂級(jí)硬件中斷)同時(shí)有效時(shí),CPU先響應(yīng)TRAP中斷請(qǐng)求,如圖6-2所示。圖6-2STM8CPU中斷處理流程

TLI中斷源級(jí)別比可屏蔽中斷源高,換句話說(shuō),當(dāng)CPU響應(yīng)了某個(gè)軟件優(yōu)先級(jí)為3的可屏蔽中斷時(shí),依然能響應(yīng)TLI中斷請(qǐng)求;此外在TLI中斷服務(wù)程序中,不允許執(zhí)行軟件中斷指令TRAP。當(dāng)然在TRAP軟件中斷服務(wù)程序中,CPU不可能響應(yīng)TLI中斷請(qǐng)求,這是因?yàn)閮烧邇?yōu)先級(jí)相同,不能嵌套。不同優(yōu)先級(jí)中斷嵌套如圖6-3所示。從圖6-3中不難看出,IT0、IT3、IT4軟件優(yōu)先級(jí)為3(最高),IT1軟件優(yōu)先級(jí)為2(次之),IT2軟件優(yōu)先級(jí)為1(最低),且規(guī)定同優(yōu)先級(jí)硬件查詢順序?yàn)镮T0、IT1、IT2、IT3、IT4。圖6-3中斷嵌套示意圖當(dāng)中斷按圖6-3所示順序有效時(shí),CPU響應(yīng)過(guò)程如下:在執(zhí)行主程序MAIN時(shí),IT2中斷(優(yōu)先級(jí)為1)有效,CPU響應(yīng)IT2中斷請(qǐng)求,執(zhí)行IT2中斷服務(wù)程序;在執(zhí)行IT2中斷服務(wù)程序過(guò)程中,IT1中斷(優(yōu)先級(jí)為2)有效,CPU響應(yīng)IT1中斷請(qǐng)求,掛起IT2中斷服務(wù)程序(即實(shí)現(xiàn)了中斷嵌套);在執(zhí)行IT1中斷服務(wù)程序過(guò)程中,IT4中斷(優(yōu)先級(jí)為3)有效,CPU響應(yīng)IT4中斷請(qǐng)求,掛起IT1中斷服務(wù)程序(再次嵌套);在執(zhí)行IT4中斷服務(wù)程序過(guò)程中,IT3中斷(優(yōu)先級(jí)為3)有效,CPU不響應(yīng)IT3中斷請(qǐng)求,原因是IT3與IT4優(yōu)先級(jí)相同,不能嵌套;在執(zhí)行IT4中斷服務(wù)程序中遇到TRAP指令,CPU立即響應(yīng)TRAP中斷請(qǐng)求,掛起IT4中斷服務(wù)程序,原因是TRAP屬于不可屏蔽中斷請(qǐng)求,級(jí)別更高;在執(zhí)行軟件中斷過(guò)程中,盡管IT0有效(優(yōu)先級(jí)為3),但CPU同樣不響應(yīng),這是因?yàn)樗鼘儆诳善帘沃袛?,?jí)別比TRAP低。在TRAP中斷服務(wù)執(zhí)行結(jié)束后,返回IT4中斷服務(wù)程序繼續(xù)執(zhí)行;從IT4返回后,先執(zhí)行IT0的中斷請(qǐng)求(盡管IT3比IT0先有效,但在執(zhí)行IT4中斷服務(wù)返回指令時(shí),CPU發(fā)現(xiàn)IT0、IT3同時(shí)有效,同優(yōu)先級(jí)中斷硬件查詢順序是IT0在前);IT0執(zhí)行結(jié)束后,響應(yīng)IT3的中斷請(qǐng)求;在IT3執(zhí)行結(jié)束后,返回IT1中斷服務(wù)程序;在IT1執(zhí)行結(jié)束后,返回IT2中斷服務(wù)程序;在IT2執(zhí)行結(jié)束后,返回主程序MAIN。復(fù)位后,寄存器CC中當(dāng)前中斷優(yōu)先級(jí)I1、I0為11(3級(jí),最高),除軟件中斷TRAP、復(fù)位中斷RESET、TLI(非屏蔽中斷)外,所有中斷功能都被禁止。因此,在主程序中完成了相應(yīng)存儲(chǔ)單元(RAM)與外設(shè)初始化后,要執(zhí)行RIM(復(fù)位中斷)指令,開(kāi)放中斷功能。6.2.2中斷響應(yīng)條件與處理過(guò)程

1.中斷響應(yīng)條件對(duì)于可屏蔽中斷來(lái)說(shuō),當(dāng)某一個(gè)中斷請(qǐng)求出現(xiàn)時(shí),只有滿足下列條件,CPU才會(huì)響應(yīng)。

(1)對(duì)應(yīng)中斷必須處于允許狀態(tài)。

(2)該中斷優(yōu)先級(jí)(由ITC_SPRx寄存器對(duì)應(yīng)位定義)必須高于當(dāng)前正在執(zhí)行的中斷服務(wù)程序的優(yōu)先級(jí)(記錄在寄存器CC的I1、I0位)。如果不滿足以上這兩個(gè)條件,中斷請(qǐng)求標(biāo)志將被鎖存,排隊(duì)等待。

2.中斷處理過(guò)程在所有中斷源中,除復(fù)位中斷RESET外,CPU響應(yīng)了某一個(gè)中斷請(qǐng)求后,均按如下步驟處理:

(1)當(dāng)前指令執(zhí)行結(jié)束后,掛起當(dāng)前正在執(zhí)行的程序。

(2)把CPU內(nèi)核寄存器中的程序計(jì)數(shù)器PC(3字節(jié))、索引寄存器X(2字節(jié))、索引寄存器Y(2字節(jié))、累加器A、條件碼寄存器CC共計(jì)9個(gè)字節(jié)順序壓入堆棧保存。

(3)把對(duì)應(yīng)中斷的軟件優(yōu)先級(jí)I1、I0位的內(nèi)容復(fù)制到條件碼寄存器CC的對(duì)應(yīng)位,阻止同級(jí)以及更低優(yōu)先級(jí)中斷請(qǐng)求。

(4)從中斷向量表中取出對(duì)應(yīng)中斷源入口地址并裝入PC,執(zhí)行中斷服務(wù)程序的第一條指令。

(5)中斷服務(wù)程序結(jié)束后執(zhí)行IRET指令返回,從堆棧中依次彈出CC、A、Y、X以及斷點(diǎn)處的PC指針,繼續(xù)運(yùn)行被中斷了的源程序??梢?jiàn)在STM8內(nèi)核MCU中,CPU響應(yīng)中斷請(qǐng)求后,自動(dòng)保護(hù)了斷點(diǎn)(PC指針)與現(xiàn)場(chǎng)(寄存器A、CC、X及Y)。因此,堆棧要足夠深,以避免溢出。6.2.3外中斷源及其初始化

1.外中斷源

STM8S支持6個(gè)外部中斷源,包括PA、PB、PC、PD、PE口中斷和PD7引腳的頂級(jí)外部中斷,最多有37個(gè)外中斷輸入端。

(1)?PA口:PA6~PA2引腳,共5個(gè)中斷輸入引腳,相或后作為一個(gè)外中斷源EXTI0。

(2)?PB口:PB7~PB0引腳,共8個(gè)中斷輸入引腳,相或后作為一個(gè)外中斷源EXTI1。

(3)?PC口:PC7~PC0引腳,共8個(gè)中斷輸入引腳,相或后作為一個(gè)外中斷源EXTI2。

(4)?PD口:PD6~PD0引腳,共7個(gè)中斷輸入引腳,相或后作為一個(gè)外中斷源EXTI3。

(5)?PE口:PE7~PE0引腳,共8個(gè)中斷輸入引腳,相或后作為一個(gè)外中斷源EXTI4。

(6)?PD7引腳,即頂級(jí)中斷源TLI(一個(gè)不可屏蔽中斷源——通過(guò)PD_CR2寄存器的b7位可禁止PD7引腳的中斷輸入功能,只是其優(yōu)先級(jí)被硬件固定設(shè)為11,不能更改,此外不允許在TLI中斷服務(wù)程序中使用TRAP軟件中斷指令)。

STM8S外中斷標(biāo)志對(duì)程序員不透明,無(wú)論采用何種觸發(fā)方式,CPU在響應(yīng)了外中斷請(qǐng)求后都會(huì)自動(dòng)清除外中斷標(biāo)志。

2.外中斷控制及其初始化順序?qū)XTI_CR1、EXTI_CR2進(jìn)行寫操作時(shí),對(duì)TLI來(lái)說(shuō),必須保證PD7中斷處于禁止?fàn)顟B(tài)(通過(guò)設(shè)置I/O引腳控制寄存器實(shí)現(xiàn));對(duì)PA~PE口外中斷來(lái)說(shuō),必須保證寄存器CC中的I1、I0位為11(保證不響應(yīng)可屏蔽中斷的請(qǐng)求)。因此,最好在復(fù)位后按如下順序初始化外中斷。

(1)初始化GPIO引腳控制寄存器Px_DDR和Px_CR1寄存器,選擇懸空或上拉輸入方式。

(2)初始化外中斷控制寄存器EXTI_CR1、EXTI_CR2寄存器的相應(yīng)位,選擇對(duì)應(yīng)外中斷輸入端口的觸發(fā)方式(同一個(gè)I/O口上的外中斷輸入線只能處于同一種觸發(fā)方式,這是因?yàn)镾TM8外中斷控制寄存器EXTI_CR1、EXTI_CR2以I/O口為控制單位,而不是引腳)。

EXTI_CR1的b1b0位控制PA口引腳外中斷觸發(fā)方式,b3b2位控制PB口引腳外中斷觸發(fā)方式,b5b4位控制PC口引腳外中斷觸發(fā)方式,b7b6位控制PD口PD6~PD0引腳外中斷觸發(fā)方式。

EXTI_CR2的b1b0位控制PE口引腳外中斷觸發(fā)方式,b3b2位控制PD7引腳(TL)外中斷觸發(fā)方式,而b7~b4位保留。外中斷觸發(fā)方式控制位的取值含義如下:①?00:下降沿與低電平觸發(fā)(對(duì)于低電平觸發(fā)的外中斷,在中斷返回前必須確保引腳恢復(fù)為高電平狀態(tài),或禁止該引腳中斷,否則會(huì)出現(xiàn)“一次請(qǐng)求多次響應(yīng)”現(xiàn)象)。在MCU控制系統(tǒng)中,一般盡量避免將外中斷定義為低電平觸發(fā)方式。對(duì)于低電平維持時(shí)間大于其中斷服務(wù)程序執(zhí)行時(shí)間的觸發(fā)信號(hào),最好采用上下沿觸發(fā)方式。在下沿觸發(fā)時(shí),執(zhí)行低電平期間對(duì)應(yīng)的操作;在上沿觸發(fā)時(shí),取消低電平期間執(zhí)行的操作。這樣就可以將電平觸發(fā)方式轉(zhuǎn)化為邊沿觸發(fā)方式,而無(wú)須在中斷服務(wù)程序中查詢并等待低電平觸發(fā)信號(hào)消失。②?01:上升沿觸發(fā)。③?10:下降沿觸發(fā)。④?11:上升沿、下降沿均可觸發(fā)(雙沿觸發(fā))。

(3)初始化相應(yīng)外部中斷軟件優(yōu)先級(jí)控制寄存器ITC_SPRx,設(shè)置對(duì)應(yīng)外中斷的優(yōu)先級(jí)(設(shè)為1、0、3級(jí))。

(4)初始化I/O引腳配置寄存器Px_CR2,開(kāi)放引腳的中斷輸入功能。

(5)執(zhí)行RIM指令,復(fù)位中斷優(yōu)先級(jí),開(kāi)放CPU的中斷功能。

3.同一個(gè)I/O口不同引腳中斷識(shí)別同一個(gè)引腳的多個(gè)外部中斷源共用同一個(gè)中斷入口地址,被視為同一個(gè)中斷源,而STM8SI/O引腳中斷標(biāo)志又不透明,當(dāng)I/O口上只允許一個(gè)引腳具有中斷輸入功能時(shí),那么只要該中斷源有效,則可以肯定對(duì)應(yīng)外中斷輸入引腳出現(xiàn)了中斷請(qǐng)求。當(dāng)同一個(gè)I/O口上多個(gè)引腳中斷輸入同時(shí)有效時(shí),只能通過(guò)讀I/O引腳輸入寄存器(Px_IDR)來(lái)判別是哪一個(gè)引腳引發(fā)的中斷。其判別方法是允許相應(yīng)I/O口中斷前,先將I/O引腳輸入寄存器(Px_IDR)的內(nèi)容保存到RAM的某一個(gè)單元中,進(jìn)入中斷服務(wù)程序后將Px_IDR與先前保存的內(nèi)容進(jìn)行異或,就可以判定到底是哪一個(gè)引腳出現(xiàn)了中斷請(qǐng)求。

;中斷服務(wù)程序入口處

LDA,Px_IDR ;讀相應(yīng)I/O口輸入寄存器Px_IDR

XORA,shadow_Px_IDR ;?I/O口輸入寄存器當(dāng)前狀態(tài)與先前保護(hù)的狀態(tài)異或

MOVshadow_Px_IDR,Px_IDR ;保存當(dāng)前I/O引腳的狀態(tài),以備下次中斷有效時(shí)比較;判別累加器A變化位,從而確定哪一個(gè)引腳出現(xiàn)了中斷請(qǐng)求

BCPA,#80H

JREQNEXT

;不為0,說(shuō)明b7為1

NEXT:中斷有效到中斷響應(yīng)延遲時(shí)間較長(zhǎng),采用該方法檢測(cè)同一個(gè)I/O口不同的引腳中斷輸入是否有效時(shí),輸入信號(hào)的時(shí)間不能太快,否則可能出現(xiàn)漏檢現(xiàn)象。6.2.4中斷服務(wù)程序結(jié)構(gòu)在ST匯編中,必須通過(guò)“interrupt”偽指令定義相應(yīng)中斷服務(wù)程序入口地址標(biāo)號(hào),然后在中斷入口地址表中填入對(duì)應(yīng)的中斷服務(wù)程序入口地址標(biāo)號(hào)。例如,PortA外部中斷EXTI0的中斷號(hào)為IRQ03,因此PortA口外中斷服務(wù)程序結(jié)構(gòu)如下:

InterruptEXTI0 ;中斷入口服務(wù)程序定義偽指令

EXTI0.L ;中斷入口地址標(biāo)號(hào)類型一律定

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論