專利名稱:采用直接存儲(chǔ)器訪問(wèn)方式進(jìn)行數(shù)據(jù)傳送的方法
技術(shù)領(lǐng)域:
本發(fā)明涉及一種數(shù)據(jù)傳送的方法,尤其涉及一種采用直接存儲(chǔ)器訪問(wèn)方式進(jìn)行數(shù)據(jù)傳送的方法。
背景技術(shù):
移動(dòng)終端的發(fā)展趨勢(shì)要求移動(dòng)終端具有更長(zhǎng)的待機(jī)時(shí)間和更小的體積。更長(zhǎng)的待機(jī)時(shí)間要求移動(dòng)終端在芯片的設(shè)計(jì)上滿足更低的功耗,軟件更精簡(jiǎn),效率更高;更小的體積需要移動(dòng)終端所使用的芯片更加微型化。
移動(dòng)終端的CPU(Central Processing Unit,中央處理器)采用DMA(DirectMemory Access,直接存儲(chǔ)器訪問(wèn))方式對(duì)外設(shè)進(jìn)行寫入和讀出操作,DMA方式是一種高速的數(shù)據(jù)傳輸操作,允許在外設(shè)和內(nèi)存之間直接讀寫數(shù)據(jù),即不通過(guò)CPU,也不需要CPU干預(yù),整個(gè)數(shù)據(jù)傳輸操作在DMA控制器的控制下進(jìn)行。CPU除了在數(shù)據(jù)傳輸?shù)拈_始和結(jié)束時(shí)作一些處理外,在傳輸過(guò)程中CPU可以進(jìn)行其它的工作。這樣,在大部分時(shí)間里,CPU和輸入輸出都處于并行操作的狀態(tài)。DMA一般有多個(gè)彼此獨(dú)立的通道,允許進(jìn)行不同的訪問(wèn)控制,可以進(jìn)行不同內(nèi)容的DMA傳輸,DMA可以以CPU時(shí)鐘的速度進(jìn)行數(shù)據(jù)吞吐,具有較高的數(shù)據(jù)吞吐率。
目前采用DMA方式對(duì)地址空間中的幾塊內(nèi)存中的數(shù)據(jù)進(jìn)行傳送時(shí)的方法是CPU首先在DMA通道的中斷服務(wù)程序或應(yīng)用程序中設(shè)定該通道的DMA傳輸特性,傳輸特性中包括源地址、目的地址和控制特性等,DMA發(fā)起通道傳送,傳送結(jié)束后觸發(fā)中斷,在該通道的中斷服務(wù)程序或應(yīng)用程序中重新設(shè)定該DMA通道下一次的DMA傳輸特性(包括源地址、目的地址和控制特性等),然后再次啟動(dòng)此通道。這種方式需要反復(fù)的結(jié)束和開啟DMA通道,CPU需要頻繁的進(jìn)行干預(yù),其中DMA通道的結(jié)束由DMA的硬件根據(jù)控制特性中初始設(shè)定的傳送大小來(lái)控制,DMA通道的啟動(dòng)需要在CPU的控制下通過(guò)軟件來(lái)實(shí)現(xiàn),頻繁的結(jié)束和啟動(dòng)DMA通道會(huì)帶來(lái)一定的軟件開銷,過(guò)多的占用CPU的處理時(shí)間,造成系統(tǒng)性能的下降。
目前采用DMA方式進(jìn)行的傳輸都是單向傳輸,由于外設(shè)都是能同時(shí)收發(fā)數(shù)據(jù)的,因此外設(shè)在進(jìn)行數(shù)據(jù)雙向收發(fā)時(shí)就需要占用兩個(gè)DMA通道,一個(gè)DMA通道用來(lái)接收外設(shè)到內(nèi)存的數(shù)據(jù),另一個(gè)DMA通道用來(lái)發(fā)送內(nèi)存到外設(shè)的數(shù)據(jù)。兩個(gè)通道可以認(rèn)為是各自獨(dú)立的,各自完成的接收或發(fā)送功能。由于DMA通道的資源是有限的,因此當(dāng)DMA需要連接多個(gè)外設(shè)時(shí),就有可能會(huì)出現(xiàn)通道資源不夠用的情況。
發(fā)明內(nèi)容
本發(fā)明的目的在于提供一種采用直接存儲(chǔ)器訪問(wèn)方式進(jìn)行數(shù)據(jù)傳送的方法,解決了現(xiàn)有技術(shù)中采用DMA方式進(jìn)行數(shù)據(jù)傳送時(shí)需要反復(fù)的結(jié)束和開啟DMA通道的問(wèn)題以及采用DMA方式同時(shí)收發(fā)數(shù)據(jù)時(shí)需要占用兩個(gè)DMA通道的問(wèn)題。
為解決上述問(wèn)題,本發(fā)明提供以下技術(shù)方案一種采用直接存儲(chǔ)器訪問(wèn)方式進(jìn)行數(shù)據(jù)傳送的方法,包括以下步驟A、設(shè)置由兩個(gè)鏈表表項(xiàng)構(gòu)成的環(huán)形鏈表,鏈表表項(xiàng)內(nèi)的內(nèi)容包括源地址、目的地址、鏈路地址索引和通道傳輸控制,兩個(gè)鏈表表項(xiàng)之間通過(guò)鏈路地址索引相互鏈接;B、處理器將所述兩個(gè)鏈表表項(xiàng)中的一個(gè)鏈表表項(xiàng)加載到直接存儲(chǔ)器訪問(wèn)控制器;C、直接存儲(chǔ)器訪問(wèn)控制器根據(jù)通道傳輸控制中配置的傳送數(shù)據(jù)量,將數(shù)據(jù)從源地址傳送到目的地址,并在該數(shù)據(jù)傳送完成后根據(jù)鏈路地址索引加載另一個(gè)鏈表表項(xiàng)進(jìn)行數(shù)據(jù)傳送,直到所有數(shù)據(jù)傳送結(jié)束。
所述步驟C具體包括以下步驟C1、直接存儲(chǔ)器訪問(wèn)控制器根據(jù)通道傳輸控制中配置的傳送數(shù)據(jù)量,將數(shù)據(jù)從源地址傳送到目的地址;C2、數(shù)據(jù)傳送完成后,直接存儲(chǔ)器訪問(wèn)控制器向處理器發(fā)出中斷信號(hào),并在通道的狀態(tài)寄存器中記錄本次數(shù)據(jù)傳送的結(jié)果,若傳送成功則進(jìn)行步驟C3,若傳送失敗則結(jié)束傳送過(guò)程,并通知上層軟件;C3、中斷服務(wù)程序清除此中斷信號(hào),直接存儲(chǔ)器訪問(wèn)控制器根據(jù)鏈表表項(xiàng)中的鏈路地址索引加載另一個(gè)鏈表表項(xiàng)的內(nèi)容進(jìn)行數(shù)據(jù)傳送,直到所有數(shù)據(jù)傳送結(jié)束。
所述環(huán)形鏈表可以配置成單向傳送模式或雙向收發(fā)模式。
在單向傳送模式中,當(dāng)數(shù)據(jù)是由內(nèi)存向外設(shè)傳送時(shí),在步驟C中處理器將最后一次傳送所對(duì)應(yīng)的鏈表數(shù)據(jù)設(shè)置為空,數(shù)據(jù)傳送結(jié)束;當(dāng)數(shù)據(jù)是由外設(shè)向內(nèi)存?zhèn)魉蜁r(shí),在步驟C中若外設(shè)寄存器在設(shè)定的時(shí)間內(nèi)沒(méi)有收到外設(shè)的數(shù)據(jù),則觸發(fā)超時(shí)中斷,外設(shè)寄存器將剩下的數(shù)據(jù)傳輸完畢后關(guān)閉外設(shè)和直接存儲(chǔ)器訪問(wèn)通道。
在雙向收發(fā)模式中,若從外設(shè)到內(nèi)存的數(shù)據(jù)接收比從內(nèi)存到外設(shè)的數(shù)據(jù)發(fā)送先結(jié)束,則將數(shù)據(jù)接收方向所對(duì)應(yīng)的鏈表表項(xiàng)中的源地址和目的地址交換,將環(huán)形鏈表配置為從內(nèi)存到外設(shè)的單向傳送模式;若從內(nèi)存到外設(shè)的數(shù)據(jù)發(fā)送比從外設(shè)到內(nèi)存的數(shù)據(jù)接收先結(jié)束,則將數(shù)據(jù)發(fā)送方向所對(duì)應(yīng)的鏈表表項(xiàng)中的源地址和目的地址交換,將環(huán)形鏈表配置為從外設(shè)到內(nèi)存的單向傳送模式。
由于本發(fā)明采用了以上技術(shù)方案,故具有以下有益效果本發(fā)明配置了一個(gè)環(huán)形鏈表來(lái)完成DMA方式的數(shù)據(jù)傳送,通過(guò)對(duì)環(huán)形鏈表中兩個(gè)鏈表表項(xiàng)的內(nèi)容不同配置,可以在一條DMA通道上進(jìn)行數(shù)據(jù)的單向傳送或雙向收發(fā),在單向傳送模式下,可以進(jìn)行快速連續(xù)的DMA傳送,在雙向收發(fā)模式下,DMA可以連接更多的外設(shè),從而充分的發(fā)揮了DMA的效能,較少的占用了CPU的處理時(shí)間,使整個(gè)系統(tǒng)可以工作在更低的頻率下,降低了系統(tǒng)的功耗,能夠使移動(dòng)終端具有更長(zhǎng)的待機(jī)時(shí)間。
圖1為本發(fā)明采用DMA方式進(jìn)行數(shù)據(jù)傳送的流程圖;圖2為本發(fā)明在進(jìn)行數(shù)據(jù)連續(xù)接收時(shí)的示意圖;圖3為本發(fā)明的環(huán)形鏈表示意圖;圖4為本發(fā)明在進(jìn)行數(shù)據(jù)連續(xù)發(fā)送時(shí)的示意圖。
具體實(shí)施例方式
下面結(jié)合附圖對(duì)本發(fā)明作進(jìn)一步詳細(xì)的描述。
圖1所示為本發(fā)明采用DMA方式進(jìn)行數(shù)據(jù)傳送的流程圖,其過(guò)程如下設(shè)置一由兩個(gè)鏈表表項(xiàng)構(gòu)成的環(huán)形鏈表,鏈表表項(xiàng)的內(nèi)容包括源地址、目的地址、鏈路地址索引和通道傳輸控制,兩個(gè)鏈表表項(xiàng)之間通過(guò)鏈路地址索引相互鏈接;將其中一個(gè)鏈表表項(xiàng)的內(nèi)容加載到DMA控制器中,根據(jù)鏈表表項(xiàng)內(nèi)的通道傳輸控制中配置的傳送數(shù)據(jù)量,將數(shù)據(jù)從源地址傳送到目的地址;數(shù)據(jù)傳送完畢后,DMA控制器根據(jù)鏈表表項(xiàng)中的鏈路地址索引加載另一個(gè)鏈表表項(xiàng)的內(nèi)容,進(jìn)行數(shù)據(jù)傳送,循環(huán)加載兩個(gè)鏈表表項(xiàng)中的內(nèi)容,直到數(shù)據(jù)傳送結(jié)束。
上述數(shù)據(jù)傳送過(guò)程可根據(jù)需要配置成單向傳送模式或雙向收發(fā)模式,單向傳送模式下的DMA傳輸可將數(shù)據(jù)在外設(shè)與內(nèi)存之間進(jìn)行單向的連續(xù)傳送,雙向收發(fā)模式下的DMA傳輸能夠利用單DMA通道進(jìn)行數(shù)據(jù)的雙向收發(fā)。
單向傳送模式下的DMA傳輸過(guò)程可分為從外設(shè)到內(nèi)存的數(shù)據(jù)接收過(guò)程和從內(nèi)存到外設(shè)的數(shù)據(jù)發(fā)送過(guò)程,下面分別對(duì)其予以說(shuō)明(一)從外設(shè)到內(nèi)存的數(shù)據(jù)接收過(guò)程圖2所示為從外設(shè)到內(nèi)存的數(shù)據(jù)接收過(guò)程中的數(shù)據(jù)流和控制流,其中虛線表示控制流,實(shí)線表示數(shù)據(jù)流,控制流表示CPU對(duì)外設(shè)和DMA的配置信息,DMA反饋給CPU的中斷信息等,數(shù)據(jù)流表示DMA把數(shù)據(jù)從外設(shè)搬進(jìn)內(nèi)存。
圖3所示為所配置的環(huán)形鏈表,在環(huán)形鏈表中,鏈表表項(xiàng)1的各項(xiàng)參數(shù)設(shè)置為源地址1為圖2中外設(shè)的數(shù)據(jù)寄存器的地址,目的地址1為圖2中的RAM塊1的地址,LLI1指向的是鏈表表項(xiàng)2在內(nèi)存中的存儲(chǔ)地址,通道傳輸控制1配置的是此次傳輸時(shí)的控制字,其中設(shè)定了本次的搬移數(shù)據(jù)大小,控制字中所設(shè)定的搬移數(shù)據(jù)大小就是圖2中RAM塊1空間的大小。
鏈表表項(xiàng)2的各項(xiàng)參數(shù)設(shè)置為源地址2為圖2中外設(shè)的數(shù)據(jù)寄存器的地址,目的地址2為圖2中的RAM塊2的地址,LLI2指向的是鏈表表項(xiàng)1在內(nèi)存中的存儲(chǔ)地址,通道傳輸控制2配置的是此次傳輸時(shí)的控制字,其中設(shè)定了本次的搬移數(shù)據(jù)大小,控制字中所設(shè)定的搬移數(shù)據(jù)大小就是圖2中RAM塊2空間的大小。
環(huán)形鏈表配置完成后,CPU將鏈表表項(xiàng)1中的內(nèi)容加載到DMA控制器中,DMA控制器中有一個(gè)LLI(Linked List Item,鏈路地址索引)控制寄存器,鏈表表項(xiàng)1中的LLI1被加載到LLI控制寄存器中,此時(shí)LLI控制寄存器中指向的是鏈表表項(xiàng)2的地址,啟動(dòng)該DMA通道進(jìn)行數(shù)據(jù)的搬移,根據(jù)鏈表表項(xiàng)1中的目的地址1,DMA將數(shù)據(jù)搬移到RAM塊1,由于通道傳輸控制1中的控制字所設(shè)定的搬移數(shù)據(jù)大小正好等于RAM塊1空間的大小,因此當(dāng)DMA搬完指定的數(shù)據(jù)時(shí)剛好裝滿RAM塊1。DMA控制器向CPU發(fā)出一個(gè)中斷信號(hào),并在相應(yīng)通道的狀態(tài)寄存器中反映本次搬移的結(jié)果。
中斷服務(wù)程序清除DMA控制器發(fā)出的中斷信號(hào),DMA控制器根據(jù)LLI1所指向的鏈表表項(xiàng)2的地址自動(dòng)將鏈表表項(xiàng)2中的內(nèi)容加載到DMA控制器中,根據(jù)所加載的鏈表表項(xiàng)2中的目的地址2,DMA將數(shù)據(jù)搬移到RAM塊2,由于通道傳輸控制2中的控制字所設(shè)定的搬移數(shù)據(jù)大小正好等于RAM塊2空間的大小,因此當(dāng)DMA搬完指定的數(shù)據(jù)時(shí)剛好裝滿RAM塊2。DMA控制器向CPU發(fā)出一個(gè)中斷信號(hào),并在通道的狀態(tài)寄存器中反映本次搬移的結(jié)果。中斷服務(wù)程序清除DMA控制器發(fā)出的中斷信號(hào),DMA控制器根據(jù)LLI2所指向的鏈表表項(xiàng)1的地址自動(dòng)將鏈表表項(xiàng)1中的內(nèi)容加載到DMA控制器中并啟動(dòng)DMA搬移。
根據(jù)環(huán)形鏈表的內(nèi)容循環(huán)加載鏈表表項(xiàng)1和鏈表表項(xiàng)2,直到數(shù)據(jù)全部傳送完畢。當(dāng)外設(shè)的數(shù)據(jù)寄存器在設(shè)定的時(shí)間內(nèi)沒(méi)有收到數(shù)據(jù)時(shí),則觸發(fā)超時(shí)中斷處理,此時(shí)會(huì)將外設(shè)的數(shù)據(jù)寄存器中目前剩下的數(shù)據(jù)傳輸完畢,并關(guān)閉外設(shè)和此DMA通道。
可以通過(guò)合理的設(shè)置RAM1和RAM2的大小(一般可以設(shè)置為相同大小),使得從外設(shè)向其中一個(gè)RAM塊搬移的過(guò)程中,能夠給CPU留有充分的時(shí)間來(lái)處理另一個(gè)RAM塊中的數(shù)據(jù),從而在新的數(shù)據(jù)到來(lái)時(shí),舊的數(shù)據(jù)已經(jīng)處理完了。
(二)從內(nèi)存到外設(shè)的數(shù)據(jù)發(fā)送過(guò)程圖4所示為從外設(shè)到內(nèi)存的數(shù)據(jù)接收過(guò)程中的數(shù)據(jù)流和控制流,其中虛線表示控制流,實(shí)線表示數(shù)據(jù)流,控制流表示CPU對(duì)外設(shè)和DMA的配置信息,DMA反饋給CPU的中斷信息等,數(shù)據(jù)流表示DMA把數(shù)據(jù)從內(nèi)存搬移到外設(shè)。
將圖3所示的環(huán)形鏈表的鏈表表項(xiàng)1的各參數(shù)設(shè)置為源地址1為內(nèi)存RAM塊1的地址,目的地址1為外設(shè)的接收數(shù)據(jù)寄存器的地址,LLI1指向的是鏈表表項(xiàng)2的地址,通道傳輸控制1配置的是此次傳輸時(shí)的控制字,包括搬移的數(shù)據(jù)大小等,控制字中所設(shè)定的搬移數(shù)據(jù)大小就是RAM塊1空間的大小。鏈表表項(xiàng)2的各參數(shù)設(shè)置為源地址2為內(nèi)存RAM塊2的地址,目的地址2為外設(shè)的接收數(shù)據(jù)寄存器的地址,LLI2指向的是鏈表表項(xiàng)1的地址,通道傳輸控制2中所設(shè)定的搬移數(shù)據(jù)大小就是RAM塊2空間的大小。
環(huán)形鏈表配置完成后,CPU將鏈表表項(xiàng)1中的內(nèi)容加載到DMA通道控制器中,DMA通道將數(shù)據(jù)從RAM塊1搬移到外設(shè)的數(shù)據(jù)寄存器中,所搬移的數(shù)據(jù)大小等于RAM塊1空間的大小。在RAM塊1內(nèi)的數(shù)據(jù)搬移完成后,DMA會(huì)觸發(fā)一個(gè)中斷,并在通道的狀態(tài)寄存器中反映此次搬移是否成功,中斷服務(wù)程序清除DMA控制器發(fā)出的中斷信號(hào),同時(shí)DMA控制器根據(jù)LLI1所指向的鏈表表項(xiàng)2的地址自動(dòng)將鏈表表項(xiàng)2中的內(nèi)容加載到DMA控制器中,根據(jù)所加載的鏈表表項(xiàng)2的內(nèi)容,DMA通道將RAM塊2內(nèi)的數(shù)據(jù)搬移到外設(shè)的數(shù)據(jù)寄存器中,所搬移的數(shù)據(jù)大小等于RAM塊2空間的大小。當(dāng)搬移完畢后,DMA通道控制器中又會(huì)根據(jù)LLI2所指向的鏈表表項(xiàng)1的地址自動(dòng)加載鏈表表項(xiàng)1的內(nèi)容,開始對(duì)RAM塊1中的數(shù)據(jù)進(jìn)行DMA搬移,按照這種方式,數(shù)據(jù)就可以周而復(fù)始的進(jìn)行搬移,從而實(shí)現(xiàn)最小的CPU干預(yù)。
由于CPU是數(shù)據(jù)的發(fā)送方,DMA通道只是協(xié)助進(jìn)行相應(yīng)的數(shù)據(jù)搬移,因此CPU清楚的知道最后一塊數(shù)據(jù)所在的內(nèi)存位置,CPU將最后一次DMA傳輸時(shí)對(duì)應(yīng)的鏈表數(shù)據(jù)設(shè)置為空,即可結(jié)束整個(gè)DMA傳輸。
雙向收發(fā)模式下的DMA傳輸主要用于收發(fā)雙方數(shù)據(jù)的速率均為固定速率的情況,利用一條DMA通道對(duì)兩個(gè)內(nèi)存塊中的數(shù)據(jù)進(jìn)行交叉讀寫操作,采用環(huán)形鏈表方式將讀操作和寫操作的控制信息以鏈表的形式連接起來(lái),當(dāng)環(huán)形鏈表中的一個(gè)鏈表表項(xiàng)傳送完畢后,DMA控制器會(huì)向CPU發(fā)出一個(gè)中斷信號(hào),并在相應(yīng)的狀態(tài)寄存器中保存本次傳送的結(jié)果(成功或失敗)。同時(shí),DMA控制器會(huì)根據(jù)當(dāng)前的LLI控制寄存器中的內(nèi)容自動(dòng)從RAM的空間中加載另一個(gè)鏈表表項(xiàng)。這樣反復(fù)加載讀操作和寫操作所對(duì)應(yīng)的鏈表表項(xiàng),即可實(shí)現(xiàn)利用一條DMA通道對(duì)兩個(gè)內(nèi)存塊中的數(shù)據(jù)進(jìn)行交叉讀寫操作。
下面以一個(gè)外設(shè)到內(nèi)存的數(shù)據(jù)收發(fā)過(guò)程的DMA搬移為例,來(lái)說(shuō)明采用單DMA通道進(jìn)行數(shù)據(jù)雙向收發(fā)的過(guò)程。
將圖3所示的環(huán)形鏈表的鏈表表項(xiàng)1的各參數(shù)設(shè)置為源地址1為外設(shè)的數(shù)據(jù)寄存器的地址,目的地址1為RAM塊1的地址,LLI1指向的是鏈表表項(xiàng)2的地址,通道傳輸控制1配置的是此次傳輸時(shí)的控制字,其中設(shè)定了搬移的數(shù)據(jù)大小,控制字中所設(shè)定的搬移數(shù)據(jù)大小正好等于RAM塊1空間的大小。
鏈表表項(xiàng)2的各參數(shù)設(shè)置為源地址2為RAM塊2的地址,目的地址2為外設(shè)的數(shù)據(jù)寄存器的地址,LLI2指向的是鏈表表項(xiàng)1的地址,通道傳輸控制2配置的是此次傳輸時(shí)的控制字,其中設(shè)定了搬移的數(shù)據(jù)大小,控制字中所設(shè)定的搬移數(shù)據(jù)大小正好等于RAM塊2空間的大小。
環(huán)形鏈表配置完成后,CPU將鏈表表項(xiàng)1中的內(nèi)容加載到DMA控制器中,然后啟動(dòng)該DMA通道進(jìn)行數(shù)據(jù)的搬移,根據(jù)鏈表表項(xiàng)1中的源地址1和目的地址1,DMA將外設(shè)的數(shù)據(jù)寄存器內(nèi)的數(shù)據(jù)搬移到RAM塊1,由于通道傳輸控制1中的控制字所設(shè)定的搬移數(shù)據(jù)大小正好等于RAM塊1空間的大小,因此當(dāng)DMA搬完指定的數(shù)據(jù)時(shí),RAM塊1的空間剛好被裝滿,DMA控制器向CPU發(fā)出一個(gè)中斷信號(hào)并在通道的狀態(tài)寄存器中反映本次搬移的結(jié)果是否成功,若失敗,傳輸結(jié)束并通知上層軟件,若成功,中斷服務(wù)程序清除此中斷,同時(shí)DMA控制器根據(jù)LL1中的鏈表地址自動(dòng)加載鏈表表項(xiàng)2。
根據(jù)所加載的鏈表表項(xiàng)2中的源地址2和目的地址2,DMA通道將數(shù)據(jù)從RAM塊2搬移到外設(shè)的數(shù)據(jù)寄存器,所搬移的數(shù)據(jù)大小正好等于RAM塊2空間的大小,DMA控制器向CPU發(fā)出一中斷信號(hào)并在通道的狀態(tài)寄存器中反映本次搬移的結(jié)果,中斷服務(wù)程序?qū)⑶宄酥袛嘈盘?hào),退出中斷。在DMA發(fā)出中斷的同時(shí),DMA控制器會(huì)根據(jù)LLI2中的鏈表表項(xiàng)1的地址自動(dòng)將將鏈表表項(xiàng)1的內(nèi)容再次加載到DMA的控制器中,啟動(dòng)DMA搬移,再次對(duì)RAM塊1進(jìn)行寫操作。
根據(jù)環(huán)形鏈表的內(nèi)容循環(huán)加載鏈表表項(xiàng)1和鏈表表項(xiàng)2,直到對(duì)RAM塊1進(jìn)行寫操作和對(duì)RAM塊2進(jìn)行讀操作中的任何一方的數(shù)據(jù)搬移完畢,對(duì)于發(fā)送而言,由于CPU是數(shù)據(jù)的發(fā)起方,因此CPU可以明確的知道什么時(shí)候發(fā)出最后一塊數(shù)據(jù),可以通過(guò)在內(nèi)存中設(shè)置一個(gè)結(jié)束標(biāo)志位來(lái)指明,在中斷服務(wù)程序中每次都先檢查一下結(jié)束標(biāo)志位的狀態(tài),就可以知道是否發(fā)送要結(jié)束了。
對(duì)于接收而言,可以根據(jù)該外設(shè)接收超時(shí)中斷來(lái)決定,即在該外設(shè)設(shè)定的時(shí)間內(nèi),外設(shè)端口不再有新的數(shù)據(jù)到來(lái)了,則認(rèn)為接收結(jié)束了,通過(guò)中斷服務(wù)程序完成接收操作。
剩下的一方此時(shí)重新配置環(huán)形鏈表,將雙向收發(fā)模式轉(zhuǎn)換成單向傳送模式,如果是發(fā)送結(jié)束了,則可以把原來(lái)用于發(fā)送的那塊RAM重新當(dāng)成接收RAM來(lái)使用,進(jìn)行數(shù)據(jù)搬移。如果是接收結(jié)束了,則可以把原來(lái)用于接收的那塊RAM塊重新當(dāng)成發(fā)送RAM來(lái)使用,進(jìn)行數(shù)據(jù)搬移。
若轉(zhuǎn)換后的單向傳送模式為從內(nèi)存向外設(shè)的數(shù)據(jù)發(fā)送過(guò)程,則需將環(huán)形鏈表中鏈表表項(xiàng)1的各參數(shù)設(shè)置為源地址1為內(nèi)存中RAM塊1的地址,目的地址1為外設(shè)的數(shù)據(jù)寄存器的地址,LLI1指向的是鏈表表項(xiàng)2的地址,通道傳輸控制1配置的是此次傳輸時(shí)的控制字,其中設(shè)定了搬移的數(shù)據(jù)大小,所設(shè)定的搬移數(shù)據(jù)大小就是RAM1空間的大小,鏈表表項(xiàng)2的內(nèi)容不變。
若轉(zhuǎn)換后的單向傳送模式為從外設(shè)向內(nèi)存的數(shù)據(jù)接收過(guò)程,則需將環(huán)形鏈表中鏈表表項(xiàng)2的各參數(shù)設(shè)置為源地址2為外設(shè)的接收數(shù)據(jù)寄存器的地址,目的地址2表示內(nèi)存中RAM塊2的地址,LLI2指向的是鏈表表項(xiàng)1的地址,通道傳輸控制2配置的是此次傳輸時(shí)的控制字,其中設(shè)定了搬移的數(shù)據(jù)大小,所設(shè)定搬移的數(shù)據(jù)大小就是RAM2空間的大小,鏈表表項(xiàng)1的內(nèi)容不變。
以上所述,僅為本發(fā)明較佳的具體實(shí)施方式
,但本發(fā)明的保護(hù)范圍并不局限于此,任何熟悉本技術(shù)領(lǐng)域的技術(shù)人員在本發(fā)明揭露的技術(shù)范圍內(nèi),可輕易想到的變化或替換,都應(yīng)涵蓋在本發(fā)明的保護(hù)范圍之內(nèi)。因此,本發(fā)明的保護(hù)范圍應(yīng)該以權(quán)利要求書的保護(hù)范圍為準(zhǔn)。
權(quán)利要求
1.一種采用直接存儲(chǔ)器訪問(wèn)方式進(jìn)行數(shù)據(jù)傳送的方法,其特征在于包括以下步驟A、設(shè)置由兩個(gè)鏈表表項(xiàng)構(gòu)成的環(huán)形鏈表,鏈表表項(xiàng)內(nèi)的內(nèi)容包括源地址、目的地址、鏈路地址索引和通道傳輸控制,兩個(gè)鏈表表項(xiàng)之間通過(guò)鏈路地址索引相互鏈接;B、處理器將所述兩個(gè)鏈表表項(xiàng)中的一個(gè)鏈表表項(xiàng)加載到直接存儲(chǔ)器訪問(wèn)控制器;C、直接存儲(chǔ)器訪問(wèn)控制器根據(jù)通道傳輸控制中配置的傳送數(shù)據(jù)量,將數(shù)據(jù)從源地址傳送到目的地址,并在該數(shù)據(jù)傳送完成后根據(jù)鏈路地址索引加載另一個(gè)鏈表表項(xiàng)進(jìn)行數(shù)據(jù)傳送,直到所有數(shù)據(jù)傳送結(jié)束。
2.根據(jù)權(quán)利要求1所述的采用直接存儲(chǔ)器訪問(wèn)方式進(jìn)行數(shù)據(jù)傳送的方法,其特征在于所述步驟C具體包括以下步驟C1、直接存儲(chǔ)器訪問(wèn)控制器根據(jù)通道傳輸控制中配置的傳送數(shù)據(jù)量,將數(shù)據(jù)從源地址傳送到目的地址;C2、數(shù)據(jù)傳送完成后,直接存儲(chǔ)器訪問(wèn)控制器向處理器發(fā)出中斷信號(hào),并在通道的狀態(tài)寄存器中記錄本次數(shù)據(jù)傳送的結(jié)果,若傳送成功則進(jìn)行步驟C3,若傳送失敗則結(jié)束傳送過(guò)程,并通知上層軟件;C3、中斷服務(wù)程序清除此中斷信號(hào),直接存儲(chǔ)器訪問(wèn)控制器根據(jù)鏈表表項(xiàng)中的鏈路地址索引加載另一個(gè)鏈表表項(xiàng)的內(nèi)容進(jìn)行數(shù)據(jù)傳送,直到所有數(shù)據(jù)傳送結(jié)束。
3.根據(jù)權(quán)利要求1所述的采用直接存儲(chǔ)器訪問(wèn)方式進(jìn)行數(shù)據(jù)傳送的方法,其特征在于所述環(huán)形鏈表可以配置成單向傳送模式。
4.根據(jù)權(quán)利要求3所述的采用直接存儲(chǔ)器訪問(wèn)方式進(jìn)行數(shù)據(jù)傳送的方法,其特征在于在所述單向傳送模式中,當(dāng)數(shù)據(jù)是由內(nèi)存向外設(shè)傳送時(shí),在所述步驟C中處理器將最后一次傳送所對(duì)應(yīng)的鏈表數(shù)據(jù)設(shè)置為空,數(shù)據(jù)傳送結(jié)束。
5.根據(jù)權(quán)利要求3所述的采用直接存儲(chǔ)器訪問(wèn)方式進(jìn)行數(shù)據(jù)傳送的方法,其特征在于在所述單向傳送模式中,當(dāng)數(shù)據(jù)是由外設(shè)向內(nèi)存?zhèn)魉蜁r(shí),在所述步驟C中若外設(shè)寄存器在設(shè)定的時(shí)間內(nèi)沒(méi)有收到外設(shè)的數(shù)據(jù),則觸發(fā)超時(shí)中斷,外設(shè)寄存器將剩下的數(shù)據(jù)傳輸完畢后關(guān)閉外設(shè)和直接存儲(chǔ)器訪問(wèn)通道。
6.根據(jù)權(quán)利要求1所述的采用直接存儲(chǔ)器訪問(wèn)方式進(jìn)行數(shù)據(jù)傳送的方法,其特征在于所述環(huán)形鏈表可以配置成雙向收發(fā)模式。
7.根據(jù)權(quán)利要求6所述的采用直接存儲(chǔ)器訪問(wèn)方式進(jìn)行數(shù)據(jù)傳送的方法,其特征在于在所述雙向收發(fā)模式中,若從外設(shè)到內(nèi)存的數(shù)據(jù)接收比從內(nèi)存到外設(shè)的數(shù)據(jù)發(fā)送先結(jié)束,則將數(shù)據(jù)接收方向所對(duì)應(yīng)的鏈表表項(xiàng)中的源地址和目的地址交換,將環(huán)形鏈表配置為從內(nèi)存到外設(shè)的單向傳送模式。
8.根據(jù)權(quán)利要求7所述的采用直接存儲(chǔ)器訪問(wèn)方式進(jìn)行數(shù)據(jù)傳送的方法,其特征在于若外設(shè)寄存器在設(shè)定的時(shí)間內(nèi)沒(méi)有收到外設(shè)的數(shù)據(jù),則從外設(shè)到內(nèi)存的數(shù)據(jù)接收結(jié)束。
9.根據(jù)權(quán)利要求6所述的采用直接存儲(chǔ)器訪問(wèn)方式進(jìn)行數(shù)據(jù)傳送的方法,其特征在于在所述雙向收發(fā)模式中,若從內(nèi)存到外設(shè)的數(shù)據(jù)發(fā)送比從外設(shè)到內(nèi)存的數(shù)據(jù)接收先結(jié)束,則將數(shù)據(jù)發(fā)送方向所對(duì)應(yīng)的鏈表表項(xiàng)中的源地址和目的地址交換,將環(huán)形鏈表配置為從外設(shè)到內(nèi)存的單向傳送模式。
10.根據(jù)權(quán)利要求9所述的采用直接存儲(chǔ)器訪問(wèn)方式進(jìn)行數(shù)據(jù)傳送的方法,其特征在于根據(jù)在內(nèi)存中設(shè)定的結(jié)束標(biāo)志位的狀態(tài)來(lái)判斷從內(nèi)存到外設(shè)的數(shù)據(jù)發(fā)送是否結(jié)束。
全文摘要
本發(fā)明公開了一種采用直接存儲(chǔ)器訪問(wèn)方式進(jìn)行數(shù)據(jù)傳送的方法,以解決現(xiàn)有技術(shù)中采用DMA方式進(jìn)行數(shù)據(jù)傳送時(shí)需要反復(fù)的結(jié)束和開啟DMA通道的問(wèn)題以及采用DMA方式同時(shí)收發(fā)數(shù)據(jù)時(shí)需要占用兩個(gè)DMA通道的問(wèn)題。該方法設(shè)置一由兩個(gè)鏈表表項(xiàng)構(gòu)成的環(huán)形鏈表,兩個(gè)鏈表表項(xiàng)之間通過(guò)鏈路地址索引相互鏈接,處理器將一個(gè)鏈表表項(xiàng)加載到DMA控制器,DMA控制器根據(jù)通道傳輸控制中配置的傳送數(shù)據(jù)量,將數(shù)據(jù)從源地址傳送到目的地址,并在該數(shù)據(jù)傳送完成后根據(jù)鏈路地址索引加載另一個(gè)鏈表表項(xiàng)進(jìn)行數(shù)據(jù)傳送,直到所有數(shù)據(jù)傳送結(jié)束。本發(fā)明充分的發(fā)揮了DMA的效能,較少的占用了CPU的處理時(shí)間,使整個(gè)系統(tǒng)可以工作在更低的頻率下,降低了系統(tǒng)的功耗。
文檔編號(hào)H04Q7/32GK1797379SQ20041010253
公開日2006年7月5日 申請(qǐng)日期2004年12月24日 優(yōu)先權(quán)日2004年12月24日
發(fā)明者馬濤 申請(qǐng)人:華為技術(shù)有限公司