日B视频 亚洲,啪啪啪网站一区二区,91色情精品久久,日日噜狠狠色综合久,超碰人妻少妇97在线,999青青视频,亚洲一区二卡,让本一区二区视频,日韩网站推荐

您好,歡迎來電子發(fā)燒友網(wǎng)! ,新用戶?[免費(fèi)注冊]

當(dāng)前位置:電子發(fā)燒友網(wǎng) > 圖書頻道 > 電子 > 《微計(jì)算機(jī)原理》 > 第6章 中斷與DMA

第2節(jié) 中斷及中斷系統(tǒng)

                                                                                                      第二節(jié) 中斷及中斷系統(tǒng)

2.1 中斷的概念 
1、 中斷與中斷系統(tǒng)

  "中斷(Interrupt)"是一種操作,它使CPU中止正在執(zhí)行的程序,而轉(zhuǎn)入稱為"中斷處理程序(Interrupt Handler)"(或稱中斷服務(wù)程序Interrupt Service,或稱中斷例程Interrupt Routine)的程序。當(dāng)中斷處理程序執(zhí)行完后,CPU接著執(zhí)行被中斷的程序(相對于中斷處理程序來說,被中斷的程序稱為主程序)。

  為了實(shí)現(xiàn)中斷功能而設(shè)置的硬件和軟件系統(tǒng)稱為中斷系統(tǒng)。

2、 中斷源

  引起中斷的原因或發(fā)出中斷請求的來源,稱為中斷源,通常中斷源有以下幾種:
 ?。?) 通用的I/O設(shè)備。如鍵盤、打印機(jī)等。
 ?。?) 數(shù)據(jù)通道中斷源。如磁盤、磁帶、光盤等設(shè)備。
 ?。?) 實(shí)時(shí)時(shí)種(RTC)。
 ?。?) 故障源。如電源掉電、存儲(chǔ)器出錯(cuò)、運(yùn)算溢出等。
 ?。?) 軟件設(shè)置的中斷源。如中斷指令I(lǐng)NT產(chǎn)生的中斷。
  (6) 為調(diào)試程序而設(shè)置的中斷源。如斷點(diǎn)中斷、單步中斷。

  根據(jù)中斷源的性質(zhì),可以分為硬件中斷和軟件中斷。硬件中斷源產(chǎn)生一個(gè)硬件請求信號(hào),該信號(hào)連接到CPU的INTR或NMI引腳,使CPU執(zhí)行中斷處理。硬件中斷又稱為外部中斷。軟件中斷源是CPU根據(jù)指令(如INT指令)或內(nèi)部狀態(tài)(如運(yùn)算溢出、單步標(biāo)志TF)產(chǎn)生的中斷又稱為內(nèi)部中斷。

3、 中斷的用途

?。?) 并行操作。有了中斷功能后,CPU可以與多個(gè)外設(shè)并行工作。
  CPU在啟動(dòng)某外設(shè)后,不必等待該外設(shè),而可以繼續(xù)執(zhí)行主程序,這樣,CPU與外設(shè)并行工作。如果CPU在主程序中啟動(dòng)了另一個(gè)外設(shè),則CPU與多個(gè)外設(shè)并行工作。
  當(dāng)某外設(shè)準(zhǔn)備好后,主動(dòng)向CPU發(fā)出中斷請求,CPU在中斷處理程序中對該外設(shè)進(jìn)行處理。中斷處理執(zhí)行完后,CPU又返回主程序執(zhí)行。
 (2) 實(shí)時(shí)處理。
  實(shí)時(shí)處理即及時(shí)處理(在規(guī)定的時(shí)間內(nèi)處理)。有了中斷功能后,當(dāng)外設(shè)需要CPU處理時(shí),向CPU發(fā)出中斷請求,CPU立即響應(yīng)中斷,使該請求被立即處理,提高了系統(tǒng)的實(shí)時(shí)性。
  在程序查詢方式下,不能保證實(shí)時(shí)性。因?yàn)?,?dāng)某外設(shè)需要處理時(shí),CPU可能正在查詢其它外設(shè)。
