專利名稱:一種dma數(shù)據(jù)傳輸方法及dma控制器的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及DMA (Direct Memory Access Control,直4妻內(nèi)存訪問)傳H 具體涉及一種能用少量?jī)?nèi)存實(shí)現(xiàn)大尺寸或不定尺寸數(shù)據(jù)進(jìn)行DMA傳輸?shù)腄MA 數(shù)據(jù)傳輸方法及DMA控制器。
背景技術(shù):
DMA (Direct Memory Access Control,直接內(nèi)存訪問)方式能夠不受CPU 的干涉而進(jìn)行數(shù)據(jù)傳輸。因此,即使在外部設(shè)備與總線上的存儲(chǔ)器中進(jìn)行DMA 傳輸時(shí),CPU也能夠同時(shí)進(jìn)行其它處理,由此增加系統(tǒng)的吞吐量。
現(xiàn)有技術(shù)中,外部設(shè)備發(fā)起的DMA傳輸通常是從外部設(shè)備的緩存中取數(shù) 據(jù)放到內(nèi)存中。圖1是現(xiàn)有技術(shù)DMA傳輸方法示意圖。以寫內(nèi)存為例,該方 法主要包括
(a)初始化通道。具體為CPU通過配置外部數(shù)據(jù)緩存大小寄存器將外 部數(shù)據(jù)緩存空間大小通知DMA控制器,通過配置內(nèi)存空間大小寄存器將內(nèi)存 空間大小通知DMA控制器,通過配置硬件請(qǐng)求使能狀態(tài)寄存器使能通道的硬 件請(qǐng)求。
(b )等待硬件的DMA傳輸請(qǐng)求。
(c )根據(jù)通道狀態(tài)寄存器的值查詢通道是否可用。當(dāng)查詢通道可用則執(zhí)行 步驟(d),否則重復(fù)步驟(c),直到通道可用。
其中,通道狀態(tài)寄存器中的值具體為在開始DMA傳輸后,通道狀態(tài)寄 存器的值為表示"通道被占用"的值;當(dāng)該通道上的DMA傳輸完成或終止后, 將通道狀態(tài)寄存器的值為表示"通道可用"的值。
(d)開始進(jìn)行DMA數(shù)據(jù)傳輸;
(e )判斷外部設(shè)備與外部數(shù)據(jù)緩存間傳輸?shù)臄?shù)據(jù)量是否達(dá)到外部數(shù)據(jù)緩存
大小寄存器中的數(shù)值,如果是則發(fā)出中斷給控制模塊,將通道狀態(tài)寄存器置為
表示"通道可用"的值,并執(zhí)行步驟(f);否則,直接執(zhí)行步驟(f)。
(f) 判斷外部數(shù)據(jù)緩存和內(nèi)存間傳輸?shù)臄?shù)據(jù)量是否達(dá)到內(nèi)存空間大小寄存 器中的數(shù)值,如果是則執(zhí)行(g);否則返回(b)。
(g) DMA控制器向CPU發(fā)出通道完成傳輸中斷請(qǐng)求,告知已經(jīng)完成此賴: 內(nèi)存數(shù)據(jù)的傳輸,即已填滿內(nèi)存的緩存,結(jié)束本次DMA傳輸;與此同時(shí)關(guān)閉 此通道的硬件請(qǐng)求使能;直到CPU重新配置此通道為止。
從上面的傳輸方法的可以看出,該方法只能傳輸定長(zhǎng)的數(shù)據(jù),對(duì)于未知長(zhǎng) 度的傳輸比較困難。而且需要先設(shè)定一個(gè)長(zhǎng)度比如512字節(jié)的數(shù)據(jù)長(zhǎng)度,收到 結(jié)束中斷后,再次啟動(dòng)DMA。這樣就存在一個(gè)問題,當(dāng)硬件傳輸速率比較高的 情況下,上一次傳輸結(jié)束中斷和啟動(dòng)DMA的時(shí)間間隔,將會(huì)出現(xiàn)數(shù)據(jù)丟失的 問題。如果為了避免這個(gè)問題的出現(xiàn),而將內(nèi)存空間開得很大,以實(shí)現(xiàn)一次性 完成數(shù)據(jù)的讀取,則會(huì)增加成本。
發(fā)明內(nèi)容
有鑒于此,本發(fā)明的目的在于提供一種DMA數(shù)據(jù)傳輸方法及DMA控制器, 能夠用少量的內(nèi)存空間完成對(duì)大尺寸及不定長(zhǎng)度凄t據(jù)的傳輸。
為達(dá)到上述目的,本發(fā)明提供一種DMA數(shù)據(jù)傳輸方法,包括
在外部數(shù)據(jù)緩存與內(nèi)存間進(jìn)行DMA數(shù)據(jù)傳輸,其中所述DMA數(shù)據(jù)傳輸 是從內(nèi)存的起始地址開始連續(xù)進(jìn)行的;
如果所述DMA數(shù)據(jù)傳輸是向內(nèi)存寫數(shù)據(jù),當(dāng)DMA數(shù)據(jù)傳輸量達(dá)到預(yù)定 的中斷產(chǎn)生長(zhǎng)度時(shí),則產(chǎn)生數(shù)據(jù)處理中斷,并從內(nèi)存中已寫有數(shù)據(jù)的區(qū)域讀出 數(shù)據(jù);
如果所述DMA數(shù)據(jù)傳輸是讀取內(nèi)存讀數(shù)據(jù),當(dāng)DMA數(shù)據(jù)傳輸量達(dá)到預(yù)定的中斷產(chǎn)生長(zhǎng)度時(shí),則產(chǎn)生數(shù)據(jù)處理中斷,并向內(nèi)存中已讀出數(shù)據(jù)的區(qū)域?qū)?br>
入數(shù)據(jù);
在DMA數(shù)據(jù)傳輸進(jìn)行至內(nèi)存的終止地址時(shí),根據(jù)當(dāng)前地址繞回使能狀態(tài) 值決定是否將內(nèi)存地址繞回到起始地址。
所述根據(jù)當(dāng)前地址繞回使能狀態(tài)值,決定是否將內(nèi)存地址繞回到起始地址, 具體為當(dāng)當(dāng)前地址繞回使能狀態(tài)值為表示地址繞回使能有效的值時(shí),下一次 數(shù)據(jù)傳輸將從內(nèi)存的起始地址開始進(jìn)行;否則結(jié)束數(shù)據(jù)傳輸。
在一次外部數(shù)據(jù)緩存與內(nèi)存間的DMA數(shù)據(jù)傳輸中還需要設(shè)置備用地址繞 回使能狀態(tài)值,將作為下一次數(shù)據(jù)傳輸時(shí)的當(dāng)前地址繞回使能狀態(tài)值,而本次 數(shù)據(jù)傳輸中的當(dāng)前地址繞回使能狀態(tài)值將作為下一次數(shù)據(jù)傳輸?shù)膫溆玫刂防@回 使能狀態(tài)值。
所述地址繞回使能狀態(tài)值是通過比較外部設(shè)備所需傳輸?shù)氖S鄶?shù)據(jù)量與內(nèi) 存空間大小來設(shè)定,如果外部設(shè)備所述傳輸?shù)氖S鄶?shù)據(jù)量大于等于內(nèi)存空間大 小,則將地址繞回使能狀態(tài)值設(shè)為有效,否則將地址繞回使能狀態(tài)值設(shè)為無效。
對(duì)外部數(shù)據(jù)緩存與內(nèi)存間的DAM數(shù)據(jù)傳輸量進(jìn)行計(jì)數(shù),是從DMA數(shù)據(jù) 傳輸開始或產(chǎn)生凄t據(jù)處理中斷時(shí)開始。
該方法還包括CPU配置外部數(shù)據(jù)緩存空間大小,內(nèi)存空間大小,中斷產(chǎn) 生長(zhǎng)度,及外部數(shù)據(jù)緩存與內(nèi)存間第一次傳輸時(shí)使用的地址繞回使能狀態(tài)值。7、 如權(quán)利要求1所述的方法,其特征在于,該方法還包括在外部設(shè)備與外部數(shù) 據(jù)緩存間傳輸數(shù)據(jù)時(shí),判斷外部設(shè)備與外部數(shù)據(jù)緩存間傳輸?shù)臄?shù)據(jù)量是否達(dá)到 外部數(shù)據(jù)緩存空間大小,如果是,則進(jìn)行外部數(shù)據(jù)緩存與內(nèi)存間的DMA數(shù)據(jù) 傳輸,否則,繼續(xù)進(jìn)行外部設(shè)備與外部數(shù)據(jù)緩存間的數(shù)據(jù)傳輸。
該方法還包括在外部數(shù)據(jù)緩存與內(nèi)存間傳輸數(shù)據(jù)時(shí),判斷外部數(shù)據(jù)緩存 和內(nèi)存間傳輸?shù)臄?shù)據(jù)量是否達(dá)到內(nèi)存空間大小,如果是,則發(fā)出通道完成傳輸 中斷給控制模塊,表明完成一次外部數(shù)據(jù)緩存和內(nèi)存間的DMA數(shù)據(jù)傳輸;否 則繼續(xù)進(jìn)行外部數(shù)據(jù)緩存與內(nèi)存間的DMA數(shù)據(jù)傳輸。
本發(fā)明還提供一種DMA控制器,包括控制模塊、寄存器組和計(jì)數(shù)器組, 其特征在于所述DMA控制器還包括地址繞回模塊,用于根據(jù)所述控制模塊 的選捧信號(hào)輸出當(dāng)前地址繞回使能狀態(tài)值;還用于存儲(chǔ)繞回地址。
所述控制模塊根據(jù)地址繞回模塊輸出的當(dāng)前地址繞回使能狀態(tài)值,決定是 否進(jìn)行地址繞回,如果當(dāng)前地址繞回使能狀態(tài)值為有效,則從地址繞回模塊中 讀取繞回地址,并發(fā)出控制命令,使下一次數(shù)據(jù)傳輸從繞回地址開始。
所述地址繞回;f莫塊包括
第一地址繞回使能狀態(tài)寄存器和第二地址繞回使能狀態(tài)寄存器,均用于存 儲(chǔ)地址繞回使能狀態(tài)值,且在每次外部數(shù)據(jù)緩存與內(nèi)存見的DMA數(shù)據(jù)傳輸中 交替使用;
選擇器,用于接收控制模塊的選擇信號(hào),選擇第一地址繞回使能狀態(tài)寄存 器中的值和第二地址繞回使能狀態(tài)寄存器中的值之一作為當(dāng)前地址繞回使能狀 態(tài)值,并輸出給控制模塊。
繞回地址存儲(chǔ)單元,用于存儲(chǔ)繞回地址;
所述繞回地址為內(nèi)存的起始地址。
所述寄存器組包括
通道狀態(tài)寄存器,用于存儲(chǔ)通道狀態(tài)值; DMA使能狀態(tài)寄存器,用于存儲(chǔ)DMA使能狀態(tài)值;
外部數(shù)據(jù)緩存空間大小寄存器,用于存儲(chǔ)由CPU配置的外部數(shù)據(jù)緩存的大 小值。
內(nèi)存空間大小寄存器,用于存儲(chǔ)由CPU配置的內(nèi)存空間的大小值。 中斷產(chǎn)生長(zhǎng)度寄存器,用于存儲(chǔ)在數(shù)據(jù)傳輸過程中中斷產(chǎn)生時(shí)傳輸數(shù)據(jù)量 的值。
地址寄存器,用于存儲(chǔ)數(shù)據(jù)傳輸在內(nèi)存中的當(dāng)前地址。
所述計(jì)數(shù)器組包括
第一計(jì)數(shù)器,用于在一次外部設(shè)備與外部數(shù)據(jù)緩存間的數(shù)據(jù)傳輸中對(duì)所傳 輸?shù)淖止?jié)數(shù)進(jìn)行計(jì)數(shù);
所述控制才莫塊,用于在進(jìn)行數(shù)據(jù)傳輸期間,控制第一計(jì)數(shù)器進(jìn)行計(jì)數(shù);并 通過比較第一計(jì)數(shù)器的計(jì)數(shù)值與外部數(shù)據(jù)緩存空間大小,來判斷外部設(shè)備與外 部數(shù)據(jù)緩存間傳輸?shù)淖止?jié)數(shù)是否達(dá)到外部數(shù)據(jù)緩存空間大小,達(dá)到時(shí),則向外 部設(shè)備發(fā)送完成本次外部設(shè)備與外部數(shù)據(jù)緩存間的數(shù)據(jù)傳輸?shù)男盘?hào);
所述計(jì)數(shù)器組還包括
第二計(jì)數(shù)器,用于在一次外部數(shù)據(jù)緩存與內(nèi)存間數(shù)據(jù)傳輸中對(duì)所傳輸?shù)淖?節(jié)數(shù)進(jìn)行計(jì)數(shù);
所述控制模塊,用于在進(jìn)行數(shù)據(jù)傳輸期間,控制第二計(jì)數(shù)器進(jìn)行計(jì)數(shù);并 通過比較第二計(jì)數(shù)器的計(jì)數(shù)值與內(nèi)存空間大小寄存器中的數(shù)值,來判斷外部數(shù) 據(jù)緩存與內(nèi)存間傳輸?shù)淖止?jié)數(shù)是否達(dá)到內(nèi)存空間的大小,達(dá)到時(shí),則向CPU發(fā) 出通道完成傳輸中斷請(qǐng)求,表示完成一次外部數(shù)據(jù)緩存與內(nèi)存間的DMA數(shù)據(jù) 傳輸;所述控制模塊根據(jù)來自地址繞回模塊的當(dāng)前地址繞回使能狀態(tài)值決定是 否進(jìn)行地址繞回,如果當(dāng)前地址繞回使能狀態(tài)值為有效,則從地址繞回模塊讀 取繞回地址,作為下一次數(shù)據(jù)傳輸?shù)钠鹗嫉刂贰?br>
所述計(jì)數(shù)器組還包括
第三計(jì)數(shù)器,用于在產(chǎn)生兩個(gè)中斷之間外部數(shù)據(jù)緩存與內(nèi)存件數(shù)據(jù)傳輸中 對(duì)所傳輸?shù)淖止?jié)數(shù)進(jìn)行計(jì)數(shù)。
所述控制才莫塊,用于分別在外部數(shù)據(jù)緩存與內(nèi)存間開始進(jìn)行DMA數(shù)據(jù)傳 輸時(shí)和在發(fā)出數(shù)據(jù)處理中斷請(qǐng)求時(shí)控制第三計(jì)數(shù)器進(jìn)行計(jì)數(shù);并通過比較第三 計(jì)數(shù)器的計(jì)數(shù)值與中斷產(chǎn)生長(zhǎng)度,來判斷從數(shù)據(jù)傳輸開始或發(fā)出數(shù)據(jù)處理中斷 請(qǐng)求起外部數(shù)據(jù)緩存與內(nèi)存間進(jìn)行的數(shù)據(jù)傳輸是否達(dá)到中斷產(chǎn)生長(zhǎng)度,達(dá)到時(shí), 則向CPU發(fā)出數(shù)據(jù)處理中斷,如果DMA數(shù)據(jù)傳輸是向內(nèi)存寫數(shù)據(jù),CPU從內(nèi)存中已寫有數(shù)據(jù)的區(qū)域讀 出數(shù)據(jù);
如果DMA數(shù)據(jù)傳輸是讀取內(nèi)存讀數(shù)據(jù),CPU向內(nèi)存中已讀出數(shù)據(jù)的區(qū)域 寫入數(shù)據(jù);
發(fā)出通道完成傳輸中斷請(qǐng)求,表示完成一次外部數(shù)據(jù)緩存與內(nèi)存間的DMA 數(shù)據(jù)傳輸;所述控制模塊根據(jù)來自地址繞回模塊的當(dāng)前地址繞回使能狀態(tài)值決 定是否進(jìn)行地址繞回,如果當(dāng)前地址繞回使能狀態(tài)值為有效,則從地址繞回模 塊讀取繞回地址,作為下一次數(shù)據(jù)傳輸?shù)钠鹗嫉刂贰?br>
由以上的技術(shù)方案可見,本發(fā)明在現(xiàn)有技術(shù)的基礎(chǔ)上,增加了地址繞回步 驟,在向內(nèi)存讀/寫數(shù)據(jù)到達(dá)內(nèi)存終止地址時(shí),交替才艮據(jù)地址繞回使能狀態(tài)寄存 器的值判斷是否將讀/寫地址繞回到內(nèi)存起始地址。由于其中一個(gè)地址繞回使能 狀態(tài)寄存器在另一個(gè)地址繞回使能狀態(tài)寄存器在被使用時(shí)已經(jīng)被設(shè)置好,因此 在完成一次數(shù)據(jù)傳輸能夠及時(shí)找到下次傳輸?shù)牡刂?,無需再次啟動(dòng)DMA,從而避 免出現(xiàn)由于上一次傳輸結(jié)束中斷和啟動(dòng)DMA存在時(shí)間間隔,而導(dǎo)致數(shù)據(jù)丟失 的問題。同時(shí),由于本方法使用了地址繞回的技術(shù)手段,在一次傳輸?shù)臄?shù)據(jù)量 達(dá)到內(nèi)存空間的最大值時(shí),便可以使用地址繞回的技術(shù)手段,找到下次傳輸?shù)?起始地址,只要地址繞回使能狀態(tài)值一直為有效,則可以進(jìn)行不定次數(shù)的數(shù)據(jù) 傳輸,這樣即使內(nèi)存空間比較小,也能實(shí)現(xiàn)對(duì)大長(zhǎng)度數(shù)據(jù)進(jìn)行傳輸,而且所傳 輸?shù)臄?shù)據(jù)的長(zhǎng)度可以不固定。
圖1是現(xiàn)有技術(shù)中DMA傳輸數(shù)據(jù)的方法;
圖2是本發(fā)明提供的一種DMA傳輸數(shù)據(jù)的方法實(shí)施例示意圖。
圖3是本發(fā)明提供的一種DMA控制器的結(jié)構(gòu)實(shí)施例示意圖。
具體實(shí)施例方式
本發(fā)明提供的一種DMA數(shù)據(jù)傳輸?shù)姆椒癉MA控制器,是通過在現(xiàn)有技術(shù)
的基礎(chǔ)上,增加地址繞回步驟,在向內(nèi)存讀/寫數(shù)據(jù)到達(dá)內(nèi)存終止地址時(shí),交替
根據(jù)兩個(gè)地址繞回使能狀態(tài)寄存判斷是否將讀/寫地址繞回到內(nèi)存起始地址。由 于其中一個(gè)地址繞回使能狀態(tài)值在另 一個(gè)地址繞回使能狀態(tài)值在被使用時(shí)已經(jīng)
被設(shè)置好,因此在完成一次數(shù)據(jù)傳輸能夠及時(shí)找到下次傳輸?shù)牡刂罚瑹o需再次 啟動(dòng)DMA,從而避免出現(xiàn)由于上一次傳輸結(jié)束中斷和啟動(dòng)DMA存在時(shí)間間隔, 而導(dǎo)致數(shù)據(jù)丟失的問題。
為使本發(fā)明的目的、技術(shù)方案及優(yōu)點(diǎn)更加清楚明白,以下參照附圖并舉實(shí) 施例,對(duì)本發(fā)明進(jìn)一步詳細(xì)說明。
圖2是本發(fā)明^是供的一種DMA傳輸數(shù)據(jù)的方法實(shí)施例示意圖。該方法包括 以下步驟
步驟201,初始化。
具體為CPU配置外部數(shù)據(jù)緩存空間大小,內(nèi)存空間大小,DMA使能狀 態(tài)值,通道狀態(tài)值,中斷產(chǎn)生長(zhǎng)度,及外部數(shù)據(jù)緩存與內(nèi)存間第一次傳輸時(shí)使 用的地址繞回使能狀態(tài)值。
如果所需傳輸?shù)膌t據(jù)量長(zhǎng)度較小時(shí),比如小于512K字節(jié)長(zhǎng)度,則可以將 內(nèi)存空間大小設(shè)置為所需傳輸?shù)臄?shù)據(jù)量長(zhǎng)度。
通道狀態(tài)值具體為在開始DMA傳輸后,通道狀態(tài)值為表示"通道被占 用,,的值,如l;當(dāng)該通道上的DMA傳輸完成或終止后或DMA傳輸開始前, 通道狀態(tài)值為表示"通道可用"的值,如0。初始化時(shí),將該值置為0。
地址繞回使能狀態(tài)值是由外部設(shè)備所需傳輸?shù)臄?shù)據(jù)量決定的,如果當(dāng)前外 部設(shè)備所需傳輸?shù)哪?據(jù)量大于內(nèi)存空間大小,則設(shè)置下一次傳輸所使用的地址 繞回使能狀態(tài)值的為1,否則為0。
另外,對(duì)于不定長(zhǎng)度的數(shù)據(jù)傳輸量,地址繞回使能狀態(tài)值始終為1,只有
當(dāng)CPU發(fā)出控制命令才將這個(gè)值設(shè)為0。
在本實(shí)施例中,設(shè)置中斷產(chǎn)生長(zhǎng)度的作用是為了在數(shù)據(jù)傳輸中,當(dāng)傳輸數(shù) 據(jù)量達(dá)到中斷產(chǎn)生長(zhǎng)度時(shí),發(fā)出中斷給控制模塊,控制模塊提取內(nèi)存中的數(shù)據(jù)
進(jìn)行處理,使得在下一次傳輸中DMA控制器可以在這些被提取的數(shù)據(jù)所占的 地址上進(jìn)行數(shù)據(jù)傳輸。比如,寫操作,當(dāng)控制模塊收到中斷后,則提取當(dāng)前寫 地址之前的數(shù)據(jù)進(jìn)行處理,使得在下一次寫操作中DMA控制器可以將新的數(shù) 據(jù)直接寫在當(dāng)前目的地址之前的內(nèi)存中。因此,這里所設(shè)置的中斷產(chǎn)生長(zhǎng)度不 宜超過內(nèi)存空間大小,而為了節(jié)省資源,也不宜將其設(shè)置得太小。譬如,可以 將中斷產(chǎn)生長(zhǎng)度設(shè)置為內(nèi)存空間大小的一半。
步驟202 ,等待^更件的DMA傳輸請(qǐng)求。
這里的DMA傳輸請(qǐng)求是外設(shè)或內(nèi)存根據(jù)需求,比如當(dāng)外設(shè)緩存裝滿數(shù)據(jù) 后,或當(dāng)預(yù)定的時(shí)間到達(dá)時(shí),發(fā)起DMA傳輸請(qǐng)求。
步驟203,根據(jù)通道狀態(tài)值查詢通道是否可用。當(dāng)查詢通道可用則執(zhí)行步 驟204,否則重復(fù)步驟203,直到通道可用。
步驟204,開始外部設(shè)備與外部數(shù)據(jù)緩存間的數(shù)據(jù)傳輸。
步驟205,判斷外部設(shè)備與外部數(shù)據(jù)緩存間傳輸?shù)臄?shù)據(jù)量是否達(dá)到外部數(shù) 據(jù)緩存空間大小,如果是,則發(fā)出通道可用中斷請(qǐng)求給控制模塊,并執(zhí)行步驟 206;否則,返回步驟202。
步驟206,開始從內(nèi)存的起始地址開始進(jìn)行外部數(shù)據(jù)緩存與內(nèi)存間的DMA 數(shù)據(jù)傳輸,配置備用地址繞回使能狀態(tài)值。
在本實(shí)施例中,每次數(shù)據(jù)傳輸將交替使用兩個(gè)地址繞回使能狀態(tài)寄存器。 設(shè)當(dāng)前所使用的地址繞回使能狀態(tài)寄存器為當(dāng)前地址繞回使能狀態(tài)寄存器,用 于存儲(chǔ)當(dāng)前地址繞回使能狀態(tài)值,已在初始化時(shí),完成配置;另一個(gè)地址繞回 使能狀態(tài)寄存器為備用地址繞回使能狀態(tài)寄存器,用于存儲(chǔ)備用地址繞回使能 狀態(tài)值,即下一次外部凝:據(jù)緩存與內(nèi)存間數(shù)據(jù)傳輸所使用的地址繞回使能狀態(tài)
值。當(dāng)?shù)刂防@回使能狀態(tài)值為1,則表明地址繞回使能有效,為0則表明地址 繞回使能無效。在本步驟中需要對(duì)備用地址繞回使能狀態(tài)值進(jìn)行配置。
上面所說的配置地址繞回使能狀態(tài)值是由外部設(shè)備所需傳輸?shù)臄?shù)據(jù)量決定 的,如果當(dāng)前外部設(shè)備所需傳輸?shù)臄?shù)據(jù)量大于內(nèi)存空間大小,則設(shè)置下一次外 部數(shù)據(jù)緩存與內(nèi)存間數(shù)據(jù)傳輸所使用的地址繞回使能狀態(tài)值的為1,否則為0。
另外,對(duì)于不定長(zhǎng)度的數(shù)據(jù)傳輸量,地址繞回使能狀態(tài)值始終為1,只有
當(dāng)CPU發(fā)出控制命令才將這個(gè)值設(shè)為0。
步驟207,判斷外部數(shù)據(jù)緩存和內(nèi)存間傳輸?shù)臄?shù)據(jù)量是否達(dá)到中斷產(chǎn)生長(zhǎng) 度,如果是,則發(fā)出數(shù)據(jù)處理中斷給控制模塊,控制模塊提取內(nèi)存中的數(shù)據(jù)進(jìn) 行處理,并執(zhí)行步驟208;如果不是,則直接才丸行步驟208。
如果DMA數(shù)據(jù)傳輸是向內(nèi)存寫數(shù)據(jù),當(dāng)DMA數(shù)據(jù)傳輸量達(dá)到預(yù)定的中 斷產(chǎn)生長(zhǎng)度時(shí),則產(chǎn)生數(shù)據(jù)處理中斷,并從內(nèi)存中已寫有數(shù)據(jù)的區(qū)域讀出數(shù)據(jù);
如果所述DMA數(shù)據(jù)傳輸是讀取內(nèi)存讀數(shù)據(jù),當(dāng)DMA數(shù)據(jù)傳輸量達(dá)到預(yù) 定的中斷產(chǎn)生長(zhǎng)度時(shí),則產(chǎn)生數(shù)據(jù)處理中斷,向內(nèi)存中已讀出數(shù)據(jù)的區(qū)域?qū)懭?數(shù)據(jù);
在步驟207中,用來判斷是否達(dá)到中斷產(chǎn)生長(zhǎng)度的傳輸數(shù)據(jù)量,是從DMA 數(shù)據(jù)傳輸開始或上一次數(shù)據(jù)處理中斷產(chǎn)生時(shí)算起,所以,雖然中斷產(chǎn)生長(zhǎng)度是 固定的,但每次達(dá)到當(dāng)傳輸?shù)臄?shù)據(jù)量達(dá)到中斷產(chǎn)生長(zhǎng)度時(shí),數(shù)據(jù)傳輸?shù)牡刂凡?不相同。
步驟208,判斷外部數(shù)據(jù)緩存和內(nèi)存間傳輸?shù)臄?shù)據(jù)量是否達(dá)到內(nèi)存空間大 小,即數(shù)據(jù)傳輸是否進(jìn)行至內(nèi)存的終止地址,如果是,則發(fā)出通道完成傳輸中 斷給控制模塊,表明完成一次外部數(shù)據(jù)緩存與內(nèi)存間的DMA數(shù)據(jù)傳輸,執(zhí)行 步驟209;否則返回步驟202。
步驟209,判斷當(dāng)前地址繞回狀態(tài)值是否表示的是使能有效。如果是,則 將內(nèi)存空間的起始地址作為下一次數(shù)據(jù)傳輸?shù)钠鹗嫉刂?,并?zhí)行步驟202;否則,則結(jié)束數(shù)據(jù)傳輸,同時(shí)關(guān)閉此通道的硬件請(qǐng)求使能,直到CPU重新配置此 通道為止。
本發(fā)明還提供了一種DMA控制器,能夠?qū)崿F(xiàn)用少量的內(nèi)存空間完成對(duì)大尺 寸及不定長(zhǎng)度數(shù)據(jù)的傳輸。
圖3是本發(fā)明提供的一種DMA控制器的結(jié)構(gòu)實(shí)施例示意圖。該DMA控制器 包括控制模塊301、寄存器組302、計(jì)數(shù)器組303和地址繞回模塊304。
其中,寄存器組302包括
通道狀態(tài)寄存器,用于存儲(chǔ)通道狀態(tài)值,比如當(dāng)前通道被占用時(shí),通道狀 態(tài)寄存器中的通道狀態(tài)值為1;當(dāng)前通道可用時(shí),通道狀態(tài)寄存器中的通道狀 態(tài)值為0。
DMA使能狀態(tài)寄存器,用于存儲(chǔ)DMA使能狀態(tài)值,比如當(dāng)前DMA請(qǐng)求使能 有效時(shí),DMA請(qǐng)求使能狀態(tài)寄存器中的DMA使能狀態(tài)值為1;當(dāng)前DMA請(qǐng)求使能 無效時(shí),DMA請(qǐng)求使能狀態(tài)寄存器中的DMA使能狀態(tài)值為0。
外部數(shù)據(jù)緩存空間大小寄存器,用于存儲(chǔ)由CPU配置的外部數(shù)據(jù)緩存空間 的大小值。
內(nèi)存空間大小寄存器,用于存儲(chǔ)由CPU配置的內(nèi)存空間的大小值。 中斷產(chǎn)生長(zhǎng)度寄存器,用于存儲(chǔ)在數(shù)據(jù)傳輸過程中中斷產(chǎn)生時(shí)傳輸數(shù)據(jù)量 的值。
地址寄存器,用于存儲(chǔ)當(dāng)前數(shù)據(jù)傳輸在內(nèi)存中的地址。。 計(jì)數(shù)器組303,包括
第一計(jì)數(shù)器,用于在一次外部設(shè)備與外部數(shù)據(jù)緩存間的數(shù)據(jù)傳輸中對(duì)所傳 輸?shù)淖止?jié)數(shù)進(jìn)行計(jì)^:;
第二計(jì)數(shù)器,用于在一次外部數(shù)據(jù)緩存與內(nèi)存間數(shù)據(jù)傳輸中對(duì)所傳輸?shù)淖?節(jié)數(shù)進(jìn)行計(jì)數(shù);
第三計(jì)數(shù)器,用于在產(chǎn)生兩個(gè)中斷之間外部凄丈據(jù)緩存與內(nèi)存件數(shù)據(jù)傳輸中 對(duì)所傳輸?shù)淖止?jié)數(shù)進(jìn)行計(jì)數(shù)。
地址繞回模塊304,包括
第一地址繞回使能狀態(tài)寄存器和第二地址繞回使能狀態(tài)寄存器,均用于存 儲(chǔ)地址繞回使能狀態(tài)值。比如,地址繞回使能狀態(tài)值為1表示地址繞回使能狀 態(tài)為有效,其為O表示地址繞回使能狀態(tài)為無效。
這兩個(gè)地址繞回使能狀態(tài)寄存器在每次外部數(shù)據(jù)緩存與內(nèi)存間數(shù)據(jù)傳輸中 交替使用,當(dāng)一個(gè)地址繞回使能狀態(tài)寄存器作為當(dāng)前地址繞回使能狀態(tài)寄存器 供本次數(shù)據(jù)傳輸使用,另一個(gè)地址繞回使能狀態(tài)寄存器則作為備用地址繞回使 能狀態(tài)寄存器供下一次數(shù)據(jù)傳輸使用,當(dāng)進(jìn)入下一次數(shù)據(jù)傳輸時(shí),本次的當(dāng)前 地址繞回使能狀態(tài)寄存器將作為備用地址繞回使能狀態(tài)寄存器使用,本次數(shù)據(jù) 傳輸?shù)膫溆玫刂防@回使能狀態(tài)寄存器將作為當(dāng)前地址繞回使能狀態(tài)寄存器使 用。
選擇器,用于接收控制模塊的選擇信號(hào),選擇第一地址繞回使能狀態(tài)寄存 器中的值和第二地址繞回使能狀態(tài)寄存器中的值之一作為當(dāng)前地址繞回使能狀 態(tài)值,并輸出給控制模塊。
繞回地址存儲(chǔ)單元,用于存儲(chǔ)下一次數(shù)據(jù)傳輸?shù)钠鹗嫉刂?,即繞回地址, 為內(nèi)存的起始地址。
控制模塊301,用于控制外部設(shè)備和內(nèi)存間的數(shù)據(jù)傳輸;當(dāng)DMA使能狀態(tài) 值為1時(shí),接收硬件的DMA傳輸請(qǐng)求,當(dāng)DMA使能狀態(tài)值為0時(shí),繼續(xù)探 詢,直到DMA使能狀態(tài)值為1;還用于探詢通道狀態(tài)值,如果通道狀態(tài)值為1 時(shí),發(fā)出控制命令,開始數(shù)據(jù)傳輸;如果通道狀態(tài)值為0,繼續(xù)探詢,直到通 道狀態(tài)值為1。
控制模塊301,還用于在進(jìn)行數(shù)據(jù)傳輸期間,控制第一計(jì)數(shù)器進(jìn)行計(jì)數(shù); 并通過比較第一計(jì)數(shù)器的計(jì)數(shù)值與外部數(shù)據(jù)緩存空間大小,來判斷外部設(shè)備與 外部數(shù)據(jù)緩存間傳輸?shù)淖止?jié)數(shù)是否達(dá)到外部數(shù)據(jù)緩存空間大小,達(dá)到時(shí),則向 外部設(shè)備發(fā)送完成本次外部設(shè)備與外部數(shù)據(jù)緩存間的數(shù)據(jù)傳輸?shù)男盘?hào);
控制模塊301,還用于分別在外部數(shù)據(jù)緩存與內(nèi)存間開始進(jìn)行數(shù)據(jù)傳輸時(shí) 和在發(fā)出數(shù)據(jù)處理中斷請(qǐng)求時(shí)控制第三計(jì)數(shù)器進(jìn)行計(jì)數(shù);并通過比較第三計(jì)數(shù) 器的計(jì)數(shù)值與中斷產(chǎn)生長(zhǎng)度,來判斷從數(shù)據(jù)傳輸開始或發(fā)出數(shù)據(jù)處理中斷請(qǐng)求 起外部數(shù)據(jù)緩存與內(nèi)存間進(jìn)行的數(shù)據(jù)傳輸是否達(dá)到中斷產(chǎn)生長(zhǎng)度,達(dá)到時(shí),則 將數(shù)據(jù)傳輸?shù)脑趦?nèi)存中的當(dāng)前地址存入地址寄存單元中,并向CPU發(fā)出數(shù)據(jù)處 理中斷請(qǐng)求,CPU將內(nèi)存中的數(shù)據(jù)提取出來并進(jìn)行數(shù)據(jù)處理。
控制模塊301,還用于在進(jìn)行數(shù)據(jù)傳輸期間,控制第二計(jì)數(shù)器進(jìn)行計(jì)數(shù); 并通過比較第二計(jì)數(shù)器的計(jì)數(shù)值與內(nèi)存空間大小,來判斷外部數(shù)據(jù)緩存與內(nèi)存 間傳輸?shù)淖止?jié)數(shù)是否達(dá)到內(nèi)存空間的大小,達(dá)到時(shí),則向CPU發(fā)出通道完成傳 輸中斷請(qǐng)求,表示完成一次數(shù)據(jù)傳輸;并根據(jù)來自地址繞回模塊304的當(dāng)前地 址繞回使能狀態(tài)值決定是否進(jìn)行地址繞回,如果該值為1,則表明地址繞回使 能狀態(tài)為有效,則從地址繞回模塊304中的繞回地址單元讀取繞回地址,作為 下一次數(shù)據(jù)傳輸?shù)钠鹗嫉刂贰?br>
控制模塊301,還用于向地址繞回模塊304中的選擇器發(fā)送選擇信號(hào),使 得選擇器在每次外部數(shù)據(jù)緩存與內(nèi)存間的數(shù)據(jù)傳輸中交替選擇并輸出兩個(gè)地址 繞回使能狀態(tài)值之一作為當(dāng)前地址繞回使能狀態(tài)值;。
所述DMA控制模塊還用于在開始DMA傳輸后,將所用傳輸通道的通道 狀態(tài)寄存器的值置為"通道#1占用";當(dāng)該通道上的DMA傳輸完成或終止后, 將通道狀態(tài)寄存器的值置為表示"通道可用"的值。
由上述的實(shí)施例可見,本發(fā)明在現(xiàn)有技術(shù)的基礎(chǔ)上,增加了地址繞回的步 驟,并設(shè)置有兩個(gè)地址繞回使能狀態(tài)寄存器,由于其中一個(gè)地址繞回使能狀態(tài) 寄存器在另一個(gè)地址繞回使能狀態(tài)寄存器在被4吏用時(shí)已經(jīng)祐:設(shè)置好,因此在完
成一次數(shù)據(jù)傳輸能夠及時(shí)找到下次傳輸?shù)牡刂?,無需再次啟動(dòng)DMA,從而避免出 現(xiàn)由于上一次傳輸結(jié)束中斷和啟動(dòng)DMA存在時(shí)間間隔,而導(dǎo)致數(shù)據(jù)丟失的問
題。同時(shí),由于本方法使用了地址繞回的技術(shù)手"a,在一次傳輸?shù)臄?shù)據(jù)量達(dá)到
內(nèi)存空間的最大值時(shí),便可以使用地址繞回的技術(shù)手段,找到下次傳輸?shù)钠鹗?地址,只要地址繞回使能狀態(tài)值一直為有效,則可以進(jìn)行不定次數(shù)的數(shù)據(jù)傳輸, 這樣即使內(nèi)存空間比較小,也能實(shí)現(xiàn)對(duì)大長(zhǎng)度數(shù)據(jù)進(jìn)行傳輸,而且所傳輸?shù)臄?shù) 據(jù)的長(zhǎng)度可以不固定。
綜上所述,以上僅為本發(fā)明的較佳實(shí)施例而已,并非用于限定本發(fā)明的保 護(hù)范圍。凡在本發(fā)明的精神和原則之內(nèi),所作的任何修改、等同替換、改進(jìn)等, 均應(yīng)包含在本發(fā)明的保護(hù)范圍之內(nèi)。
權(quán)利要求
1、一種DMA數(shù)據(jù)傳輸方法,其特征在于,所述方法包括在外部數(shù)據(jù)緩存與內(nèi)存間進(jìn)行DMA數(shù)據(jù)傳輸,其中所述DMA數(shù)據(jù)傳輸是從內(nèi)存的起始地址開始連續(xù)進(jìn)行的;如果所述DMA數(shù)據(jù)傳輸是向內(nèi)存寫數(shù)據(jù),當(dāng)DMA數(shù)據(jù)傳輸量達(dá)到預(yù)定的中斷產(chǎn)生長(zhǎng)度時(shí),則產(chǎn)生數(shù)據(jù)處理中斷,并從內(nèi)存中已寫有數(shù)據(jù)的區(qū)域讀出數(shù)據(jù);如果所述DMA數(shù)據(jù)傳輸是讀取內(nèi)存讀數(shù)據(jù),當(dāng)DMA數(shù)據(jù)傳輸量達(dá)到預(yù)定的中斷產(chǎn)生長(zhǎng)度時(shí),則產(chǎn)生數(shù)據(jù)處理中斷,并向內(nèi)存中已讀出數(shù)據(jù)的區(qū)域?qū)懭霐?shù)據(jù);在DMA數(shù)據(jù)傳輸進(jìn)行至內(nèi)存的終止地址時(shí),根據(jù)當(dāng)前地址繞回使能狀態(tài)值決定是否將內(nèi)存地址繞回到起始地址。
2、 如權(quán)利要求l所迷的方法,其特征在于,所述根據(jù)當(dāng)前地址繞回使能狀 態(tài)值,決定是否將內(nèi)存地址繞回到起始地址,具體為當(dāng)當(dāng)前地址繞回使能狀 態(tài)值為表示地址繞回使能有效的值時(shí),下一次數(shù)據(jù)傳輸將從內(nèi)存的起始地址開 始進(jìn)行;否則結(jié)束數(shù)據(jù)傳輸。
3、 如權(quán)利要求2所述的方法,其特征在于在一次外部數(shù)據(jù)緩存與內(nèi)存間 的DMA數(shù)據(jù)傳輸中還需要設(shè)置備用地址繞回使能狀態(tài)值,將作為下一次數(shù)據(jù) 傳輸時(shí)的當(dāng)前地址繞回使能狀態(tài)值,而本次數(shù)據(jù)傳輸中的當(dāng)前地址繞回使能狀 態(tài)值將作為下一次數(shù)據(jù)傳輸?shù)膫溆玫刂防@回使能狀態(tài)值。
4、 如權(quán)利要求2所述的方法,其特征在于所述地址繞回使能狀態(tài)值是通 過比較外部設(shè)備所需傳輸?shù)氖S鄶?shù)據(jù)量與內(nèi)存空間大小來設(shè)定,如果外部設(shè)備 所述傳輸?shù)氖S鄶?shù)據(jù)量大于等于內(nèi)存空間大小,則將地址繞回使能狀態(tài)值設(shè)為 有效,否則將地址繞回使能狀態(tài)值設(shè)為無效。
5、 如權(quán)利要求1所述的方法,其特征在于對(duì)外部數(shù)據(jù)緩存與內(nèi)存間的 DAM數(shù)據(jù)傳輸量進(jìn)行計(jì)數(shù),是從DMA數(shù)據(jù)傳輸開始或產(chǎn)生數(shù)據(jù)處理中斷時(shí)開 始。
6、 如權(quán)利要求1所述的方法,其特征在于,該方法還包括CPU配置外 部數(shù)據(jù)緩存空間大小,內(nèi)存空間大小,中斷產(chǎn)生長(zhǎng)度,及外部數(shù)據(jù)緩存與內(nèi)存 間第一次傳輸時(shí)使用的地址繞回使能狀態(tài)值。
7、 如權(quán)利要求l所述的方法,其特征在于,該方法還包括在外部設(shè)備與 外部數(shù)據(jù)緩存間傳輸數(shù)據(jù)時(shí),判斷外部設(shè)備與外部數(shù)據(jù)緩存間傳輸?shù)臄?shù)據(jù)量是 否達(dá)到外部數(shù)據(jù)緩存空間大小,如果是,則進(jìn)行外部數(shù)據(jù)緩存與內(nèi)存間的DMA 數(shù)據(jù)傳輸,否則,繼續(xù)進(jìn)行外部設(shè)備與外部數(shù)據(jù)緩存間的數(shù)據(jù)傳輸。
8、 如權(quán)利要求l所述的方法,其特征在于,該方法還包括在外部數(shù)據(jù)緩 存與內(nèi)存間傳輸數(shù)據(jù)時(shí),判斷外部數(shù)據(jù)緩存和內(nèi)存間傳輸?shù)臄?shù)據(jù)量是否達(dá)到內(nèi) 存空間大小,如果是,則發(fā)出通道完成傳輸中斷給控制模塊,表明完成一次外 部數(shù)據(jù)緩存和內(nèi)存間的DMA數(shù)據(jù)傳輸;否則繼續(xù)進(jìn)行外部數(shù)據(jù)緩存與內(nèi)存間 的DMA數(shù)據(jù)傳輸。
9、 一種DMA控制器,包括控制模塊、寄存器組和計(jì)數(shù)器組,其特征在于 所述DMA控制器還包括地址繞回模塊,用于根據(jù)所述控制模塊的選擇信號(hào)輸 出當(dāng)前地址繞回使能狀態(tài)值;還用于存儲(chǔ)繞回地址;所述控制模塊根據(jù)地址繞回模塊輸出的當(dāng)前地址繞回使能狀態(tài)值,決定是 否進(jìn)行地址繞回,如果當(dāng)前地址繞回使能狀態(tài)值為有效,則從地址繞回模塊中 讀取繞回地址,并發(fā)出控制命令,使下一次數(shù)據(jù)傳輸從繞回地址開始。
10、 如權(quán)利要求9所述的DMA控制器,其特征在于,所述地址繞回模塊 包括第一地址繞回使能狀態(tài)寄存器和第二地址繞回使能狀態(tài)寄存器,均用于存 儲(chǔ)地址繞回使能狀態(tài)值,且在每次外部數(shù)據(jù)緩存與內(nèi)存間的DMA數(shù)據(jù)傳輸中 交替使用; 選擇器,用于接收控制模塊的選擇信號(hào),選擇第一地址繞回使能狀態(tài)寄存 器中的值和第二地址繞回使能狀態(tài)寄存器中的值之一作為當(dāng)前地址繞回使能狀態(tài)值,并輸出給控制模塊;繞回地址存儲(chǔ)單元,用于存儲(chǔ)繞回地址。
11、 如權(quán)利要求10所述的DMA控制器,其特征在于所述繞回地址為內(nèi) 存的起始地址。
12、 如權(quán)利要求9所述的DMA控制器,其特征在于,所述寄存器組包括 通道狀態(tài)寄存器,用于存儲(chǔ)通道狀態(tài)值;DMA使能狀態(tài)寄存器,用于存儲(chǔ)DMA使能狀態(tài)值;外部數(shù)據(jù)緩存空間大小寄存器,用于存儲(chǔ)由CPU配置的外部數(shù)據(jù)緩存的大 小值;內(nèi)存空間大小寄存器,用于存儲(chǔ)由CPU配置的內(nèi)存空間的大小值; 中斷產(chǎn)生長(zhǎng)度寄存器,用于存儲(chǔ)在數(shù)據(jù)傳輸過程中中斷產(chǎn)生時(shí)傳輸數(shù)據(jù)量 的值;當(dāng)前地址寄存器,用于存儲(chǔ)數(shù)據(jù)傳輸在內(nèi)存中的當(dāng)前地址。
13、 如權(quán)利要求9所述的DMA控制器,其特征在于,所述計(jì)數(shù)器組包括第一計(jì)數(shù)器,用于在一次外部設(shè)備與外部數(shù)據(jù)緩存間的數(shù)據(jù)傳輸中對(duì)所傳 輸?shù)淖止?jié)數(shù)進(jìn)行計(jì)數(shù);所述控制模塊,用于在進(jìn)行數(shù)據(jù)傳輸期間,控制第一計(jì)數(shù)器進(jìn)行計(jì)數(shù);并 通過比較第一計(jì)數(shù)器的計(jì)數(shù)值與外部數(shù)據(jù)緩存空間大小,來判斷外部設(shè)備與外 部數(shù)據(jù)緩存間傳輸?shù)淖止?jié)數(shù)是否達(dá)到外部數(shù)據(jù)緩存空間大小,達(dá)到時(shí),則向外 部設(shè)備發(fā)送完成本次外部設(shè)備與外部數(shù)據(jù)緩存間的數(shù)據(jù)傳輸?shù)男盘?hào)。
14、 如權(quán)利要求13所述的DMA控制器,其特征在于,所述計(jì)數(shù)器組還包括第二計(jì)數(shù)器,用于在一次外部數(shù)據(jù)緩存與內(nèi)存間數(shù)據(jù)傳輸中對(duì)所傳輸?shù)淖止?jié)數(shù)進(jìn)行計(jì)數(shù);所述控制模塊,用于在進(jìn)行數(shù)據(jù)傳輸期間,控制第二計(jì)數(shù)器進(jìn)行計(jì)數(shù);并 通過比較第二計(jì)數(shù)器的計(jì)數(shù)值與內(nèi)存空間大小寄存器中的數(shù)值,來判斷外部數(shù) 據(jù)緩存與內(nèi)存間傳輸?shù)淖止?jié)數(shù)是否達(dá)到內(nèi)存空間的大小,達(dá)到時(shí),則向CPU發(fā) 出通道完成傳輸中斷請(qǐng)求,表示完成一次外部數(shù)據(jù)緩存與內(nèi)存間的DMA數(shù)據(jù) 傳輸;所述控制模塊根據(jù)來自地址繞回模塊的當(dāng)前地址繞回使能狀態(tài)值決定是 否進(jìn)行地址繞回,如果當(dāng)前地址繞回使能狀態(tài)值為有效,則從地址繞回模塊讀 取繞回地址,作為下一次數(shù)據(jù)傳輸?shù)钠鹗嫉刂贰?br>
15、如權(quán)利要求14所述的DMA控制器,其特征在于,所述計(jì)數(shù)器組還包括第三計(jì)數(shù)器,用于在產(chǎn)生兩個(gè)中斷之間外部數(shù)據(jù)緩存與內(nèi)存件數(shù)據(jù)傳輸中 對(duì)所傳輸?shù)淖止?jié)數(shù)進(jìn)行計(jì)數(shù);所述控制模塊,用于分別在外部數(shù)據(jù)緩存與內(nèi)存間開始進(jìn)行DMA數(shù)據(jù)傳 輸時(shí)和在發(fā)出數(shù)據(jù)處理中斷請(qǐng)求時(shí)控制第三計(jì)數(shù)器進(jìn)行計(jì)數(shù);并通過比較第三 計(jì)數(shù)器的計(jì)數(shù)值與中斷產(chǎn)生長(zhǎng)度,來判斷從數(shù)據(jù)傳輸開始或發(fā)出數(shù)據(jù)處理中斷 請(qǐng)求起外部數(shù)據(jù)緩存與內(nèi)存間進(jìn)行的數(shù)據(jù)傳輸是否達(dá)到中斷產(chǎn)生長(zhǎng)度,達(dá)到時(shí), 則向CPU發(fā)出數(shù)據(jù)處理中斷,如果DMA數(shù)據(jù)傳輸是向內(nèi)存寫數(shù)據(jù),CPU從內(nèi)存中已寫有數(shù)據(jù)的區(qū)域讀 出數(shù)據(jù); ■如果DMA數(shù)據(jù)傳輸是讀取內(nèi)存讀數(shù)據(jù),CPU向內(nèi)存中已讀出數(shù)據(jù)的區(qū)域 寫入數(shù)據(jù);發(fā)出通道完成傳輸中斷請(qǐng)求,表示完成一次外部凄t據(jù)緩存與內(nèi)存間的DMA 數(shù)據(jù)傳輸;所述控制模塊根據(jù)來自地址繞回模塊的當(dāng)前地址繞回使能狀態(tài)值決 定是否進(jìn)行地址繞回,如果當(dāng)前地址繞回使能狀態(tài)值為有效,則從地址繞回模 塊讀取繞回地址,作為下一次數(shù)據(jù)傳輸?shù)钠鹗嫉刂贰?br>
全文摘要
本發(fā)明提供的一種DMA數(shù)據(jù)傳輸?shù)姆椒癉MA控制器,是通過在現(xiàn)有技術(shù)的基礎(chǔ)上,增加地址繞回步驟,在向內(nèi)存讀/寫數(shù)據(jù)到達(dá)內(nèi)存終止地址時(shí),交替根據(jù)兩個(gè)地址繞回使能狀態(tài)寄存判斷是否將讀/寫地址繞回到內(nèi)存起始地址。由于其中一個(gè)地址繞回使能狀態(tài)值在另一個(gè)地址繞回使能狀態(tài)值在被使用時(shí)已經(jīng)被設(shè)置好,因此在完成一次數(shù)據(jù)傳輸能夠及時(shí)找到下次傳輸?shù)牡刂?,無需再次啟動(dòng)DMA,從而避免出現(xiàn)由于上一次傳輸結(jié)束中斷和啟動(dòng)DMA存在時(shí)間間隔,而導(dǎo)致數(shù)據(jù)丟失的問題。
文檔編號(hào)G06F13/28GK101339541SQ200810118230
公開日2009年1月7日 申請(qǐng)日期2008年8月11日 優(yōu)先權(quán)日2008年8月11日
發(fā)明者李曉強(qiáng) 申請(qǐng)人:北京中星微電子有限公司