新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > MCS-96系列單片機(jī)中斷優(yōu)先級的控制方法

MCS-96系列單片機(jī)中斷優(yōu)先級的控制方法

作者: 時間:2012-03-31 來源:網(wǎng)絡(luò) 收藏

1、前 言

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

在許多文獻(xiàn)[1,2,3]中,雖指出了MCS—96級可用軟件的加以改變這一事實,但并未對此作必要深入的闡述。事實上,該系統(tǒng)頗具特色,其級的極具靈活性,用戶可采用軟、硬件結(jié)合的隨心所欲地安排各類中斷源的級。

2、MCS—96中斷

優(yōu)先級結(jié)構(gòu)的特點

MCS—96系列單片機(jī)中斷系統(tǒng)的硬件優(yōu)先級排隊電路為各類中斷源規(guī)定了優(yōu)先級順序。這種中斷優(yōu)先級的結(jié)構(gòu)有如下特點。

(1)硬件排隊電路并不能保證各中斷源的優(yōu)先級。這是因為在某個中斷源的中斷請求被CPU響應(yīng)后,INT-PENDING 中的相應(yīng)位即被清零,這意味著正在被服務(wù)的中斷源不能參加有新的中斷請求后的優(yōu)先權(quán)比較,倘未采取一定措施,就會造成級別高的中斷服務(wù)被級別較低的中斷申請所打斷的后果。譬如外中斷(優(yōu)先級最高)和定時器溢出中斷(優(yōu)先級最低)同時產(chǎn)生,在系統(tǒng)已開放中斷的情況下,外中斷的申請將首先被CPU所響應(yīng),進(jìn)入其中斷服務(wù)程序后,定時器溢出的中斷申請又被優(yōu)先權(quán)編碼電路加以比較,由于INT-PRNDING中對應(yīng)外中斷的位已被清零,這時參與優(yōu)先級比較的僅有定時器溢出中斷,因而外中斷的服務(wù)過程被打斷,CPU轉(zhuǎn)向定時器溢出的中斷服務(wù)程序,直到服務(wù)完畢后,才返回為外中斷繼續(xù)服務(wù)。不難看出,在多個中斷源提出中斷申請的情況下,事實上最先得到完整服務(wù)的將是級別最低的中斷源,級別最高的中斷服務(wù)反而要等到最后才可完成。這也意味著最高級別的中斷源實質(zhì)上變成了最低級別。

(2)可采用軟、硬件結(jié)合的實現(xiàn)特定的優(yōu)先級別順序。雖然如上所述,硬件排隊電路不能保證按指定優(yōu)先級的高低順序?qū)崿F(xiàn)中斷嵌套,但可采取一定的軟件措施來實現(xiàn)設(shè)計人員所預(yù)想的優(yōu)先級排隊順序。

3、實現(xiàn)預(yù)定的優(yōu)先級排隊

順序的軟件措施

為實現(xiàn)特定的中斷優(yōu)先級順序,需在軟件上采取相應(yīng)的措施,下面分四種情況予以討論。

3.1 實現(xiàn)硬件規(guī)定的優(yōu)先級順序

硬件電路規(guī)定了8種中斷源的優(yōu)先級順序,即外中斷的優(yōu)先級最高,串行口中斷次之,……,而定時器溢出中斷的級別最低。實現(xiàn)硬件所規(guī)定的這種優(yōu)先級有兩種含義:一是在多個中斷源提出中斷申請時,CPU優(yōu)先響應(yīng)級別最高的請求;二是高級別的申請可打斷低級別的服務(wù)過程,但反之不可,其具體做法如下:

(1)首先在主程序中設(shè)置INT—MASK,執(zhí)行指令LDB INT—MASK,#0FFH,使其內(nèi)容為全1,以開放全部的中斷,使任一中斷源或多個中斷源提出中斷申請時,CPU全部予以響應(yīng)。

(2)在每一中斷服務(wù)程序的開始便執(zhí)行DI或PUSHF指令,以禁止所有的中斷,而后將INT-MASK中優(yōu)先級低于本次中斷的所有位清零,而高于本次中斷的所有位置1,再執(zhí)行EI指令開放中斷。如此做之后,在該中斷服務(wù)程序執(zhí)行的過程中,低級別的中斷不可能實現(xiàn)中斷嵌套而高級別的中斷則可以。在中斷服務(wù)程序的結(jié)尾處,應(yīng)再次將INT-MASK置為FFH,以使CPU在中斷返回后能再次響應(yīng)任何中斷。這樣就保證了硬件所規(guī)定的優(yōu)先權(quán)順序。

下面是采用上述方法的HSO中斷服務(wù)程序的開始和結(jié)束處所需使用的指令示例。
  INT-SHO:PUSHF
       LDB INT-MASK,#0F0H
       EI
       .
       .
       .
       POPF
       RET

PUSHF指令的作用是保護(hù)PSW的內(nèi)容并關(guān)總中斷開關(guān);由于HSO事件中斷對應(yīng)INT-MASK中的D3位,因此LDB INT-MASK,#0F0H指令的作用是只允許高于HSO事件的中斷;POPF的指令是恢復(fù)PSW,這樣也使INT-MASK=0FFH,因為在主程序中原已將FFH送入該寄存器。

3.2 不允許任何中斷打斷正在

運(yùn)行的中斷服務(wù)程序

做法比較簡單,在進(jìn)入中斷服務(wù)程序后便關(guān)中斷(使PSW.9=0),直至中斷服務(wù)程序結(jié)束時才開中斷。程序示例如下:
  INTSUB:PUSHF(或DI)
      .
      .
      .
      POPF(或EI)
      RET

PUSHF使PSW.9=0,從而禁止了所有中斷。在中斷服務(wù)程序的運(yùn)行過程中不準(zhǔn)開放中斷,直到程序結(jié)束。這樣就保證了任何中斷申請都不能打斷正在進(jìn)行的服務(wù)過程。

3.3 使任意的中斷源成為最高級別

這是指用戶安排特定的中斷源的中斷申請能夠打斷任何中斷服務(wù)程序而實現(xiàn)中斷嵌套,保證在任何情況下這一指定的中斷源都能得到優(yōu)先的服務(wù)。具體做法是在每一中斷服務(wù)程序的開始先關(guān)總中斷,而后設(shè)置INT-MASK,只開放設(shè)定為最高級別的中斷。

假設(shè)指定A/D轉(zhuǎn)換結(jié)束中斷能夠中斷任何服務(wù)過程,則外中斷的中斷服務(wù)程序設(shè)計如下:
  EXTINT:PUSHF  ??;關(guān)總中斷
      LDB INT_MASK, # 02H ;只允許A/D轉(zhuǎn)換結(jié)束中斷
      EI       ;開中斷
      .
      .
      .
      POPF
      RET


上一頁 1 2 下一頁

評論


相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