?。?) 故障處理。
  系統(tǒng)設(shè)計(jì)人員把系統(tǒng)中可能出現(xiàn)的故障的處理程序設(shè)計(jì)為中斷處理程序,當(dāng)出現(xiàn)故障時(shí),CPU自動(dòng)轉(zhuǎn)入相應(yīng)的中斷處理程序,對該故障進(jìn)行處理,而不需要報(bào)告工作人員。

2.2 中斷處理過程 

二、 中斷處理過程

 六步:中斷請求、中斷響應(yīng)、保護(hù)斷點(diǎn)和現(xiàn)場、執(zhí)行中斷處理程序、恢復(fù)斷點(diǎn)和現(xiàn)場、中斷返回。



中斷處理過程是硬件和軟件相結(jié)合的過程,中斷處理程序是軟件,其余過程均為硬件動(dòng)作。

1、 CPU響應(yīng)中斷的條件

(1) 請求觸發(fā)器和屏蔽觸發(fā)器。
  中斷請求信號(hào)必須一直有效,直到CPU響應(yīng)中斷后才能清除,對于每一個(gè)中斷源,一般用一個(gè)"請求觸發(fā)器"來保存外設(shè)的中斷請求。
  在多個(gè)中斷源請求中斷的情況下,為了增加控制的靈活性,在每個(gè)外設(shè)的接口電路中,設(shè)置一個(gè)"中斷屏蔽觸發(fā)器"。只有該觸發(fā)器為1時(shí),外設(shè)的中斷請求才會(huì)被送到CPU。

具有中斷請求觸發(fā)器和屏蔽觸發(fā)器的接口電路如圖:



注意:
  ① 中斷請求信號(hào)只能保持到CPU響應(yīng)中斷,CPU響應(yīng)中斷后必須清除請求信號(hào)??梢杂肅PU的響應(yīng)信號(hào) 清除中斷請求信號(hào),或在中斷處理程序中用軟件清除中斷請求信號(hào)。上圖中,在中斷處理程序中用指令:
    IN AL,ADD_DATA
清除中斷請求信號(hào).
  ② 上圖中,中斷屏蔽觸發(fā)器為1時(shí),外設(shè)的中斷請求才會(huì)被送到CPU。
在主程序中,用指令:
  MOV AL,01H
  OUT ADD_EN,AL
使中斷屏蔽觸發(fā)器為1。
  在某些中斷控制邏輯中(如中斷控制器Intel 8259A),中斷屏蔽觸發(fā)器為0時(shí),外設(shè)的中斷請求才會(huì)被送到CPU。

(2) CPU允許中斷
  當(dāng)CPU標(biāo)志寄存器中"中斷允許標(biāo)志IF"置1時(shí),CPU才能響應(yīng)INTR信號(hào)線上的請求。否則,即使INTR上有請求,CPU也不響應(yīng)。
  指令STI使IF=1,允許CPU響應(yīng)INTR請求,稱為"開中斷"。
  指令CLI使IF=0,禁止CPU響應(yīng)INTR請求,稱為"關(guān)中斷"。
  注意:NMI上的中斷請求不受IF標(biāo)志的影響,當(dāng)NMI上出現(xiàn)請求時(shí),無論IF的值是什么,CPU均要響應(yīng)NMI上的請求。
(3)在當(dāng)前指令結(jié)束后,CPU響應(yīng)中斷。(執(zhí)行一條指令所需要的時(shí)間,稱為一個(gè)指令周期。一條指令一般包含幾個(gè)基本操作,稱為總線操作或總線通訊。一次總線操作所需的時(shí)間稱為總線周期或機(jī)器周期。8086的基本總線周期由4個(gè)T狀態(tài)組成:T1、T2、T3、T4)。即CPU在最后一個(gè)機(jī)器周期的最后一個(gè)T狀態(tài)時(shí),可以響應(yīng)中斷請求。


2、 CPU對中斷的響應(yīng)

