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