預(yù)處理階段測試設(shè)備狀態(tài);向DMA控制器的設(shè)備地址寄存器中送入設(shè)備號,并啟動設(shè)備;向主存地址計數(shù)器中送入欲交換數(shù)據(jù)的主存起始地址;向字計數(shù)器中送入欲交換的數(shù)據(jù)個數(shù) 。
外部設(shè)備準(zhǔn)備好發(fā)送的數(shù)據(jù)(輸入)或上次接收的數(shù)據(jù)已處理完畢(輸出)時,將通知DMA控制器發(fā)出DMA請求,申請主存總線。數(shù)據(jù)傳送輸入操作 ①.首先從外部設(shè)備讀入一個字(設(shè)每字16位)到DMA數(shù)據(jù)緩沖寄存器IODR中(如果設(shè)備是面向字節(jié)的,一次讀入一個字節(jié),需要將兩個字節(jié)裝配成一個字)。②.外部設(shè)備發(fā)選通脈沖,使DMA控制器中的DMA請求標(biāo)志觸發(fā)器置“1”。③.DMA控制器向CPU發(fā)出總線請求信號(HOLD)。④.CPU在完成了現(xiàn)行機器周期后,即響應(yīng)DMA請求,發(fā)出總線允許信號(HLDA),并由DMA控制器發(fā)出DMA響應(yīng)信號,使DMA請求標(biāo)記觸發(fā)器復(fù)位。此時,由DMA控制器接管系統(tǒng)總線。
⑤.將DMA控制器中主存地址寄存器中的主存地址送地址總線,⑥.將DMA數(shù)據(jù)緩沖寄存器中的內(nèi)容送數(shù)據(jù)總線。⑦.在讀/寫控制信號線上發(fā)出寫命令。⑧.將DMA地址寄存器的內(nèi)容加1,從而得到下一個地址,字計數(shù)器減1。⑨.判斷字計數(shù)器的值是否為“0”。若不為“0”,說明數(shù)據(jù)塊沒有傳送完畢,返回⑤,傳送下一個數(shù)據(jù);若為“0”,說明數(shù)據(jù)塊已經(jīng)傳送完畢,則向CPU申請中斷處理。輸出操作①.當(dāng)DMA數(shù)據(jù)緩沖寄存器已將輸出數(shù)據(jù)送至I/O設(shè)備后,表示數(shù)據(jù)緩沖寄存器為“空”;②.外部設(shè)備發(fā)選通脈沖,使DMA控制器中的DMA請求標(biāo)志觸發(fā)器置“1”;③.DMA控制器向CPU發(fā)出總線請求信號(HOLD);④.CPU在完成了現(xiàn)行機器周期后,即響應(yīng)DMA請求,發(fā)出總線允許信號(HLDA),并由DMA控制器發(fā)出DMA響應(yīng)信號,使DMA請求標(biāo)記觸發(fā)器復(fù)位。此時,由DMA控制器接管系統(tǒng)總線;⑤.將DMA控制器中主存地址寄存器中的主存地址送地址總線,在讀/寫控制信號線上發(fā)出讀命令;⑥.主存將相應(yīng)地址單元的內(nèi)容通過數(shù)據(jù)總線讀入到DMA數(shù)據(jù)緩沖寄存器中;⑦.將DMA數(shù)據(jù)緩沖寄存器的內(nèi)容送到輸出設(shè)備;⑧.將DMA地址寄存器的內(nèi)容加1,從而得到下一個地址,字計數(shù)器減1;⑨.判斷字計數(shù)器的值是否為“0”。若不為“0”,說明數(shù)據(jù)塊沒有傳送完畢,返回到⑤,傳送下一個數(shù)據(jù);若為“0”,說明數(shù)據(jù)塊已經(jīng)傳送完畢,則向CPU申請中斷處理。
傳送后處理校驗送入主存的數(shù)據(jù)是否正確。決定是否繼續(xù)用DMA傳送其他數(shù)據(jù)塊。測試在傳送過程中是否發(fā)生錯誤。
原理一個設(shè)備接口試圖通過總線直接向另一個設(shè)備發(fā)送數(shù)據(jù)(一般是大批量的數(shù)據(jù)),它會先向CPU發(fā)送DMA請求信號。外設(shè)通過DMA的一種專門接口電路――DMA控制器(DMAC),向CPU提出接管總線控制權(quán)的總線請求,CPU收到該信號后,在當(dāng)前的總線周期結(jié)束后,會按DMA信號的優(yōu)先級和提出DMA請求的先后順序響應(yīng)DMA信號。CPU對某個設(shè)備接口響應(yīng)DMA請求時,會讓出總線控制權(quán)。于是在DMA控制器的管理下,外設(shè)和存儲器直接進(jìn)行數(shù)據(jù)交換,而不需CPU干預(yù)。數(shù)據(jù)傳送完畢后,設(shè)備接口會向CPU發(fā)送DMA結(jié)束信號,交還總線控制權(quán)。
中斷處理過程基本上由3部分組成,第一部分為準(zhǔn)備部分,其基本功能是保護現(xiàn)場,對于非向量中斷方式則需要確定中斷源,最后開放中斷,允許更高級的中斷請求打斷低級的中斷服務(wù)程序;第二部分為處理部分,即真正執(zhí)行具體的為某個中斷源服務(wù)的中斷服務(wù)程序;第三部分為結(jié)尾部分,首先要關(guān)中斷,以防止在恢復(fù)現(xiàn)場過程中被新的中斷請求打斷,接著恢復(fù)現(xiàn)場,然后開放中斷,以便返回原來的程序后可響應(yīng)其他的中斷請求。中斷服務(wù)程序的最后一條指令一定是中斷返回指令。