當(dāng)滿足上述條件后,CPU響應(yīng)中斷,執(zhí)行以下任務(wù):
(1) 發(fā)出中斷響應(yīng)信號(hào)INTA(目的:獲得中斷類型碼)。
(2) 把標(biāo)志寄存器的值存入堆棧。
(3) 關(guān)中斷(使標(biāo)志寄存器中IF=0。目的:禁止CPU響應(yīng)新的中斷請求)。同時(shí)使TF=0,禁止單步執(zhí)行中斷處理程序。
(4) 保護(hù)斷點(diǎn)。即把下一條指令的地址(等于當(dāng)前CS和IP的值)存入堆棧。(目的:中斷處理完后能接著該指令執(zhí)行)。
(5) 根據(jù)中斷類型碼,從中斷向量表中獲得中斷處理程序的入口地址。
(6) 保護(hù)現(xiàn)場。(用PUSH指令把中斷處理程序中要改變值的寄存器的值存入堆棧)。
(7) 執(zhí)行中斷處理。
(8) 恢復(fù)現(xiàn)場。(用POP指令從堆棧中恢復(fù)中斷處理程序中改變值的寄存器的值)。
(9) 開中斷(用STI指令使IF=1)。
(10) 中斷返回(執(zhí)行IRET指令,從堆棧中取出下一條指令的地址送CS和IP,從堆棧中取出標(biāo)志寄存器的值,CPU接著該指令執(zhí)行)。
注意:
?、?第(1)~(5)步是CPU的硬件動(dòng)作。第(6)~(10)步屬于中斷處理程序軟件。
?、?中斷處理程序中,開中斷的時(shí)機(jī)取決于具體應(yīng)用。如果該中斷處理程序執(zhí)行期間,不允許CPU響應(yīng)其它中斷,則在中斷返回前開中斷(如上述順序),否則在保護(hù)現(xiàn)場后就開中斷。

2.3 中斷的優(yōu)先權(quán)

三、 中斷的優(yōu)先權(quán)(優(yōu)先級(jí))

 多個(gè)設(shè)備使用中斷方式與CPU交換數(shù)據(jù)時(shí),需解決優(yōu)先級(jí)問題。CPU對中斷的優(yōu)先權(quán)處理的一般原則是:
 ?。?) 不同級(jí)的中斷請求同時(shí)發(fā)生時(shí),先處理優(yōu)先級(jí)高的請求。
 ?。?) 當(dāng)CPU正在處理低優(yōu)先級(jí)中斷的過程中,又出現(xiàn)優(yōu)先級(jí)高的請求,則CPU暫停低優(yōu)先級(jí)中斷的處理, 而優(yōu)先處理高優(yōu)先級(jí)的中斷,當(dāng)高優(yōu)先級(jí)中斷處理完后,再接著處理低優(yōu)先級(jí)中斷。這種情況稱為"多重中斷"或"中斷嵌套"。
 ?。?) 當(dāng)CPU正在處理某優(yōu)先級(jí)中斷的過程中,出現(xiàn)優(yōu)先級(jí)低的請求,則CPU在處理完該中斷后再響應(yīng)新的請求。
 ?。?) 中斷優(yōu)先級(jí)相同的請求同時(shí)發(fā)生時(shí),按預(yù)先規(guī)定的次序逐個(gè)處理。

CPU處理中斷優(yōu)先級(jí)的方法:
     
 
  1.軟件查詢方式  軟件查詢方式要借助簡單的硬件電路。把多個(gè)設(shè)備的中斷請求信號(hào)相"或"作為向CPU的請求信號(hào), 任意外設(shè)有中斷請求時(shí),都可以向CPU發(fā)出INTR信號(hào)。


  同時(shí),設(shè)計(jì)一個(gè)狀態(tài)寄存器,其中每一位標(biāo)識(shí)一個(gè)設(shè)備的請求情況(如,有請求時(shí),對應(yīng)位置1)。CPU在中斷處理程序中,讀入狀態(tài)寄存器的值,然后逐位檢查它們的狀態(tài)。若發(fā)現(xiàn)某位有中斷請求,就轉(zhuǎn)入相應(yīng)的中斷處理程序。


  設(shè)中斷優(yōu)先級(jí)排列為:
  電源故障>磁盤>磁帶>CRT>紙帶輸入>紙帶穿孔>鍵盤>打印機(jī)
  部分軟件編程為:
   IN AL,INT_PORT ;中斷請求狀態(tài)寄存器
   TEST AL, 80H ;電源故障(bit7)優(yōu)先級(jí)最高,先查詢
   JNZ PWZ   ;bit7=1,出現(xiàn)電源故障中斷請求,
         ;轉(zhuǎn)入相應(yīng)的中斷處理程序
   TEST AL, 40H ;bit6=1表示磁盤中斷請求
   JNZ DISK ;轉(zhuǎn)入磁盤中斷處理程序
    ┆

