專(zhuān)利名稱(chēng):一種直接存儲(chǔ)器訪問(wèn)控制器及其控制方法
技術(shù)領(lǐng)域:
本發(fā)明涉及計(jì)算機(jī)技術(shù)中微處理器系統(tǒng),尤其涉及信號(hào)、數(shù)據(jù)在存儲(chǔ)器、輸入/輸出設(shè)備或者中央處理器之間的傳送,具體的說(shuō),涉及直接存儲(chǔ)器訪問(wèn)控制器DMA(Direct Memory Access)及其控制方法。
傳統(tǒng)的DMA控制器一般采用兩種傳輸方式。一種是直接方式,即CPU把一個(gè)DMA傳輸命令(包括源地址、目的地址、數(shù)據(jù)量、控制字)寫(xiě)入DMA控制器的內(nèi)部寄存器,DMA控制器根據(jù)這個(gè)DMA傳輸命令控制總線(xiàn)完成數(shù)據(jù)傳輸任務(wù)。另一種是鏈?zhǔn)椒绞?,在鏈?zhǔn)椒绞较?,CPU把DMA的命令描述符和DMA傳輸命令放在存儲(chǔ)器內(nèi),該命令描述符指明了對(duì)應(yīng)DMA命令在存儲(chǔ)器中的地址、下一個(gè)命令描述符在存儲(chǔ)器中的地址以及控制信息。DMA控制器根據(jù)CPU寫(xiě)入其內(nèi)部寄存器中第一個(gè)命令描述符從存儲(chǔ)器中讀入傳輸命令和下一個(gè)描述符,開(kāi)始數(shù)據(jù)傳輸。一個(gè)命令傳輸完成后,DMA控制器讀入新的傳輸命令和新的命令描述符,再執(zhí)行新的傳輸命令;直到命令鏈上所有的傳輸命令執(zhí)行完成為止,該過(guò)程結(jié)束。由上述兩種傳輸方式的比較可知,直接方式控制簡(jiǎn)單,但是很難處理數(shù)據(jù)在非連續(xù)空間傳輸?shù)那闆r,它中斷的次數(shù)比鏈?zhǔn)侥J揭?,從而增加了CPU的時(shí)間開(kāi)銷(xiāo);鏈?zhǔn)椒绞诫m然方便處理多個(gè)命令的情況,但控制復(fù)雜,使用不方便。在高速數(shù)據(jù)傳輸過(guò)程中,為避免丟失數(shù)據(jù),要求DMA控制器的命令間隔不能超過(guò)實(shí)際數(shù)據(jù)傳輸需要的最長(zhǎng)時(shí)間間隔。在直接方式下,因?yàn)镈MA控制器執(zhí)行新的命令需要插入CPU中斷響應(yīng)時(shí)間,所以在高速數(shù)據(jù)傳輸中容易丟失數(shù)據(jù);而在鏈?zhǔn)侥J较拢m然可以不插入CPU中斷響應(yīng)時(shí)間,但仍然要從存儲(chǔ)器中讀取描述符和DMA命令,如果考慮到讀取存儲(chǔ)器的延時(shí)在高速傳輸中仍然面臨丟失數(shù)據(jù)的危險(xiǎn)。
本發(fā)明的目的在于提出一種DMA控制器及其控制方法,能方便地處理數(shù)據(jù)在非連續(xù)空間傳輸?shù)那闆r,并能避免在高速數(shù)據(jù)傳輸中丟失數(shù)據(jù),既實(shí)現(xiàn)鏈?zhǔn)焦ぷ髂J降墓δ埽趾?jiǎn)化鏈?zhǔn)焦ぷ髂J降脑O(shè)計(jì)復(fù)雜度。
本發(fā)明公開(kāi)的一種直接存儲(chǔ)器訪問(wèn)控制器DMA(Direct MemoryAccess),包括傳輸數(shù)據(jù)用的DBUS地址總線(xiàn)和數(shù)據(jù)總線(xiàn),暫存數(shù)據(jù)FIFO單元,使DMA控制器可以作為從設(shè)備被CPU訪問(wèn)的讀寫(xiě)控制邏輯單元和控制DMA命令執(zhí)行的控制執(zhí)行部件;還包括可存放兩個(gè)以上命令的兩個(gè)以上命令寄存器組,每組命令寄存器包括控制寄存器CR、數(shù)據(jù)量寄存器WCR、目的地址寄存器DAR和源地址寄存器SAR;所述命令寄存器組順序相聯(lián),且第一命令寄存器組與所述控制執(zhí)行部件相聯(lián),該控制執(zhí)行部件與暫存數(shù)據(jù)的數(shù)據(jù)FIFO相聯(lián),該控制執(zhí)行部件及暫存數(shù)據(jù)的數(shù)據(jù)FIFO還連接所述數(shù)據(jù)總線(xiàn);最后一個(gè)命令寄存器組與所述讀寫(xiě)控制邏輯單元相聯(lián),該讀寫(xiě)控制邏輯單元的地址譯碼使CPU可以通過(guò)數(shù)據(jù)總線(xiàn)CBUS訪問(wèn)每一個(gè)命令寄存器組。
本發(fā)明公開(kāi)的一種直接存儲(chǔ)器訪問(wèn)控制器DMA(Direct Memory Access)的控制方法,包括下述步驟①CPU把兩個(gè)以上包括源地址、目的地址、數(shù)據(jù)量和控制字的DMA傳輸命令分別寫(xiě)入DMA控制器的兩個(gè)以上內(nèi)部寄存器組;②DMA控制器接收到數(shù)據(jù)傳輸請(qǐng)求后,根據(jù)第一命令寄存器組中的DMA傳輸命令控制總線(xiàn)完成數(shù)據(jù)傳輸任務(wù),并使第一命令寄存器組中數(shù)據(jù)量寄存器WCR0的值為0;③如果此時(shí)其它命令寄存器組非空即其相應(yīng)數(shù)據(jù)量寄存器WCR1、WCR2、…有一個(gè)不為0,則控制執(zhí)行部件發(fā)出一個(gè)命令前移信號(hào)并完成下述動(dòng)作第二命令寄存器組中的命令前移到第一命令寄存器組中;第三命令寄存器組中的命令前移到第二命令寄存器組中,如此順序前移;④如果在命令前移時(shí)存在CPU寫(xiě)最后一個(gè)命令寄存器組的請(qǐng)求,則該命令寄存器組接受CPU寫(xiě)入的新值,否則該命令寄存器組裝入一個(gè)空命令即相應(yīng)數(shù)據(jù)量寄存器WCR裝入0;⑤重復(fù)上述步驟①②③④,完成全部命令寄存器組中所有的數(shù)據(jù)傳輸,此時(shí)命令隊(duì)列為空,即各個(gè)數(shù)據(jù)量寄存器WCR全為0。
本發(fā)明由于采用命令隊(duì)列方式進(jìn)行數(shù)據(jù)傳輸,把數(shù)據(jù)傳輸?shù)腄MA命令寫(xiě)在DMA控制器里的多個(gè)寄存器組中,因此,可以方便的完成非連續(xù)空間的數(shù)據(jù)傳輸。同時(shí)由于多個(gè)DMA命令位于DMA控制器的命令隊(duì)列中,用戶(hù)設(shè)置命令時(shí)不必考慮鏈?zhǔn)侥J街械拿枋龇?,也不必把DMA命令放在存儲(chǔ)器中,既簡(jiǎn)化了設(shè)計(jì)復(fù)雜度,又提高了命令切換速度(只需一兩個(gè)時(shí)鐘周期就可以完成命令切換),避免了讀取命令延時(shí)導(dǎo)致的丟失數(shù)據(jù)的危險(xiǎn)。本發(fā)明綜合了直接方式和鏈?zhǔn)椒绞絻煞矫娴膬?yōu)點(diǎn),控制簡(jiǎn)單。
下面結(jié)合附圖對(duì)本發(fā)明作進(jìn)一步詳細(xì)說(shuō)明
圖1是DMA控制器工作原理示意圖。
圖2是DMA控制器命令隊(duì)列電路結(jié)構(gòu)示意圖。
圖1中虛框內(nèi)是本發(fā)明DMA控制器的命令隊(duì)列的一個(gè)例子,該命令隊(duì)列共可存放三個(gè)命令,圖2是命令隊(duì)列電路結(jié)構(gòu)示意圖。三個(gè)DMA命令分別存放在103、104、105三組命令寄存器中。每組命令寄存器包括四個(gè)寄存器,即控制寄存器、數(shù)據(jù)量寄存器、目的地址寄存器、源地址寄存器。第一命令寄存器組103對(duì)應(yīng)的四個(gè)寄存器是控制寄存器CR0 201、數(shù)據(jù)量寄存器WCR0 207、目的地址寄存器DAR0 212、源地址寄存器SAR0 219;第二命令寄存器組104對(duì)應(yīng)的四個(gè)寄存器是控制寄存器CR1 203、數(shù)據(jù)量寄存器WCR1 209、目的地址寄存器DAR1 214、源地址寄存器SAR1 221;第三命令寄存器組105對(duì)應(yīng)的四個(gè)寄存器是控制寄存器CR2 205、數(shù)據(jù)量寄存器WCR2 211、目的地址寄存器DAR2 216、源地址寄存器SAR2 223。經(jīng)過(guò)讀寫(xiě)控制邏輯單元106的地址譯碼,總線(xiàn)CBUS 109可以讀寫(xiě)DMA控制器的命令隊(duì)列中的任一組命令寄存器。
DMA控制器根據(jù)命令隊(duì)列中的內(nèi)容傳輸數(shù)據(jù)時(shí)可以通過(guò)DBUS數(shù)據(jù)總線(xiàn)107先把數(shù)據(jù)從源地址讀到DMA控制器暫存數(shù)據(jù)的數(shù)據(jù)FIFO 101中,然后再把數(shù)據(jù)FIFO 101中的數(shù)據(jù)通過(guò)地址總線(xiàn)DBUS 108發(fā)送到目的地址。如果DMA控制器指向的源設(shè)備和目的設(shè)備支持總線(xiàn)數(shù)據(jù)直接交換,則數(shù)據(jù)可以不通過(guò)FIFO中轉(zhuǎn)。
DMA控制器的控制執(zhí)行部件102控制當(dāng)前DMA命令(命令寄存器組103中存放的DMA命令)的執(zhí)行,完成當(dāng)前命令定義的數(shù)據(jù)傳輸。
DMA控制器通過(guò)數(shù)據(jù)總線(xiàn)DBUS 107、地址總線(xiàn)DBUS 108進(jìn)行數(shù)據(jù)傳輸,并通過(guò)通道CBUS 109作為從設(shè)備被CPU訪問(wèn)。DMA控制器進(jìn)行數(shù)據(jù)傳輸?shù)腄BUS總線(xiàn)107、108和被CPU訪問(wèn)的通道CBUS 109可以是同一條總線(xiàn),也可以是兩條獨(dú)立的總線(xiàn)。兩者導(dǎo)致的性能差異是當(dāng)DBUS和CBUS是同一條總線(xiàn)時(shí),DMA控制器傳輸數(shù)據(jù)時(shí)不能接受CPU的訪問(wèn);而對(duì)于DBUS和CBUS不是同一條總線(xiàn)時(shí),DMA控制器在傳輸數(shù)據(jù)時(shí)可以接受CPU的訪問(wèn),即當(dāng)DMA控制器正在執(zhí)行當(dāng)前命令的時(shí)候,如果此時(shí)第三命令寄存器組105中命令已經(jīng)被前移到104或103,CPU就可以向第三命令寄存器組105中寫(xiě)入新命令,從而實(shí)現(xiàn)DMA控制器連續(xù)不斷的執(zhí)行傳輸命令的功能。下文的描述假設(shè)DBUS和CBUS是兩條不同的總線(xiàn)。
命令隊(duì)列的工作過(guò)程如下控制執(zhí)行部件102執(zhí)行第一命令寄存器組103中的當(dāng)前命令,完成后數(shù)據(jù)量寄存器WCR0為0,如果此時(shí)其它命令寄存器組104或105非空即數(shù)據(jù)量寄存器WCR1或WCR2不為0,則控制執(zhí)行部件102發(fā)出一個(gè)命令前移信號(hào)。命令隊(duì)列接收到命令前移信號(hào)后,完成下述動(dòng)作第二命令寄存器組104中的命令前移到第一命令寄存器組103中;第三命令寄存器組105中的命令前移到第二命令寄存器組104中;如果此時(shí)存在CPU寫(xiě)第三命令寄存器組105的請(qǐng)求,則第三命令寄存器組105接受CPU寫(xiě)入的新值,否則第三命令寄存器組105裝入一個(gè)空命令即WCR2裝入0,如此完成所有的數(shù)據(jù)傳輸,此時(shí)命令隊(duì)列全為空,即WCR0、WCR1、WCR2全為0。
圖2是DMA控制器命令隊(duì)列電路結(jié)構(gòu)示意圖,它更直觀的說(shuō)明了圖1的工作原理。
圖2所示命令隊(duì)列對(duì)應(yīng)圖1中三個(gè)命令寄存器組103、104、105,圖2中還包括六個(gè)二選一選擇器202、204、210、215、224、222;三個(gè)三選一選擇器208、213、220以及三個(gè)加法器206、217、218。
第一命令寄存器組103對(duì)應(yīng)的四個(gè)命令寄存器CR0 201、WCR0 207、DAR0212、SAR0 219中的數(shù)據(jù)可能來(lái)源于第二命令寄存器組104對(duì)應(yīng)的四個(gè)命令寄存器CR1 203、WCR1 209、DAR1 214、SAR1 221,也可能來(lái)源于CBUS 109(CPU訪問(wèn)DMA通道),這種選擇可以通過(guò)二選一選擇器202、三選一選擇器208、213和220來(lái)實(shí)現(xiàn)。命令前移信號(hào)產(chǎn)生的條件是WCR0為0,WCR1或WCR2非零,且DMA控制器的數(shù)據(jù)傳輸請(qǐng)求標(biāo)志有效,當(dāng)命令隊(duì)列接收到控制執(zhí)行部件102發(fā)出的命令前移信號(hào)后,第一命令寄存器組103對(duì)應(yīng)的四個(gè)命令寄存器CR0 201、WCR0 207、DAR0 212、SAR0 219選擇第二命令寄存器組104對(duì)應(yīng)的四個(gè)命令寄存器CR1 203、WCR1 209、DAR1 214、SAR1221中的值打入。數(shù)據(jù)傳輸請(qǐng)求可能來(lái)自于DMA捕捉到的其它設(shè)備向DMA控制器發(fā)出的請(qǐng)求信號(hào),也可能來(lái)自軟件對(duì)DMA控制器發(fā)出的數(shù)據(jù)傳輸請(qǐng)求;各控制寄存器CR里有相應(yīng)的位控制數(shù)據(jù)傳輸請(qǐng)求的來(lái)源,同時(shí)CR寄存器也有相應(yīng)位標(biāo)志是否存在數(shù)據(jù)傳輸請(qǐng)求。如果控制寄存器CR0選擇軟件請(qǐng)求源,并把所有CR寄存器的數(shù)據(jù)傳輸請(qǐng)求標(biāo)志位設(shè)置為有效,則DMA控制器中的傳輸命令可以連續(xù)執(zhí)行。如果控制寄存器CR0中的命令設(shè)置為非軟件請(qǐng)求,而其它CR寄存器設(shè)置為軟件請(qǐng)求且數(shù)據(jù)傳輸請(qǐng)求標(biāo)志位置為有效,則DMA控制器中的傳輸命令可以在接收到其它設(shè)備發(fā)出的數(shù)據(jù)傳輸請(qǐng)求后,DMA控制器開(kāi)始傳輸所有的命令。用戶(hù)可以通過(guò)對(duì)CR寄存器中數(shù)據(jù)傳輸請(qǐng)求源和請(qǐng)求標(biāo)志位(當(dāng)選擇軟件請(qǐng)求源時(shí))的不同設(shè)置靈活地決定DMA控制器中的傳輸命令和數(shù)據(jù)傳輸請(qǐng)求之間的對(duì)應(yīng)關(guān)系。比如,CR0設(shè)置為非軟件請(qǐng)求源(且CR0的請(qǐng)求標(biāo)志位設(shè)置為無(wú)效),CR1設(shè)置為軟件請(qǐng)求源且CR1的請(qǐng)求標(biāo)志位設(shè)置為有效,CR2設(shè)置為非軟件請(qǐng)求源(且CR2的請(qǐng)求標(biāo)志位設(shè)置為無(wú)效),則DMA控制器接收到其它設(shè)備發(fā)出的數(shù)據(jù)傳輸請(qǐng)求時(shí),將連續(xù)執(zhí)行第一個(gè)命令和第二個(gè)命令;執(zhí)行完第二個(gè)命令后,第三個(gè)命令被前移到第一組命令寄存器中,但第三個(gè)命令必須等到其它設(shè)備發(fā)出新的數(shù)據(jù)傳輸請(qǐng)求后才能執(zhí)行。
當(dāng)DMA沒(méi)有工作時(shí),如果發(fā)生了對(duì)某個(gè)寄存器組的寫(xiě),則該寄存器組選擇CBUS上的數(shù)據(jù)打入。當(dāng)DMA正在傳輸數(shù)據(jù)時(shí),此時(shí)DMA控制器每成功傳輸一個(gè)數(shù)據(jù)需要把當(dāng)前數(shù)據(jù)量寄存器WCR0 207遞減一次,遞減任務(wù)由加法器206完成。DMA控制器在傳輸數(shù)據(jù)的接受過(guò)程中,每成功接收一個(gè)數(shù)據(jù),源地址寄存器SAR0 219要遞增一次(根據(jù)需要也可以設(shè)計(jì)為遞減),遞增任務(wù)由加法器217完成。當(dāng)DMA控制器在傳輸數(shù)據(jù)的發(fā)送過(guò)程中,每發(fā)送一個(gè)數(shù)據(jù)目的地址寄存器DAR0 212要遞增一次(根據(jù)需要也可以設(shè)計(jì)為遞減),遞增任務(wù)由加法器218完成。
DMA控制器在傳輸數(shù)據(jù)的接收過(guò)程中,選擇器224選擇源地址寄存器SAR0 219的值輸出到DBUS地址總線(xiàn)108上。DMA控制器在傳輸數(shù)據(jù)的發(fā)送過(guò)程中,選擇器224選擇目的地址寄存器DAR0 212的值輸出到DBUS地址總線(xiàn)108上。
第二命令寄存器組104對(duì)應(yīng)的四個(gè)命令寄存器CR1 203、WCR1 209、DAR1214、SAR1 221的數(shù)據(jù)可能來(lái)源于第三命令寄存器組105對(duì)應(yīng)的四個(gè)命令寄存器CR2 205、WCR2 211、DAR2 216、SAR2 223,也可能來(lái)源于CBUS 109(CPU訪問(wèn)DMA的通道),這可以通過(guò)二選一選擇器204、210、215和222來(lái)實(shí)現(xiàn)。當(dāng)命令隊(duì)列接收到控制執(zhí)行部件102發(fā)出的命令前移信號(hào)后,第二命令寄存器組104對(duì)應(yīng)的四個(gè)命令寄存器CR1 203、WCR1 209、DAR1 214、SAR1 221選擇第三命令寄存器組105對(duì)應(yīng)的四個(gè)命令寄存器CR2052、WCR2211、DAR2 216、SAR2 223中的值打入。當(dāng)DMA沒(méi)有工作時(shí),如果發(fā)生了對(duì)某個(gè)寄存器組的寫(xiě),則該寄存器組選擇CBUS 109上的數(shù)據(jù)打入。
如果第一命令寄存器組的控制寄存器CR0的數(shù)據(jù)傳輸請(qǐng)求標(biāo)志有效,且寫(xiě)入其它數(shù)據(jù)量寄存器WCR的值不為0,DMA將產(chǎn)生命令前移信號(hào),命令前移后再進(jìn)行判斷;當(dāng)被寫(xiě)入其它WCR的值被前移到WCR0中,就開(kāi)始根據(jù)數(shù)據(jù)傳輸請(qǐng)求的來(lái)源判斷執(zhí)行第一命令寄存器組中的這個(gè)命令。
當(dāng)CPU寫(xiě)DMA某個(gè)命令寄存器組時(shí),則該命令寄存器組打入CBUS 109上的數(shù)據(jù)。第三命令寄存器組105對(duì)應(yīng)的四個(gè)命令寄存器CR2 205、WCR2211、DAR2 216、SAR2 223的數(shù)據(jù)來(lái)源是CBUS 109。當(dāng)命令隊(duì)列接收到命令前移信號(hào)后,如果此時(shí)沒(méi)有發(fā)生CPU寫(xiě)數(shù)據(jù)量寄存器WCR2 211的事件,則寄存器WCR2 211被清零,表示第三個(gè)命令已經(jīng)被移走。因?yàn)镈MA控制器根據(jù)數(shù)據(jù)量寄存器WCR判斷命令是否空,一旦寄存器WCR2 211被清零,則認(rèn)為對(duì)應(yīng)的命令為空,寄存器205、216、223的值不會(huì)被使用,因此在命令前移時(shí),如果沒(méi)有寫(xiě)這些寄存器的事件發(fā)生,寄存器205、216、223保持不變。
從上面的表述不難看出,采用內(nèi)置命令隊(duì)列的方式,在本例具有三個(gè)命令寄存器組的DMA控制器中,執(zhí)行命令隊(duì)列里的兩個(gè)不同命令時(shí),從一個(gè)命令轉(zhuǎn)換到另一個(gè)命令的間隔時(shí)間只需1個(gè)時(shí)鐘周期(從104到103)或兩個(gè)時(shí)鐘周期(從105到104再到103),命令切換時(shí)間被減少到可以忽略的程度,完全能夠滿(mǎn)足高速數(shù)據(jù)傳輸對(duì)命令切換時(shí)間的要求。DMA控制器命令隊(duì)列中的命令相互之間是完全獨(dú)立的,命令隊(duì)列可以靈活的設(shè)置。這種靈活性可以帶來(lái)兩個(gè)方面的好處。一是這種DMA控制器可以很方便的完成數(shù)據(jù)在不連續(xù)地址空間的傳輸,只需不同的命令完成不同地址區(qū)域的傳輸即可。第二是這種DMA控制器可以減少中斷次數(shù)。用戶(hù)在設(shè)置命令時(shí),可以屏蔽掉前面命令產(chǎn)生的中斷,只開(kāi)放最后一個(gè)命令的完成中斷,這樣多個(gè)命令的完成只會(huì)產(chǎn)生一次中斷請(qǐng)求,從而減少了CPU在處理中斷上的時(shí)間開(kāi)銷(xiāo)。從用戶(hù)的角度講,因?yàn)檫@種DMA控制器的多個(gè)命令存放在DMA控制器的內(nèi)部寄存器中,而不像DMA的鏈?zhǔn)焦ぷ髂J侥菢哟娣旁诖鎯?chǔ)器中,用戶(hù)設(shè)置命令方便多了。當(dāng)然,DMA控制器不必從存儲(chǔ)器中讀命令,DMA控制器的設(shè)計(jì)復(fù)雜度自然降低了不少。
命令寄存器組的長(zhǎng)度可以不是三個(gè)而是更多個(gè),如果命令隊(duì)列中第X命令寄存器組和第X+Y命令寄存器組設(shè)置的WCR不為0,X到X+Y之間的命令寄存器組設(shè)置的WCR都為0,那么執(zhí)行完第X命令后,要執(zhí)行第X+Y命令,需要Y+1個(gè)周期的命令切換時(shí)間。
權(quán)利要求
1.一種直接存儲(chǔ)器訪問(wèn)控制器DMA(Direct Memory Access),包括傳輸數(shù)據(jù)用的DBUS地址總線(xiàn)(108)和數(shù)據(jù)總線(xiàn)(107),暫存數(shù)據(jù)FIFO單元(101),使DMA控制器可以作為從設(shè)備被CPU訪問(wèn)的讀寫(xiě)控制邏輯單元(106)和相應(yīng)數(shù)據(jù)總線(xiàn)CBUS(109),以及可控制DMA命令執(zhí)行的控制執(zhí)行部件(102);其特征在于還包括可存放兩個(gè)以上命令的兩個(gè)以上命令寄存器組,每組命令寄存器包括控制寄存器CR、數(shù)據(jù)量寄存器WCR、目的地址寄存器DAR和源地址寄存器SAR;所述命令寄存器組順序相聯(lián),且第一命令寄存器組(103)與所述控制執(zhí)行部件(102)相聯(lián),該控制執(zhí)行部件(102)與暫存數(shù)據(jù)的數(shù)據(jù)FIFO(101)相聯(lián),該控制執(zhí)行部件(102)以及暫存數(shù)據(jù)的數(shù)據(jù)FIFO(101)連接所述數(shù)據(jù)總線(xiàn)(107、108);最后一個(gè)命令寄存器組(105)與所述讀寫(xiě)控制邏輯單元(106)相聯(lián),該讀寫(xiě)控制邏輯單元(106)的地址譯碼使CPU可以通過(guò)所述數(shù)據(jù)總線(xiàn)CBUS(109)訪問(wèn)每一個(gè)命令寄存器組。
2.根據(jù)權(quán)利要求1所述的一種直接存儲(chǔ)器訪問(wèn)控制器,其特征在于所述供DMA根據(jù)命令隊(duì)列中的命令傳輸數(shù)據(jù)時(shí)使用的數(shù)據(jù)總線(xiàn)(107、108)和供CPU訪問(wèn)DMA使用的數(shù)據(jù)總線(xiàn)(109)是同一總線(xiàn)。
3.根據(jù)權(quán)利要求1所述的一種直接存儲(chǔ)器訪問(wèn)控制器,其特征在于所述可存放兩個(gè)以上命令的兩個(gè)以上命令寄存器組是三個(gè)命令寄存器組。
4.根據(jù)權(quán)利要求3所述的一種直接存儲(chǔ)器訪問(wèn)控制器,其特征在于所述三個(gè)命令寄存器組的具體結(jié)構(gòu)中還包括六個(gè)二選一選擇器(202、204、210、215、224、222)、三個(gè)三選一選擇器(208、213、220)以及三個(gè)加法器(206、217、218);第三寄存器組和第二寄存器組的各個(gè)寄存器之間以及第二寄存器組和第一寄存器組的控制寄存器CR1(203)、CR0(201)之間分別經(jīng)過(guò)一個(gè)二選一選擇器相聯(lián);第二寄存器組和第一寄存器組的數(shù)據(jù)量寄存器WCR1(209)、WCR0(207)之間、目的地址寄存器DAR1(214)、DAR0(212)之間和源地址寄存器SAR1(221)、SAR0(219)之間分別經(jīng)過(guò)一個(gè)三選一選擇(208、213、220)相聯(lián);第一寄存器組的目的地址寄存器DAR0和源地址寄存器SAR0共同經(jīng)過(guò)第一二選一選擇器(224)與所述數(shù)據(jù)總線(xiàn)DBUS(107、108)相聯(lián);第一命令寄存器組(103)對(duì)應(yīng)的數(shù)據(jù)量寄存器WCR0、目的地址寄存器DAR0和源地址寄存器SAR0分別經(jīng)過(guò)一個(gè)加法器(206、217、218)連接其與第二命令寄存器組之間的三選一選擇器;所述供CPU訪問(wèn)DMA使用的數(shù)據(jù)總線(xiàn)CBUS(109)與第三命令寄存器組的各個(gè)寄存器以及除第一二選一選擇器(224)以外的全部二選一選擇器和三選一選擇器分別相聯(lián)。
5.一種直接存儲(chǔ)器訪問(wèn)控制器DMA(Direct Memory Access)的控制方法,其特征在于包括下述步驟①CPU把兩個(gè)以上包括源地址、目的地址、數(shù)據(jù)量和控制字的DMA傳輸命令分別寫(xiě)入DMA控制器的兩個(gè)以上內(nèi)部寄存器組;②DMA控制器接收到數(shù)據(jù)傳輸請(qǐng)求后,根據(jù)第一命令寄存器組(103)中的DMA傳輸命令控制總線(xiàn)完成數(shù)據(jù)傳輸任務(wù),并使第一命令寄存器組(103)中數(shù)據(jù)量寄存器WCR0(207)的值為0;③如果此時(shí)其它命令寄存器組非空即其相應(yīng)數(shù)據(jù)量寄存器WCR1、WCR2、…有一個(gè)不為0,則控制執(zhí)行部件(102)發(fā)出一個(gè)命令前移信號(hào)并完成下述動(dòng)作第二命令寄存器組(104)中的命令前移到第一命令寄存器組(103)中;第三命令寄存器組(105)中的命令前移到第二命令寄存器組(104)中,如此順序前移;④如果在命令前移時(shí)存在CPU寫(xiě)最后一個(gè)命令寄存器組的請(qǐng)求,則該命令寄存器組接受CPU寫(xiě)入的新值,否則該命令寄存器組裝入一個(gè)空命令即其相應(yīng)數(shù)據(jù)量寄存器WCR裝入0;⑤重復(fù)上述步驟①②③④,完成全部命令寄存器組中所有的數(shù)據(jù)傳輸,此時(shí)命令隊(duì)列為空,即各個(gè)數(shù)據(jù)量寄存器WCR全為0。
6.根據(jù)權(quán)利要求5所述的一種直接存儲(chǔ)器訪問(wèn)控制DMA的控制方法,其特征在于用戶(hù)通過(guò)設(shè)置各命令寄存器組中控制寄存器CR0、CR1、CR2、…中的數(shù)據(jù)傳輸請(qǐng)求源選擇位和請(qǐng)求標(biāo)志位決定數(shù)據(jù)傳輸請(qǐng)求和DMA命令之間的對(duì)應(yīng)關(guān)系;用戶(hù)通過(guò)設(shè)置所述控制寄存器CR0、CR1、CR2、…中的中斷屏蔽位決定中斷和命令執(zhí)行之間的關(guān)系。
7.根據(jù)權(quán)利要求5所述的一種直接存儲(chǔ)器訪問(wèn)控制器DMA的控制方法,其特征在于所述步驟②中,DMA控制器每成功接收一個(gè)數(shù)據(jù),就把所述第一命令寄存器組中的源地址寄存器SAR0(219)遞增一次,或遞減一次;每成功發(fā)送一個(gè)數(shù)據(jù),就把所述第一命令寄存器組中的目的地址寄存器DAR0(212)遞增一次,或遞減一次;DMA控制器每成功傳輸一個(gè)數(shù)據(jù)就把所述第一命令寄存器組中的數(shù)據(jù)量寄存器WCR0(207)遞減一次。
8.根據(jù)權(quán)利要求5所述的一種直接存儲(chǔ)器訪問(wèn)控制器DMA的控制方法,其特征在于所述步驟⑤中當(dāng)DMA沒(méi)有工作時(shí),如果有對(duì)某個(gè)寄存器組的寫(xiě)命令,則該寄存器組選擇數(shù)據(jù)總線(xiàn)CBUS(109)上的數(shù)據(jù)打入。
9.根據(jù)權(quán)利要求5所述的一種直接存儲(chǔ)器訪問(wèn)控制器DMA的控制方法,其特征在于所述步驟③中在命令前移時(shí),只把移出命令的命令寄存器組中的數(shù)據(jù)量寄存器WCR清零,其它寄存器中的值不變。
全文摘要
本發(fā)明公開(kāi)了一種直接存儲(chǔ)器訪問(wèn)控制器DMA及其控制方法,采用命令隊(duì)列方式進(jìn)行數(shù)據(jù)傳輸,把要傳輸?shù)臄?shù)據(jù)傳輸命令寫(xiě)在多個(gè)DMA命令中并存放在DMA控制器里的多個(gè)命令寄存器組中,且其中的DMA命令可以順序前移,方便的完成非連續(xù)空間的數(shù)據(jù)傳輸,簡(jiǎn)化了設(shè)計(jì)復(fù)雜度,避免了讀取命令延時(shí)導(dǎo)致的丟失數(shù)據(jù)的危險(xiǎn),用戶(hù)設(shè)置命令簡(jiǎn)單。本發(fā)明綜合了直接方式和鏈?zhǔn)椒绞絻煞矫娴膬?yōu)點(diǎn),控制簡(jiǎn)單。
文檔編號(hào)G06F13/16GK1378148SQ0110769
公開(kāi)日2002年11月6日 申請(qǐng)日期2001年3月30日 優(yōu)先權(quán)日2001年3月30日
發(fā)明者王良清, 梁松海, 朱子宇, 官華伯 申請(qǐng)人:深圳市中興集成電路設(shè)計(jì)有限責(zé)任公司