2、 硬件優(yōu)先級(jí)排隊(duì)電路
(1).鏈?zhǔn)脚抨?duì)電路-菊花鏈法
  在每個(gè)外設(shè)對應(yīng)的接口電路上連接一個(gè)邏輯電路,這些邏輯電路構(gòu)成一個(gè)鏈,稱為菊花鏈。


  當(dāng)某個(gè)或幾個(gè)外設(shè)請求中斷時(shí),優(yōu)先級(jí)排隊(duì)電路設(shè)置中斷(F/F),并向CPU發(fā)出INTR信號(hào)(圖中未畫出),CPU響應(yīng)中斷時(shí)發(fā)出INTA信號(hào)。INTA信號(hào)只能傳送到排隊(duì)電路的前面,因此排隊(duì)電路前面的外設(shè)獲得允許信號(hào)(圖中的中斷輸出),送出中斷類型碼。
  排隊(duì)電路后面的外設(shè)收不到INTA信號(hào)。因此,接口在菊花鏈中的位置,決定了其優(yōu)先級(jí),越靠近排隊(duì)電路前面的外設(shè),優(yōu)先級(jí)越高。

(2)優(yōu)先級(jí)編碼集成芯片
  在微機(jī)中,典型地使用可編程中斷控制器Intel 8259管理多個(gè)外設(shè)的中斷請求。在中斷控制器內(nèi)部,有一個(gè)優(yōu)先權(quán)編碼排隊(duì)電路,如圖所示:

  8條中斷輸入線的任意一條請求信號(hào),經(jīng)"8到3優(yōu)先權(quán)編碼器"5產(chǎn)生三位二進(jìn)制編碼A2A1A0,優(yōu)先權(quán)最高的請求編碼為111,優(yōu)先權(quán)最低的請求編碼為000。若有多個(gè)請求線同時(shí)請求,編碼器僅輸出優(yōu)先權(quán)最高的編碼。
  當(dāng)CPU尚未處理任何中斷時(shí),"優(yōu)先權(quán)失效"信號(hào)為1,此時(shí),任意請求線有請求時(shí),均可以經(jīng)“或門7”、"與門2”、“或門3”向CPU申請中斷,且該中斷的編碼經(jīng)過CPU數(shù)據(jù)總線送至"優(yōu)先權(quán)寄存器6"。 優(yōu)先權(quán)寄存器中總是存放著當(dāng)前正在處理的中斷的編碼(B2B1B0)。
  當(dāng)出現(xiàn)新的請求時(shí),新請求的編碼A2A1A0送到比較器,只有當(dāng)新請求的優(yōu)先級(jí)A2A1A0大于正在處理的中斷的編碼B2B1B0時(shí),比較器輸出1,經(jīng)“與門1”、“或門3”向CPU申請中斷,同時(shí),新中斷的編碼經(jīng)過CPU數(shù)據(jù)總線送至“優(yōu)先權(quán)寄存器6”。
 

?
定西市| 林州市| 九台市| 丹凤县| 晋宁县| 新源县| 五常市| 衡山县| 台江县| 旬阳县| 绵阳市| 芦山县| 衡南县| 绩溪县| 府谷县| 措美县| 湘潭县| 沂源县| 大名县| 河源市| 怀远县| 大理市| 休宁县| 嘉禾县| 罗平县| 石泉县| 黄大仙区| 修武县| 固始县| 宜君县| 祥云县| 河北区| 昌江| 屏东县| 乃东县| 自治县| 惠来县| 左云县| 大余县| 辽阳县| 武强县|