專利名稱:控制復(fù)雜非線性數(shù)據(jù)傳輸?shù)闹谱鞣椒?br>
技術(shù)領(lǐng)域:
本發(fā)明領(lǐng)域涉及數(shù)據(jù)處理,且特別涉及利用直接存儲器存取控制器的數(shù)據(jù)傳輸控制。
背景技術(shù):
已知的是,提供直接存儲器存取控制器或DMAC用于控制不同功能單元(例如存儲器和外圍設(shè)備)之間的數(shù)據(jù)訪問,而無需使用處理器且因此而中斷處理器。
DMA控制器可以控制多個外圍設(shè)備和存儲器之間的數(shù)據(jù)傳輸。為了控制一種特定的數(shù)據(jù)傳輸,直接存儲器存取控制器需要數(shù)據(jù)的初始源地址、目的地址、傳輸寬度,例如一個字即32位,以及傳輸大小,例如3072比特。這些可以被存儲在DMA控制器自身內(nèi)部。然而,如果DMA控制器在控制大量外圍設(shè)備的存儲器訪問的話,那么這種信息需要為每一個這些外圍設(shè)備或通道而存儲。這需要大量儲存以及增加DMA控制器的門數(shù)。一種已知的針對于此的方法是在存儲器中為每個通道存儲控制信息,并僅僅在DMA控制器中存儲指向它的指針。這可能是每個通道都具有一個的指針,或者可能是指向基地址的指針,用于各種通道的控制信息被存儲在這個地址的已知偏移量上。對于每個通道而言,如果數(shù)據(jù)傳輸為連續(xù)線性傳輸,那么這樣處理是很好的,然而,如果它們是異類的,例如分散/集中傳輸,其中數(shù)據(jù)被發(fā)送到幾個目的地或從幾個源取回,那么控制數(shù)據(jù)需要在傳輸之間更新,并且這需要由處理器來完成。
一種解決這種問題的已知方法是,通過使用鏈表(參看例如由ARM制成的PL08x DMAC,其詳細(xì)內(nèi)容被公布在http://www.Arm.com/pdfs/DDI0196G_dmac_p1080_r1p3_trm.pdf上)。在這樣的設(shè)置中,在DMAC中對于每個通道都存在一個的寄存器,指向用于該通道的鏈表。每個鏈表控制一塊數(shù)據(jù)的傳輸,并且接著可選地加載另一個鏈表來繼續(xù)DMA操作或停止DMA流。因此,第一鏈表地址定義了第一塊傳輸?shù)臄?shù)據(jù),該塊數(shù)據(jù)的最后地址存儲定義將要被傳輸?shù)南乱粔K的下一個鏈表,并以此類推,直到下一個鏈表地址存儲00,這意味著數(shù)據(jù)傳輸可以停止。這是一種執(zhí)行異類數(shù)據(jù)傳輸?shù)挠行Х椒?,但是需要在DMA控制器中為每個通道配置寄存器,以存儲鏈表指針。
希望有適應(yīng)性地執(zhí)行異類數(shù)據(jù)傳輸(disparate data transfer)而不需中斷處理器,且仍然維持DMA控制器的較少門數(shù)。
發(fā)明內(nèi)容
本發(fā)明的第一方面提供一種直接存儲器存取控制器用于控制多個數(shù)據(jù)源和多個數(shù)據(jù)目的地之間的數(shù)據(jù)傳輸,該多個數(shù)據(jù)源和數(shù)據(jù)目的地經(jīng)由多個通道與該直接存儲器存取控制器相通信,該直接存儲器存取控制器進(jìn)一步與存儲器和處理器相通信,該存儲器被用于存儲多個通道中的每個以及該處理器的兩組控制數(shù)據(jù);該直接存儲器存取控制器響應(yīng)于從該多個通道中的一個或從該處理器中接收的數(shù)據(jù)傳輸請求來訪問存儲在該存儲器中的一組該相應(yīng)的控制數(shù)據(jù),該直接存儲器訪問依賴于該被訪問的控制數(shù)據(jù)而執(zhí)行被請求的至少一部分該數(shù)據(jù)傳輸。
存儲在與DMA控制器相關(guān)聯(lián)的存儲器中的由DMA控制器執(zhí)行的用于控制存儲器訪問的控制數(shù)據(jù)的提供,減少了需要存儲在該DMA控制器內(nèi)部的數(shù)據(jù)量,且因此減少了其門數(shù)。這是一個優(yōu)點,因為在很多時候,DMA控制器是打開的但還沒有激活,因此具有較少的門數(shù)能夠改善功耗。因此,盡管當(dāng)數(shù)據(jù)傳輸請求被接收時,相應(yīng)的控制數(shù)據(jù)仍然需要被訪問,并且會消耗掉比將此數(shù)據(jù)存儲在DMA控制器本身中更多的能量,和從較小的DMA控制器中節(jié)約的能量相比較這通常是較小耗費(fèi),因為這種情況不是經(jīng)常出現(xiàn)。此外,用于每個通道和用于處理器的兩組控制數(shù)據(jù)的提供意味著對于每個數(shù)據(jù)傳輸請求都存在兩種能被執(zhí)行的可能數(shù)據(jù)傳輸是有效的。這使復(fù)雜的非線性數(shù)據(jù)傳輸序列能夠被執(zhí)行,而無需處理器的介入。
在一些實施例中,在完成由該一組控制數(shù)據(jù)控制的一部分該數(shù)據(jù)傳輸之后,采用該直接存取控制器來訪問兩組控制數(shù)據(jù)中的另一組,以用于控制該數(shù)據(jù)傳輸?shù)倪M(jìn)一步的部分。
可以在單一的數(shù)據(jù)傳輸請求期間使用兩組控制數(shù)據(jù),存儲器訪問控制器在由這些組控制數(shù)據(jù)的一組控制的部分完成之后自動地在它們之間切換。
在其他實施例中,采用該直接存儲器存取控制器來執(zhí)行依賴于該一組控制數(shù)據(jù)的所有該數(shù)據(jù)傳輸,并且響應(yīng)于來自相同通道或處理器的后續(xù)數(shù)據(jù)傳輸請求而訪問該兩組控制數(shù)據(jù)中的另一組。
可以是在一組控制數(shù)據(jù)的控制下執(zhí)行所有的數(shù)據(jù)傳輸。接著當(dāng)接收到進(jìn)一步的數(shù)據(jù)傳輸請求時,使用另一組控制數(shù)據(jù)。需要注意的是,在這種考慮下,數(shù)據(jù)傳輸被認(rèn)為包含由響應(yīng)于數(shù)據(jù)傳輸請求而傳輸?shù)臄?shù)據(jù)。因此,在更早的實施例中,數(shù)據(jù)傳輸可以分幾個部分執(zhí)行,每一個部分由不同的控制數(shù)據(jù)控制,而在此實施例中數(shù)據(jù)由一組控制數(shù)據(jù)傳輸。在兩種情況下,數(shù)據(jù)都響應(yīng)于特定請求被傳輸。
在一些實施例中,該直接存儲器存取控制器包括寄存器,該寄存器被用于存儲相關(guān)于該控制數(shù)據(jù)的存儲的基地址,以便每一組控制數(shù)據(jù)都能依賴于該基地址而被訪問。
存儲器中的控制數(shù)據(jù)的存儲減少了直接存儲器存取控制器需要的數(shù)據(jù)量。尤其是,如果控制數(shù)據(jù)的基地址被存儲在單一寄存器中,那么這就是DMA控制器全部所需的,以用來計算不同組控制數(shù)據(jù)的每組將被存儲的位置,如果假設(shè)它們以一種已知的排列被存儲的話。
在一些實施例中,該直接存儲器存取控制器包括該多個通道的每個和處理器的指示器存儲(indicator store),該指示器存儲包括指示該兩組控制數(shù)據(jù)中的哪一個將被訪問的指示位,在完成由該一組控制數(shù)據(jù)控制的至少一部分該數(shù)據(jù)傳輸之后,該直接存儲器存取控制器適于跳變(toggle)該指示位。
DMA控制器知道哪一個控制數(shù)據(jù)被使用的便捷方式是利用存儲位的指示器存儲。在完成由一組控制數(shù)據(jù)控制的數(shù)據(jù)傳輸之后跳變它,以便另一組的控制數(shù)據(jù)能夠被自動地用于下一個數(shù)據(jù)訪問。下一個數(shù)據(jù)訪問可以是數(shù)據(jù)傳輸?shù)囊徊糠只蚩梢允切碌臄?shù)據(jù)傳輸。
在一些實施例中該控制數(shù)據(jù)包括指示該數(shù)據(jù)的源的源指針、指示該數(shù)據(jù)目的地的目的地指針,以及指示該數(shù)據(jù)傳輸類型的類型數(shù)據(jù)。
控制數(shù)據(jù)可以包含許多內(nèi)容,并且在一些實施例中包括指示數(shù)據(jù)傳輸類型的信息。正是這種信息決定了控制器如何對數(shù)據(jù)傳輸請求作出反應(yīng),以及是否特別地決定它如何使用兩組控制數(shù)據(jù)。
在一些實施例中,該直接存儲器存取控制器響應(yīng)于由該一組控制數(shù)據(jù)控制的數(shù)據(jù)傳輸?shù)耐瓿?,來向該處理器發(fā)布中斷命令,以請求該一組控制數(shù)據(jù)的更新,并且響應(yīng)于該后續(xù)數(shù)據(jù)傳輸請求來訪問該另一組控制數(shù)據(jù),并執(zhí)行由該另一組控制數(shù)據(jù)控制的進(jìn)一步的數(shù)據(jù)傳輸,以及在完成該進(jìn)一步的數(shù)據(jù)傳輸之后向該處理器發(fā)布中斷命令,以請求該另一組控制數(shù)據(jù)的更新,以及響應(yīng)于來自相同的通道或處理器的進(jìn)一步的數(shù)據(jù)傳輸請求來訪問該一組控制數(shù)據(jù),如果它已經(jīng)更新的話,并且在該一組控制數(shù)據(jù)的控制下開始該進(jìn)一步的數(shù)據(jù)傳輸,以及如果該一組控制數(shù)據(jù)被檢測為沒有更新的話,則停止該進(jìn)一步的數(shù)據(jù)傳輸。
本發(fā)明實施例特別適于處理的異類數(shù)據(jù)傳輸?shù)囊环N特殊類型是乒乓數(shù)據(jù)傳輸(ping pong data transfer)。在這種情況下,在由一組控制數(shù)據(jù)控制的數(shù)據(jù)傳輸之后,DMA控制器向處理器發(fā)布中斷命令來請求這種控制數(shù)據(jù)的更新。然后可以利用另一組控制數(shù)據(jù)來使用通道以執(zhí)行進(jìn)一步的數(shù)據(jù)傳輸請求。如果處理器在此傳輸期間設(shè)法更新了第一組控制數(shù)據(jù),那么在進(jìn)一步的傳輸請求之后,新的更新控制數(shù)據(jù)就可以被使用了。以這種方式,DMA控制器能夠連續(xù)控制許多不同的數(shù)據(jù)傳輸。
在一些實施例中,該直接存儲器存取控制器響應(yīng)于由該一組控制數(shù)據(jù)控制的數(shù)據(jù)傳輸?shù)耐瓿桑瑏順?biāo)記該一組控制數(shù)據(jù)為無效,并且向該處理器發(fā)布中斷命令來請求被標(biāo)記為無效的該一組控制數(shù)據(jù)的更新,且接著標(biāo)記為有效的,并且在該進(jìn)一步的數(shù)據(jù)傳輸完成之后來標(biāo)記該另一組控制數(shù)據(jù)為無效,且向該處理器發(fā)布中斷命令來請求該一組控制數(shù)據(jù)的更新,且標(biāo)記為有效,以及依賴于該一組控制數(shù)據(jù)是否被標(biāo)記為有效的或無效而檢測該一組控制數(shù)據(jù)是否被更新了。
盡管存在不同的方法來確定有沒有控制數(shù)據(jù)已經(jīng)在再次使用之前被更新了,一種簡單卻有效的方法是在使用之后標(biāo)記控制數(shù)據(jù)為無效,且一旦它已經(jīng)更新了就標(biāo)記為有效。這樣就使DMA控制器簡明地知道控制數(shù)據(jù)是否已經(jīng)準(zhǔn)備好。如果它沒有準(zhǔn)備好直,則暫停數(shù)據(jù)傳輸。
在一些實施例中由該一組控制數(shù)據(jù)控制的該數(shù)據(jù)傳輸?shù)脑摬糠职ㄖ貙懺摿硪唤M控制數(shù)據(jù),該進(jìn)一部分該數(shù)據(jù)傳輸由該更新的另一組控制數(shù)據(jù)控制,以便該直接存儲器存取控制器適于利用更新的控制數(shù)據(jù)來執(zhí)行數(shù)據(jù)傳輸序列,而無需請求處理器中斷。
本發(fā)明的實施例也可特別應(yīng)用于存儲器分散集中數(shù)據(jù)傳輸(scatter gatherdata transfer)。這涉及利用一組控制數(shù)據(jù)來更新另一組控制數(shù)據(jù)的存儲器訪問控制器。以這種方法,大量數(shù)據(jù)傳輸可以執(zhí)行到大量的不同地址,而無需處理器中斷。因此,異類數(shù)據(jù)傳輸能夠?qū)崿F(xiàn),而無需中斷處理器。
在一些實施例中,由該更新的另一組控制數(shù)據(jù)控制的該數(shù)據(jù)傳輸?shù)脑撨M(jìn)一步部分包括重寫該一組控制數(shù)據(jù),以便該直接存儲器存取控制器適于執(zhí)行無限(unbounded)數(shù)據(jù)傳輸數(shù)量,而無需處理器中斷。
如果一組控制數(shù)據(jù)更新另一組,那么其可能出現(xiàn)的次數(shù)由第一數(shù)據(jù)傳輸?shù)臄?shù)據(jù)傳輸大小來限定。然而如果在特定數(shù)據(jù)量的數(shù)據(jù)傳輸之后另一組控制數(shù)據(jù)也可以重寫一組控制數(shù)據(jù),那么這僅由分配用于存儲通道控制數(shù)據(jù)的存儲器的大小來限定。
在一些實施例中,該直接存儲器存取控制器被用于連續(xù)地執(zhí)行由該一組控制數(shù)據(jù)以及該另一組控制數(shù)據(jù)控制的隨后數(shù)據(jù)傳輸,直到該處理器禁用該通道,或該數(shù)據(jù)傳輸完成。
這種數(shù)據(jù)傳輸或者可以由其完成而停止,或者可以由處理器禁用通道而停止。
在一些實施例中,該直接存儲器存取控制器響應(yīng)于進(jìn)一步的數(shù)據(jù)請求來訪問該一組控制數(shù)據(jù),并且在該一組控制數(shù)據(jù)的控制下執(zhí)行部分進(jìn)一步的數(shù)據(jù)傳輸,該一部分的該進(jìn)一步的數(shù)據(jù)傳輸包括重寫該另一組控制數(shù)據(jù),該直接存儲器存取控制器響應(yīng)于由該一組控制數(shù)據(jù)控制的該進(jìn)一步的數(shù)據(jù)傳輸?shù)脑摬糠值耐瓿啥L問該更新的另一組的控制數(shù)據(jù),并且在該更新的控制數(shù)據(jù)的控制下執(zhí)行該進(jìn)一步數(shù)據(jù)傳輸?shù)倪M(jìn)一步的部分。
在來自存儲器發(fā)布的或來自處理器的軟件中斷作用的數(shù)據(jù)請求的分散集中數(shù)據(jù)傳輸?shù)那闆r下,數(shù)據(jù)傳輸請求自動地持續(xù)而無需接收進(jìn)一步的請求。然而,如果已經(jīng)請求這種存儲器分散集中的是外圍設(shè)備,那么每次第二組數(shù)據(jù)已被使用,則DMA控制器就等待新的數(shù)據(jù)傳輸請求以繼續(xù)執(zhí)行。
本發(fā)明的進(jìn)一步方面提供了一種數(shù)據(jù)處理裝置,包括根據(jù)本發(fā)明的第一方面的多個數(shù)據(jù)源/目的地、存儲器、處理器及直接存儲器存取控制器用于控制該數(shù)據(jù)源/目的地和該存儲器之間的數(shù)據(jù)傳輸,該數(shù)據(jù)源/目的地與該直接存儲器存取控制器經(jīng)由該多個通道進(jìn)行通信,并且該存儲器適于存儲對應(yīng)于該多個通道中的每個通道和處理器的該兩組控制數(shù)據(jù)。
盡管該多個數(shù)據(jù)源/目的地有可能是多個事物,在一些實施例中它們包括外圍設(shè)備。直接存儲器存取控制器對于控制外圍設(shè)備和存儲器之間的數(shù)據(jù)傳輸而言是特別有利的。
本發(fā)明的另外還有一方面提供了一種直接存儲器存取控制方法,用于控制多個數(shù)據(jù)源和多個數(shù)據(jù)目的地之間的數(shù)據(jù)傳輸,該多個數(shù)據(jù)源和數(shù)據(jù)目的地經(jīng)由多個通道與該直接存儲器存取控制器通信,該直接存儲器存取控制器進(jìn)一步與存儲器和處理器通信,該存儲器適于存儲用于該多個通道中的每個通道和該處理器的兩組控制數(shù)據(jù);該直接存儲器存取控制方法包括如下的步驟從該多個通道中的一個或該處理器接收數(shù)據(jù)傳輸請求;響應(yīng)于該數(shù)據(jù)傳輸請求訪問存儲在與該對應(yīng)通道或處理器相關(guān)的該存儲器中的一組該控制數(shù)據(jù);以及在該被訪問的控制數(shù)據(jù)的控制下執(zhí)行至少一部分該數(shù)據(jù)傳輸。
本發(fā)明的以上以及其他的目的、特征和優(yōu)點,將從以下說明性的實施例的詳細(xì)描述中變得清楚,該實施例應(yīng)與隨附的附圖一起閱讀。
圖1a示出了根據(jù)本發(fā)明實施例的數(shù)據(jù)處理裝置; 圖1b示出了圖1a的存儲器中存儲的控制數(shù)據(jù); 圖2示出了根據(jù)本發(fā)明實施例的由直接存儲器存取控制器控制的數(shù)據(jù)傳輸?shù)钠古夷J?ping pong mode); 圖3示出了根據(jù)本發(fā)明實施例的由直接存儲器存取控制器控制的數(shù)據(jù)傳輸?shù)拇鎯ζ鞣稚⒓心J?scatter gather mode); 圖4示出了根據(jù)本發(fā)明實施例的由直接存儲器存取控制器控制的數(shù)據(jù)傳輸?shù)耐鈬O(shè)備分散集中模式; 圖5示出了另一乒乓實施例; 圖6示出了存儲器分散集中實施例; 圖7示出了外圍設(shè)備分散集中實施例; 圖8示出了32通道的存儲器映射; 圖9示出了三個DMA通道的存儲器映射;以及 圖10示出了通道配置位分配。
具體實施例方式 圖1a示出了數(shù)據(jù)處理裝置5,包含根據(jù)本發(fā)明實施例的直接存儲器存取控制器。直接存儲器存取(DMA)控制器10被連接到多個外圍設(shè)備20、存儲器30以及處理器40。
存儲器30存儲在DMA 10的控制下被傳輸?shù)臄?shù)據(jù)以及用于控制DMA控制器10的控制數(shù)據(jù)。在DMA控制器10內(nèi)存在寄存器12,它包含存儲器30內(nèi)的位置31的基地址,存儲器30為DMA控制器10的第一通道保留控制信息。DMA控制器10具有多個將外圍設(shè)備20連接到DMA控制器10的通道14。這些通道將發(fā)送從外圍設(shè)備到DMA控制器10的數(shù)據(jù)訪問請求。同樣也具有通道16,這是來自處理器40的通道,并且它將發(fā)送涉及從存儲器到DMA控制器10的數(shù)據(jù)訪問請求。這些一般是軟件生成的請求。所有這些通道14、16接收數(shù)據(jù)訪問請求,并且這些數(shù)據(jù)訪問請求由存儲在存儲器30中的控制數(shù)據(jù)來控制。寄存器12指示這個數(shù)據(jù)的存儲基地址31,并且DMA控制器10能接著從這個基地址的標(biāo)識以及從數(shù)據(jù)訪問請求對應(yīng)的通道信息中訪問正確的控制數(shù)據(jù)組。
對于每一個通道來說,有兩組控制數(shù)據(jù)32被存儲在存儲器30中,它們中的一個是首選控制數(shù)據(jù)(primary control data)且另一個是備選控制數(shù)據(jù)(alternate control data)。在這個實施例中,這些各存儲在4個存儲位置,一個存儲位置未被使用,另一個存儲源指針指示數(shù)據(jù)源的地址,有一個目的地指針指示數(shù)據(jù)到哪里去,以及還有一個存儲控制信息。這個控制信息指示數(shù)據(jù)傳輸大小和數(shù)據(jù)傳輸使用的地址增量(address increment)。同樣也指示數(shù)據(jù)傳輸?shù)念愋?,?shù)據(jù)傳輸?shù)念愋痛_定首選以及備選控制數(shù)據(jù)是如何被使用的。關(guān)于這個數(shù)據(jù)的存儲在圖1b中更為詳細(xì)的示出。
DMA控制器10同樣也包括用于每個通道的跳變位(toggle bit)13。這個跳變位確定首選或備選控制數(shù)據(jù)中的哪一個被訪問以用于該請求的特定通道。
如上所述,控制數(shù)據(jù)能指示要被執(zhí)行的數(shù)據(jù)傳輸?shù)念愋?。?yīng)當(dāng)注意對于所有數(shù)據(jù)傳輸類型,控制器在2R個DMA傳輸之后仲裁。這能夠防止低優(yōu)先級的DMA傳輸阻塞DMA太長時間。R值可以根據(jù)性能需求來選擇。該值為圖1b中32所示的控制數(shù)據(jù)的一部分。
圖1b示出了存儲器30中備選以及首選控制數(shù)據(jù)的存儲的更詳細(xì)內(nèi)容。在這個實施例中,首選控制數(shù)據(jù)和備選控制數(shù)據(jù)被彼此偏移地存儲在一起,以便它們離開基地址的位置可以由DMA控制器獲知。用于通道的一組控制數(shù)據(jù)在32中被圖示,且示出了4個存儲位置,一個未被使用,一個包含控制數(shù)據(jù),一個是目的端指針以及一個是源端指針。
圖2示出了一種類型的數(shù)據(jù)傳輸,“乒乓”模式。在這種模式中控制器響應(yīng)于數(shù)據(jù)傳輸請求50而利用一個控制數(shù)據(jù)結(jié)構(gòu)以執(zhí)行一個DMA周期。在這種數(shù)據(jù)傳輸?shù)慕Y(jié)束處,指示哪個控制數(shù)據(jù)被使用的位被跳變。因此,響應(yīng)于另一個數(shù)據(jù)傳輸請求50而利用該通道的另一個控制數(shù)據(jù)結(jié)構(gòu)來執(zhí)行DMA周期。該控制數(shù)據(jù)位被跳變是因為控制器繼續(xù)會在這些控制數(shù)據(jù)結(jié)構(gòu)間切換,即首選到備選再到首選直到它讀取一個無效的控制數(shù)據(jù)結(jié)構(gòu)或直到主處理器禁用通道。
響應(yīng)于數(shù)據(jù)請求50,N數(shù)據(jù)位的數(shù)據(jù)傳輸在首選控制數(shù)據(jù)的控制下開始。在此傳輸?shù)慕Y(jié)束處,指示哪一個控制數(shù)據(jù)被使用的用于此通道(圖1的13)的跳變位被跳變。隨著后續(xù)的請求,使用備選控制數(shù)據(jù)結(jié)構(gòu)而傳輸數(shù)據(jù),且當(dāng)這個操作完成時,通道13的跳變位被再次跳變,以此類推。因此,對于每個新的數(shù)據(jù)傳輸請求,控制數(shù)據(jù)在首選和備選之間來回切換。
圖3示出了被稱作“存儲器分散集中”的其它類型的數(shù)據(jù)傳輸。在存儲器分散集中模式中,數(shù)據(jù)被傳輸?shù)皆S多不同的位置。這可以通過利用一個控制數(shù)據(jù)來控制另一組控制數(shù)據(jù)的更新而實現(xiàn)。該更新的控制數(shù)據(jù)被用來控制數(shù)據(jù)傳輸,且因此數(shù)據(jù)傳輸可以被執(zhí)行到許多不同的位置。
在根據(jù)本發(fā)明一個實施例的存儲器分散集中時,控制器接收初始請求,并且作為響應(yīng)而利用那個通道的首選控制數(shù)據(jù)結(jié)構(gòu)來執(zhí)行DMA傳輸。該首選控制數(shù)據(jù)控制到備選控制數(shù)據(jù)存儲位置的數(shù)據(jù)傳輸,即它更新備選控制數(shù)據(jù)。當(dāng)這個已經(jīng)完成,即在4個傳輸之后,跳變位被跳變,DMA控制器接著自動地切換以使用備選控制數(shù)據(jù)結(jié)構(gòu),于是N數(shù)據(jù)項的數(shù)據(jù)傳輸被執(zhí)行。應(yīng)當(dāng)注意在這個實施例中,4個存儲位置被用來存儲控制數(shù)據(jù),因為雖然只需要3個,但是數(shù)據(jù)傳輸僅能以2的冪的形式來實現(xiàn),因此4個單位置被使用。這之后用于這個通道的跳變位被再次跳變,并且在首選控制數(shù)據(jù)的控制之下數(shù)據(jù)傳輸再次開始,于是備選控制數(shù)據(jù)被再次更新。因為DMA控制器使用首選控制數(shù)據(jù)來更新備選通道控制數(shù)據(jù)結(jié)構(gòu),可以響應(yīng)于單個數(shù)據(jù)傳輸請求來執(zhí)行多個數(shù)據(jù)傳輸,而無需處理器中斷??稍趩蝹€請求控制下被傳輸?shù)讲煌恢玫臄?shù)據(jù)項的數(shù)量的僅有的限制,在于可被執(zhí)行以更新備選數(shù)據(jù)傳輸?shù)氖走x數(shù)據(jù)傳輸?shù)臄?shù)量。這個由首選數(shù)據(jù)傳輸?shù)目傞L度來控制。然而,這個限制可以被克服,如果由備選數(shù)據(jù)結(jié)構(gòu)控制的最終數(shù)據(jù)傳輸被用來更新首選控制數(shù)據(jù)的話。這將允許全新的數(shù)據(jù)傳輸組被使能。通過這種方式,無限數(shù)量的數(shù)據(jù)傳輸可以被有效地執(zhí)行。
圖3示出了上述過程。開始時,指示存儲器分散集中應(yīng)當(dāng)開始的來自處理器的軟件請求60在DMA控制器處被接收。2R個數(shù)據(jù)傳輸接著在首選控制數(shù)據(jù)的控制下被執(zhí)行,并且指示控制數(shù)據(jù)的跳變位接著被跳變。備選控制數(shù)據(jù)接著被用于下N個數(shù)據(jù)傳輸,于是該跳變位被再次跳變。在這個實施例中2R是4,因為首選數(shù)據(jù)傳輸包括重寫具有備選控制數(shù)據(jù)的存儲器內(nèi)部的4個存儲位置。N被設(shè)置為16,因此,存在4個傳輸?shù)?個任務(wù),能夠在首選控制數(shù)據(jù)的控制下被執(zhí)行,這意味著備選數(shù)據(jù)能在這個控制數(shù)據(jù)的控制下更新4次。如果備選控制數(shù)據(jù)將要控制首選控制數(shù)據(jù)的更新,那么這個毫無疑問地能夠隨新的首選控制數(shù)據(jù)在多于4個的傳輸上繼續(xù)。
圖4示出了一個備選實施例,其中闡明了外圍設(shè)備分散集中。這個與存儲器分散集中類似,然而,盡管在首選控制數(shù)據(jù)的控制下并且接著自動地在備選控制數(shù)據(jù)的控制下執(zhí)行傳輸,但是沒有再次切換到首選控制數(shù)據(jù)控制下以傳輸進(jìn)一步的數(shù)據(jù),相反,沒有進(jìn)一步的數(shù)據(jù)被傳輸,直到接收到進(jìn)一步的數(shù)據(jù)傳輸請求70。在這一點上,數(shù)據(jù)在首選控制數(shù)據(jù)的控制下并接著在備選控制數(shù)據(jù)的控制下被傳輸。換句話說,該傳輸不是像在存儲器分散集中的例子中那樣,自動地、持續(xù)地在首選的和備選的以及備選的和首選的之間切換。
因此,用于數(shù)據(jù)傳輸?shù)恼埱?0從外圍設(shè)備在DMA控制器上被接收。響應(yīng)于這個請求在首選控制數(shù)據(jù)的控制下執(zhí)行數(shù)據(jù)傳輸。這個控制了備選控制數(shù)據(jù)的更新。一旦這個已經(jīng)完成,該跳變位被跳變同時數(shù)據(jù)傳輸?shù)目刂票磺袚Q到備選控制數(shù)據(jù)。數(shù)據(jù)傳輸接著在這個已更新的備選控制數(shù)據(jù)的控制下被執(zhí)行。然后完成數(shù)據(jù)傳輸。響應(yīng)于進(jìn)一步的數(shù)據(jù)。
因此,數(shù)據(jù)傳輸?shù)恼埱?0在DMA控制器處從外圍設(shè)備被接收。響應(yīng)于這個請求在首選控制數(shù)據(jù)的控制下執(zhí)行數(shù)據(jù)傳輸。這控制了備選控制數(shù)據(jù)的更新。一旦這個已經(jīng)完成,跳變位被跳變,并且數(shù)據(jù)傳輸?shù)目刂票磺袚Q到備選控制數(shù)據(jù)。數(shù)據(jù)傳輸接著在這個更新的備選控制數(shù)據(jù)的控制下執(zhí)行。然后完成該數(shù)據(jù)傳輸。響應(yīng)于進(jìn)一步的來自相同外圍設(shè)備的數(shù)據(jù)傳輸請求,即在相同的通道上,首選控制數(shù)據(jù)被再次使用來更新備選控制數(shù)據(jù)。
下面將在隨后幾頁以更詳盡的方式展示本發(fā)明的進(jìn)一步的實施例。
通過cycl_ctrl位確定數(shù)據(jù)傳輸?shù)牟煌愋?。在下面圖表描述的實施例說明了不同可能的cycl_ctrl位。
表1
-----注意----- cycl_ctrl位位于控制數(shù)據(jù)配置的channel_cfg存儲器位置中。
------------ 對于所有的周期類型,控制器在2R個DMA傳輸之后仲裁。如果將低優(yōu)選級通道設(shè)置為較大的2R值,那么這將阻止所有其他通道執(zhí)行DMA傳輸,直到完成低優(yōu)先級DMA傳輸。因此,必須留意,當(dāng)設(shè)置冪數(shù)R時,不能明顯增加高優(yōu)先級通道的等待時間。
下列項目描述了周期類型 ·無效(invalid) ·基礎(chǔ)(basic) ·12頁上的自動請求(auto-request) ·12頁上的乒乓(ping-pong) ·15頁上的存儲器分散-集中 ·17頁上的外圍設(shè)備分散-集中 無效 控制器完成DMA周期之后,設(shè)置周期類型為無效。這是為了防止控制器重復(fù)DMA周期。
基礎(chǔ) 在這種模式中,配置控制器來使用首選或備用數(shù)據(jù)結(jié)構(gòu)。當(dāng)使能通道并且控制器接收請求之后,這個DMA周期流程為 1.控制器執(zhí)行2R個傳輸。如果傳輸?shù)臄?shù)量剩余為零則流程繼續(xù)到步驟3。
2.控制器仲裁 ·如果高優(yōu)先級通道在請求服務(wù),那么控制器服務(wù)那個通道。
·如果外圍設(shè)備或者軟件向控制器發(fā)現(xiàn)請求請信號,那么繼續(xù)到步驟1。
3.控制器為一個hclk周期設(shè)置dma_done[C]為HIGH。這指示主處理器該DMA循環(huán)完成。
自動-請求 當(dāng)控制器在這個模式中操作,對它而言僅需要接收單個請求以使能它,以完成整個DMA周期。
能夠配置控制器來使用首選或者備選數(shù)據(jù)結(jié)構(gòu)。當(dāng)使能通道之后,控制器接收這個通道的請求,那么這個DMA周期的流程為 1.控制器執(zhí)行通道C<x>的2R個傳輸。如果傳輸數(shù)量剩余為零,則流程繼續(xù)到步驟3。
2.控制器仲裁。當(dāng)通道C<x>具有高優(yōu)先級時,DMA周期繼續(xù)到步驟1。
3.控制器設(shè)置一個hclk周期的dma_done[C]為HIGH。這向主處理器指示DMA周期完成。
乒乓 在乒乓模式中,控制器采用一個通道數(shù)據(jù)結(jié)構(gòu)執(zhí)行DMA周期,并且接著利用另一個通道數(shù)據(jù)結(jié)構(gòu)執(zhí)行DMA周期??刂破鬟B續(xù)從首選到備選再到首選......的切換,直到它讀取到通道控制數(shù)據(jù)結(jié)構(gòu)為無效,或者直到主處理器禁用通道。
圖5示出了乒乓DMA事務(wù)的一個例子。
在圖5中 任務(wù)A 1.主處理器為任務(wù)A配置首選通道數(shù)據(jù)結(jié)構(gòu)。
2.主處理器為任務(wù)B配置備選的通道數(shù)據(jù)結(jié)構(gòu)。這使控制器能夠在任務(wù)A完成之后立即切換到任務(wù)B,假設(shè)較高的優(yōu)先級的通道不需要服務(wù)的話。
3.控制器接收請求并且執(zhí)行四個DMA傳輸。
4.控制器仲裁。在控制器接收這個通道的請求之后,如果該通道具有最高的優(yōu)先級,則流程繼續(xù)。
5.控制器執(zhí)行剩余的兩個DMA傳輸。
6.控制器設(shè)置一個hclk周期的dma_done[C]為HIGH,并且進(jìn)入到仲裁處理。
在任務(wù)A完成之后,主處理器可以配置用于任務(wù)C的首選通道數(shù)據(jù)結(jié)構(gòu)。這使控制器能夠在任務(wù)B完成之后立即切換到任務(wù)C,假如較高優(yōu)先級的通道不需要服務(wù)的話。
在控制器接收該通道的一個新請求后,并且它具有最高優(yōu)先級,那么任務(wù)B開始 任務(wù)B 7.控制器執(zhí)行四個DMA傳輸。
8.控制器仲裁。控制器接收該通道的請求之后,如果該通道具有最高優(yōu)先級,則流程繼續(xù)。
9.控制器執(zhí)行四個DMA傳輸。
10.控制器仲裁??刂破鹘邮赵撏ǖ赖恼埱笾?,如果通道具有最高優(yōu)選級,則流程繼續(xù)。
11.控制器執(zhí)行剩余的四個DMA傳輸。
12.控制器設(shè)置一個hclk周期的dma_done[C]為HIGH,并且進(jìn)入仲裁處理。
在任務(wù)B完成之后,主處理器能夠配置用于任務(wù)D的備選的通道數(shù)據(jù)結(jié)構(gòu)。
在控制器為該通道接收一個新請求后,并且其具有最高優(yōu)先級,那么任務(wù)C開始 任務(wù)C 13.控制器執(zhí)行兩個DMA傳輸。
14.控制器設(shè)置一個hclk周期的dma_done[C]為HIGH,并進(jìn)入仲裁處理。
在任務(wù)C完成之后,主處理器能夠配置用于任務(wù)E的首選通道數(shù)據(jù)結(jié)構(gòu)。
在控制器為該通道接收一個新的請求,并且它具有最高優(yōu)先級,那么任務(wù)D開始 任務(wù)D 15.控制器執(zhí)行四個DMA傳輸。
16.控制器仲裁??刂破鹘邮沼糜谠撏ǖ赖恼埱笾?,如果該通道具有最高優(yōu)先級,則流程繼續(xù)。
17.控制器執(zhí)行剩余的DMA傳輸。
18.控制器設(shè)置一個hclk周期的dma_done[C]為HIGH,并進(jìn)入仲裁處理。
控制器接收用于通道的新的請求之后,并且它具有最高優(yōu)先級,那么任務(wù)E開始 任務(wù)E 19.控制器執(zhí)行四個DMA傳輸。
20.控制器仲裁。控制器接收用于該通道的請求之后,流程繼續(xù),如果通道具有最高優(yōu)先級的話。
21.控制器執(zhí)行剩余的DMA傳輸。
22.控制器設(shè)置一個hclk周期的dma_done[C]為HIGH,并且進(jìn)入仲裁處理。
如果控制器為該通道接收一個新請求,并且它具有最高優(yōu)先級,那么它試圖使能下一個任務(wù)。然而,因為主處理器沒有配置備選的通道數(shù)據(jù)結(jié)構(gòu),并且完成任務(wù)D時控制器設(shè)置cycle_ctrl位為b000,那么乒乓DMA處理就完成。
存儲器分散-集中 在存儲器分散-集中模式中,控制器接收初始請求并且接著利用首選通道數(shù)據(jù)結(jié)構(gòu)執(zhí)行四個DMA傳輸。在這個傳輸完成之后,利用備選通道控制數(shù)據(jù)結(jié)構(gòu)開始DMA周期。在這個周期完成之后,控制器利用首選數(shù)據(jù)結(jié)構(gòu)執(zhí)行另外四個DMA傳輸??刂破骼^續(xù)從首選到備選再到首選......的切換,直到滿足以下任何一個 ·它讀取到無效通道控制數(shù)據(jù)結(jié)構(gòu) ·主處理器為基礎(chǔ)周期配置備選的數(shù)據(jù)結(jié)構(gòu)。
當(dāng)該分散-集中處理通過使用基礎(chǔ)周期而完成時,控制器斷言dma_done。
在分散-集中模式中,控制器使用首選通道數(shù)據(jù)結(jié)構(gòu)來編程備選通道數(shù)據(jù)結(jié)構(gòu)。因此必須時常使用表2列出的值來編程首選通道數(shù)據(jù)結(jié)構(gòu)的字段。
表2被設(shè)置為常量的首選通道數(shù)據(jù)結(jié)構(gòu)中的字段
a.根據(jù)要求的分散-集中DMA周期類型設(shè)置這些位。
參見23頁的控制數(shù)據(jù)配置以獲得更多信息。
圖6示出了存儲器分散-集中示例。
圖6中 初始化 1.主處理器通過設(shè)置cycle_ctrl為b100而配置首選通道數(shù)據(jù)結(jié)構(gòu)以在存儲器分散-集中模式中操作。因為通道數(shù)據(jù)結(jié)構(gòu)包括四個字組成,2R通常被設(shè)置為4。在這個例子中,存在四個任務(wù)所以N被設(shè)置為16。
2.主處理器將信息寫入到為任務(wù)A、B、C和D保留的通道數(shù)據(jù)結(jié)構(gòu)的存儲位置。
3.主處理器使能通道。
當(dāng)控制器接收到dma_req[]上的請求或者來自主處理器的手動請求(manual request)時,存儲器分散-集中處理開始。該處理以如下方式繼續(xù) 首選,復(fù)制A(primary,copyA) 1.接受請求之后,控制器執(zhí)行四個DMA傳輸。這些傳輸寫用于任務(wù)A的備選通道數(shù)據(jù)結(jié)構(gòu)。
2.控制器為通道生成自動請求并且接著仲裁。
任務(wù)A 3.控制器執(zhí)行任務(wù)A。在完成該任務(wù)之后,生成用于通道的自動請求并接著仲裁。
首選,復(fù)制B 4.控制器執(zhí)行四個DMA傳輸。這些傳輸寫用于任務(wù)B的備選通道數(shù)據(jù)結(jié)構(gòu)。
5.控制器為通道生成自動請求并且接著仲裁。
任務(wù)B 6.控制器執(zhí)行任務(wù)B。在其完成該任務(wù)之后,為通道生成自動請求并接著仲裁。
首選,復(fù)制C 7.控制器執(zhí)行四個DMA傳輸。這些傳輸寫用于任務(wù)C的備選通道數(shù)據(jù)結(jié)構(gòu)。
8.控制器為該通道生成自動請求并且接著仲裁。
任務(wù)C 9.控制器執(zhí)行任務(wù)C。在完成該任務(wù)之后,生成用于通道的自動請求并接著仲裁。
首選,復(fù)制D 10.控制器執(zhí)行四個DMA傳輸。這些傳輸寫用于任務(wù)D的備選通道數(shù)據(jù)結(jié)構(gòu)。
11.控制器設(shè)置首選通道控制數(shù)據(jù)結(jié)構(gòu)的cycle_ctrl位為b000,來指示這個數(shù)據(jù)結(jié)構(gòu)現(xiàn)在是無效的。
12.控制器為通道生成自動請求并且接著仲裁。
任務(wù)D 13.控制器利用基本周期執(zhí)行任務(wù)D。
14.控制器設(shè)置一個hclk周期的dma_done[C]為HIGH,并進(jìn)入仲裁處理。
外圍設(shè)備分散-集中 在外圍設(shè)備分散-集中模式中,控制器接收初始請求并且接著利用首選通道數(shù)據(jù)結(jié)構(gòu)執(zhí)行四個DMA傳輸。在這個周期完成之后并且另一個請求已經(jīng)被接收,利用備選通道控制數(shù)據(jù)結(jié)構(gòu)開始DMA周期。在這個周期完成之后,控制器利用首選數(shù)據(jù)結(jié)構(gòu)執(zhí)行另一個DMA傳輸??刂破骼^續(xù)從首選到備選再到首選......的切換,直到滿足以下任何一個 ·讀取到無效通道控制數(shù)據(jù)結(jié)構(gòu) ·主處理器配置備選的數(shù)據(jù)結(jié)構(gòu)用于基礎(chǔ)周期 當(dāng)該分散-集中處理通過使用基礎(chǔ)周期而完成時,控制器斷言dma_done。
在分散-集中模式中,控制器使用首選通道數(shù)據(jù)結(jié)構(gòu)來編程備選的控制通道數(shù)據(jù)結(jié)構(gòu)。因此,必須時常使用2-25頁的表2-10中列出的值來編程首選通道數(shù)據(jù)結(jié)構(gòu)的字段。
參見23頁上的控制數(shù)據(jù)配置以獲得更多信息。
圖7示出了一個外圍設(shè)備分散-集中的示例。
在圖7中 初始化 1.主處理器通過設(shè)置cycle_ctrl為b110而配置首選通道數(shù)據(jù)結(jié)構(gòu)以在外圍設(shè)備分散-集中模式中操作。因為通道數(shù)據(jù)結(jié)構(gòu)由四個字組成,2R通常被設(shè)置為4。在這個例子中,存在四個任務(wù)所以N被設(shè)置為16。
2.主處理器將信息寫入到為任務(wù)A、B、C和D保留的通道數(shù)據(jù)結(jié)構(gòu)的存儲位置。
3.主處理器使能該通道。
當(dāng)控制器接收到dma_req[]上的請求或者來自主處理器的手動請求時,外圍設(shè)備分散-集中處理開始。該處理以如下方式繼續(xù) 首選,復(fù)制A 1.接受請求之后,控制器執(zhí)行四個DMA傳輸。這些傳輸寫用于任務(wù)A的備選通道數(shù)據(jù)結(jié)構(gòu)。
2.控制器進(jìn)入仲裁處理。
在外圍設(shè)備發(fā)布新的請求之后,并且它具有最高優(yōu)先級,那么處理繼續(xù)為 任務(wù)A 3.控制器執(zhí)行任務(wù)A。在完成該任務(wù)之后,生成用于通道的自動請求并接著仲裁。
首選,復(fù)制B 4.控制器執(zhí)行四個DMA傳輸。這些傳輸寫用于任務(wù)B的備選通道數(shù)據(jù)結(jié)構(gòu)。
5.控制器進(jìn)入仲裁處理。
在外圍設(shè)備發(fā)布新的請求之后,并且它具有最高優(yōu)先級,那么處理繼續(xù)為 任務(wù)B 6.控制器執(zhí)行任務(wù)B。為了完成該任務(wù),外圍設(shè)備必須發(fā)布另外三個請求。在完成該任務(wù)之后,生成用于通道的自動請求并接著仲裁。
首選,復(fù)制C 7.控制器執(zhí)行四個DMA傳輸。這些傳輸寫用于任務(wù)C的備選通道數(shù)據(jù)結(jié)構(gòu)。
8.控制器進(jìn)入仲裁處理。
在外圍設(shè)備發(fā)布新的請求之后,并且它具有最高優(yōu)先級,那么處理繼續(xù)為 任務(wù)C 9.控制器執(zhí)行任務(wù)C。在完成該任務(wù)之后,生成用于通道的自動請求并接著仲裁。
首選,復(fù)制D 10.控制器執(zhí)行四個DMA傳輸。這些傳輸寫用于任務(wù)D的備選通道數(shù)據(jù)結(jié)構(gòu)。
11.控制器設(shè)置首選通道控制數(shù)據(jù)結(jié)構(gòu)的cycle_ctrl位為b000,以指示這個數(shù)據(jù)結(jié)構(gòu)現(xiàn)在是無效的。
12.控制器進(jìn)入仲裁處理。
在外圍設(shè)備發(fā)布新的請求之后,并且它具有最高優(yōu)先級,那么處理繼續(xù)為 任務(wù)D 13.控制器利用基本周期執(zhí)行任務(wù)D。
14.控制器設(shè)置一個hclk周期的dma_done[C]為HIGH,并進(jìn)入仲裁處理。
誤差信令 如果控制器在AHB-Lite主機(jī)接口上檢測到ERROR響應(yīng),它就 ·禁用對應(yīng)于ERROR的通道 ·設(shè)置dma_err為HIGH 在主處理器檢測到dma_err為HIGH之后,必須測試當(dāng)ERROR出現(xiàn)時哪一個通道是激活的??梢酝ㄟ^以下方式來執(zhí)行 1.讀取chnl_enable_set寄存器來形成禁用通道列表。
當(dāng)通道斷言dma_done[]時,控制器禁用通道。在主處理器上運(yùn)行的程序必須一直保持哪些通道最近斷言它們的dma_done[]輸出的記錄。
2.必須比較來自步驟1的禁用通道列表與最近已經(jīng)設(shè)置其dma_done輸出的通道記錄。沒有被設(shè)置dma_done記錄的通道就是ERROR出現(xiàn)的通道。
所需要的系統(tǒng)存儲器的量取決于 ·配置控制器要使用的DMA通道的數(shù)量 ·是否配置DMA通道來使用備選的通道控制數(shù)據(jù)。
表3列出了當(dāng)訪問通道控制數(shù)據(jù)結(jié)構(gòu)的元素時控制器使用的地址位,取決于控制器包含的通道的數(shù)量。
表3為通道控制數(shù)據(jù)設(shè)置的地址位
這里 A 選擇通道控制數(shù)據(jù)結(jié)構(gòu)中的一個 A=0 選擇首選通道控制數(shù)據(jù)結(jié)構(gòu)。
A=1 選擇備選通道控制數(shù)據(jù)結(jié)構(gòu)。
C[x:0] 選擇DMA通道。
地址[3:0] 選擇一個控制元素 0x0 選擇源端指針 0x4 選擇目的端指針 0x8 選擇控制 0xC 控制器不訪問這個地址位置。若被請求,可以使主處理器能使用這個存儲器位置作為系統(tǒng)存儲器。
2.2.4通道控制數(shù)據(jù)結(jié)構(gòu) 必須提供系統(tǒng)存儲器區(qū)域來容納通道控制數(shù)據(jù)結(jié)構(gòu)。這個系統(tǒng)存儲器必須 ·提供控制器和主處理器能夠訪問的系統(tǒng)存儲器的臨近區(qū)域(contiguousarea) ·具有一個基地址,它是通道控制數(shù)據(jù)結(jié)構(gòu)的大小總和的整數(shù)倍 圖8示出了當(dāng)使用所有32個通道以及可選的備選通道時,用于通道控制數(shù)據(jù)結(jié)構(gòu)的控制器需要的存儲器。
圖8中的示例結(jié)構(gòu)采用1KB系統(tǒng)存儲器。在這個例子中,控制器使用較低的10個地址位,使其能夠訪問該結(jié)構(gòu)中所有元素,并且因此基地址必須是0xXXXXX000,0xXXXXX400,0xXXXXX800,或者0xXXXXXC00。
可以通過在ctrl base_ptr寄存器中寫入適當(dāng)?shù)闹祦砼渲糜糜谕ǖ揽刂茢?shù)據(jù)結(jié)構(gòu)的基地址。
---注意---- 沒有必要計算備選通道控制數(shù)據(jù)的基地址,因為alt_ctrl_base_ptr寄存器提供這個信息。
--------- 圖9示出了控制器使用三個DMA通道以及備選通道控制數(shù)據(jù)結(jié)構(gòu)的示例實現(xiàn)。
圖9中的示例結(jié)構(gòu)使用了128字節(jié)的系統(tǒng)存儲器。在這個例子中,控制器使用較低的6個地址位,使其能夠訪問該結(jié)構(gòu)中的所有元素,并且因此基地址必須是0xXXXXXX00或者0xXXXXXX80。
表4列出了能夠分派給通道控制數(shù)據(jù)結(jié)構(gòu)的允許的基地址值,這基于控制器包含的通道數(shù)量。
表4被允許的基地址
控制器使用系統(tǒng)存儲器,使其能夠訪問兩個指針以及它所需要的用于每個通道的控制信息。以下部分描述了這些32位的存儲位置以及控制器如何計算DMA傳輸?shù)刂? ·源數(shù)據(jù)端指針 ·23頁上的目的地數(shù)據(jù)端指針 ·23頁上的控制數(shù)據(jù)配置 ·28頁上的地址計算 源數(shù)據(jù)端指針 src_data_end_ptr存儲位置包含一個指向源數(shù)據(jù)端地址的指針。表5列出了用于這個存儲位置的位分配。
表5src_data_end_ptr位分配
在控制器能夠執(zhí)行DMA傳輸之前,必須將這個存儲位置編程為源數(shù)據(jù)的端地址。當(dāng)開始2R個DMA傳輸時,控制器讀取這個存儲位置。
---注意----- 控制器不寫到這個存儲器位置。
--------- 目的地數(shù)據(jù)端指針 dst_data_end_ptr存儲位置包含指向目的數(shù)據(jù)的端地址的指針。表6列出了用于這個存儲位置的位分配。
表6dst_data_end_ptr位分配
在控制器能夠執(zhí)行DMA傳輸之前,必須將這個存儲位置編程為目的地數(shù)據(jù)的端地址。當(dāng)開始2R個DMA傳輸時,控制器讀取這個存儲位置。
---注意---- 控制器不向這個存儲器區(qū)域進(jìn)行寫操作。
--------- 控制數(shù)據(jù)配置 對于每一個DMA傳輸,channel_cfg存儲位置提供用于控制器的控制信息。圖10示出了用于這個存儲位置的位分配。
表7列出了用于這個存儲位置的位分配。
表7channel_cfg位分配
表8channel_cfg位分配(延續(xù)的)
在DMA周期或2R個DMA傳輸開始時,控制器從系統(tǒng)存儲器取來channel_cfg。當(dāng)執(zhí)行2R或N個傳輸之后,在系統(tǒng)存儲器中存儲更新的channel_cfg。
控制器不支持不同于src_size值的dst_size值。如果檢測到這些值不匹配,控制器使用src_size值用于源和目的地,并且當(dāng)它接著更新n_minus_1字段時,同樣將dst_size字段設(shè)置為與src_size字段相同。
當(dāng)控制器完成N個傳輸之后,設(shè)置cycle_ctrl字段為零,來表示channel_cfg數(shù)據(jù)為無效。這防止了重復(fù)相同的DMA傳輸。
地址計算 為了計算DMA傳輸?shù)脑吹刂?,控制器以src_inc指定的偏移量對n_minus_1值執(zhí)行左移操作,并且接著從源端指針減去結(jié)果值。類似地,為了計算DMA傳輸?shù)哪康牡刂?,控制器以dst_inc指定的偏移量對n_minus_1值執(zhí)行左移操作,并且接著從目的端指針減去結(jié)果值。
基于src_inc和dst_inc的值,源地址和目的地址可以利用如下等式計算 src_inc=b00以及dst_inc=b00 ·源地址=src_data_end_ptr-n_minus_1 ·目的地址=dst_data_end_ptr-n_minus_1. src_inc=b01以及dst_inc=b01 ·源地址=src_data_end_ptr-(n_minus_1<<1) ·目的地址=dst_data_end_ptr-(n_minus_1<<1). src_inc=b10以及dst_inc=b10 ·源地址=src_data end_ptr-(n_minus_1<<2) ·目的地址=dst_data_end_ptr-(n_minus_1<<2). src_inc=b11以及dst_inc=b11 ·源地址=src_data_end_ptr ·目的地址=dst_data_end_ptr. 表9列出了用于6字DMA周期的目的地址。
表9使用字增量的6字DMA周期
a.這個值是由dst_inc值確定的左移量的結(jié)果。
表10列出了使用半字增量的12字節(jié)DMA傳輸?shù)哪康牡刂贰?br>
表10使用半字增量的12字節(jié)DMA周期
a.這個值是根據(jù)dst_inc的值左移量的結(jié)果。
b.控制器完成DMA周期之后,通過清除cycle_ctrl字段使得channel_cfg存儲位置無效。
盡管本發(fā)明的說明性的實施例已經(jīng)在這里結(jié)合附圖做了詳細(xì)說明,應(yīng)當(dāng)理解的是本發(fā)明并不局限于那些精確的實施例,并且本領(lǐng)域技術(shù)人員可以做出各種不同的改變和修改,而不背離附加的權(quán)利要求書定義的本發(fā)明的范圍和主旨。
權(quán)利要求
1、一種直接存儲器存取控制器,用于控制多個數(shù)據(jù)源和多個數(shù)據(jù)目的地之間的數(shù)據(jù)傳輸,所述多個數(shù)據(jù)源和數(shù)據(jù)目的地經(jīng)由多個通道而與所述直接存儲器存取控制器進(jìn)行通信,所述直接存儲器存取控制器還與存儲器和處理器進(jìn)行通信,所述存儲器適于存儲用于所述多個通道中的每個通道以及用于所述處理器的兩組控制數(shù)據(jù);
所述直接存儲器存取控制器響應(yīng)于從所述多個通道中的一個或從所述處理器接收的數(shù)據(jù)傳輸請求,而訪問存儲在所述存儲器中的一組所述相應(yīng)控制數(shù)據(jù),所述直接存儲器存取依賴于所述訪問的控制數(shù)據(jù)而執(zhí)行請求的所述數(shù)據(jù)傳輸?shù)闹辽僖徊糠帧?br>
2、根據(jù)權(quán)利要求1所述的直接存儲器存取控制器,其特征在于,所述直接存儲器存取控制器適于在完成由所述一組控制數(shù)據(jù)控制的一部分所述數(shù)據(jù)傳輸之后,訪問所述兩組控制數(shù)據(jù)中的另一組,以用于控制所述數(shù)據(jù)傳輸?shù)倪M(jìn)一步的部分的傳輸。
3、根據(jù)權(quán)利要求1所述的直接存儲器存取控制器,其特征在于,所述直接存儲器存取控制器適于依賴于所述一組控制數(shù)據(jù)而執(zhí)行所有所述數(shù)據(jù)傳輸,并且響應(yīng)于來自相同通道或處理器的后續(xù)數(shù)據(jù)傳輸請求來訪問所述兩組控制數(shù)據(jù)中的另一組。
4、根據(jù)權(quán)利要求1所述的直接存儲器存取控制器,其特征在于,所述直接存儲器存取控制器包括寄存器,所述寄存器適于存儲關(guān)聯(lián)于所述控制數(shù)據(jù)存儲的基地址,以使得每組控制數(shù)據(jù)都能依賴于所述基地址而被訪問。
5、根據(jù)權(quán)利要求1所述的直接存儲器存取控制器,其特征在于,所述直接存儲器存取控制器包括所述多個通道中的每個通道和處理器的指示器存儲,所述指示器存儲包括指示所述兩組控制數(shù)據(jù)中的哪一組要被訪問的指示位,所述直接存儲器存取控制器適于在完成由所述一組控制數(shù)據(jù)控制的至少一部分所述數(shù)據(jù)傳輸之后跳變所述指示位。
6、根據(jù)權(quán)利要求1所述的直接存儲器存取控制器,其特征在于,所述控制數(shù)據(jù)包括指示所述數(shù)據(jù)源的源指針、指示所述數(shù)據(jù)目的地的目的地指針、以及指示所述數(shù)據(jù)傳輸類型的類型數(shù)據(jù)。
7、根據(jù)權(quán)利要求3的直接存儲器存取控制器,其特征在于,所述直接存儲器存取控制器響應(yīng)于由所述一組控制數(shù)據(jù)控制的數(shù)據(jù)傳輸?shù)耐瓿啥蛩鎏幚砥靼l(fā)布中斷,以請求所述一組控制數(shù)據(jù)的更新,并且響應(yīng)于所述后續(xù)數(shù)據(jù)傳輸請求而訪問所述另一組控制數(shù)據(jù)并執(zhí)行由所述另一組控制數(shù)據(jù)控制的進(jìn)一步的數(shù)據(jù)傳輸,以及在完成所述進(jìn)一步的數(shù)據(jù)傳輸之后,向所述處理器發(fā)布中斷以請求所述另一組控制數(shù)據(jù)的更新,以及響應(yīng)于來自相同通道或處理器的進(jìn)一步的數(shù)據(jù)傳輸請求而訪問所述一組控制數(shù)據(jù),如果它已經(jīng)更新的話,并且在所述一組控制數(shù)據(jù)的控制下開始所述進(jìn)一步的數(shù)據(jù)傳輸,以及如果所述一組控制數(shù)據(jù)被檢測為沒有更新的話,停止所述進(jìn)一步的數(shù)據(jù)傳輸。
8、根據(jù)權(quán)利要求7所述的直接存儲器存取控制器,其特征在于,所述直接存儲器存取控制器響應(yīng)于由所述一組控制數(shù)據(jù)控制的數(shù)據(jù)傳輸?shù)耐瓿啥鴺?biāo)記所述一組控制數(shù)據(jù)為無效,并且向所述處理器發(fā)布中斷,以請求被標(biāo)記為無效的所述一組控制數(shù)據(jù)的更新且接著標(biāo)記為有效,以及在所述進(jìn)一步的數(shù)據(jù)傳輸完成之后,標(biāo)記所述另一組控制數(shù)據(jù)為無效,且向所述處理器發(fā)布中斷以請求所述另一組控制數(shù)據(jù)的更新并標(biāo)記為有效,以及依賴于所述一組控制數(shù)據(jù)是否被標(biāo)記為有效或無效而檢測所述一組控制數(shù)據(jù)是否更新了。
9、根據(jù)權(quán)利要求2所述的直接存儲器存取控制器,其特征在于,由所述一組控制數(shù)據(jù)控制的所述部分的所述數(shù)據(jù)傳輸包括重寫所述另一組控制數(shù)據(jù),所述進(jìn)一步部分的所述數(shù)據(jù)傳輸由所述更新的另一組控制數(shù)據(jù)控制,使得所述直接存儲器存取控制器適于使用更新的控制數(shù)據(jù)來執(zhí)行后續(xù)的數(shù)據(jù)傳輸,而無需處理器中斷。
10、根據(jù)權(quán)利要求9所述的直接存儲器存取控制器,其特征在于,由所述更新的另一組控制數(shù)據(jù)控制的所述進(jìn)一步部分的所述數(shù)據(jù)傳輸之一包括,重寫所述一組控制數(shù)據(jù),以便所述直接存儲器存取控制器適于執(zhí)行無限數(shù)量的數(shù)據(jù)傳輸,而無需處理器中斷。
11、根據(jù)權(quán)利要求8所述的直接存儲器存取控制器,其特征在于,所述直接存儲器存取控制器適于連續(xù)地執(zhí)行由所述一組控制數(shù)據(jù)以及所述另一組控制數(shù)據(jù)控制的后續(xù)數(shù)據(jù)傳輸,直到所述處理器禁用所述通道失效或者所述數(shù)據(jù)傳輸完成。
12、根據(jù)權(quán)利要求9所述的直接存儲器存取控制器,其特征在于,所述直接存儲器存取控制器響應(yīng)于進(jìn)一步的數(shù)據(jù)請求而訪問所述一組控制數(shù)據(jù)并且在所述一組控制數(shù)據(jù)的控制下執(zhí)行部分進(jìn)一步的數(shù)據(jù)傳輸?shù)囊徊糠?,所述部分的所述進(jìn)一步的數(shù)據(jù)傳輸包括重寫所述另一組控制數(shù)據(jù),所述直接存儲器存取控制器響應(yīng)于由所述一組控制數(shù)據(jù)控制的所述部分的所述進(jìn)一步的數(shù)據(jù)傳輸?shù)耐瓿桑L問所述更新的另一組的控制數(shù)據(jù),并且在所述更新的控制數(shù)據(jù)的控制下執(zhí)行進(jìn)一步部分的所述數(shù)據(jù)傳輸。
13、一種數(shù)據(jù)處理裝置,包括多個數(shù)據(jù)源/目的地、存儲器、處理器及根據(jù)權(quán)利要求1的直接存儲器存取控制器以用于控制所述數(shù)據(jù)源/目的地和所述存儲器之間的數(shù)據(jù)傳輸,所述數(shù)據(jù)源/目的地與所述直接存儲器存取控制器經(jīng)由所述多個通道進(jìn)行通信,并且所述存儲器適于存儲對應(yīng)于所述多個通道中的每個通道和處理器的所述兩組控制數(shù)據(jù)。
14、根據(jù)權(quán)利要求13所述的數(shù)據(jù)處理裝置,其特征在于,所述多個數(shù)據(jù)源/目的地包括外圍設(shè)備。
15、一種直接存儲器存取控制方法,用于控制多個數(shù)據(jù)源和多個數(shù)據(jù)目的地之間的數(shù)據(jù)傳輸,所述多個數(shù)據(jù)源和數(shù)據(jù)目的地經(jīng)由多個通道與所述直接存儲器存取控制器進(jìn)行通信,所述直接存儲器存取控制器還與存儲器和處理器進(jìn)行通信,所述存儲器適于存儲所述多個通道中的每個通道和所述處理器的兩組控制數(shù)據(jù);
所述直接存儲器存取控制方法包括如下步驟
從所述多個通道中的一個或所述處理器接收數(shù)據(jù)傳輸請求;
響應(yīng)于所述數(shù)據(jù)傳輸請求,而訪問存儲在與所述對應(yīng)通道或處理器相關(guān)的所述存儲器中的一組所述控制數(shù)據(jù);以及
在所述訪問控制數(shù)據(jù)的控制下執(zhí)行至少一部分所述數(shù)據(jù)傳輸。
16、根據(jù)權(quán)利要求15所述的直接存儲器存取控制方法,其特征在于,包括進(jìn)一步的步驟如下
在完成由所述一組控制數(shù)據(jù)控制的所述一部分的所述數(shù)據(jù)傳輸之后,訪問所述兩組所述控制數(shù)據(jù)中的另一組,以控制進(jìn)一步部分的所述數(shù)據(jù)傳輸;以及
執(zhí)行所述進(jìn)一步部分的數(shù)據(jù)傳輸。
17、根據(jù)權(quán)利要求15所述的直接存儲器存取控制方法,其特征在于,包括進(jìn)一步的步驟如下
響應(yīng)于來自所述多個通道中的所述一個或處理器的后續(xù)數(shù)據(jù)傳輸請求,而訪問所述兩組控制數(shù)據(jù)中的所述另一組;以及
在所述另一組控制數(shù)據(jù)的控制下執(zhí)行所述后續(xù)數(shù)據(jù)傳輸。
18、根據(jù)權(quán)利要求15所述的直接存儲器存取控制方法,其特征在于,所述直接存儲器存取控制器包括所述多個通道中的每個通道和處理器的指示器存儲,所述指示器存儲包括為所述多個通道中的每個通道和處理器指示所述兩組控制數(shù)據(jù)中的哪一組將被訪問的指示位,所述組的控制數(shù)據(jù)在所述訪問步驟中依賴于所述指示位的值而被訪問。
19、根據(jù)權(quán)利要求15所述的直接存儲器存取控制方法,其特征在于,在完成由所述一組控制數(shù)據(jù)控制的數(shù)據(jù)傳輸之后,包括所述進(jìn)一步的步驟,
標(biāo)記所述一組控制數(shù)據(jù)為無效;
向所述處理器發(fā)布中斷,以請求所述一組控制數(shù)據(jù)的更新,并標(biāo)記為有效;以及
響應(yīng)于請求的接收來執(zhí)行進(jìn)一步的數(shù)據(jù)傳輸
訪問所述另一組控制數(shù)據(jù);
執(zhí)行由所述另一組控制數(shù)據(jù)控制的所述進(jìn)一步的數(shù)據(jù)傳輸;
完成所述進(jìn)一步的數(shù)據(jù)傳輸之后,標(biāo)記所述另一組控制數(shù)據(jù)為無效;以及
向所述處理器發(fā)布中斷,以請求所述另一組控制數(shù)據(jù)的更新,并標(biāo)記為有效,
響應(yīng)于請求的接收來執(zhí)行又進(jìn)一步的數(shù)據(jù)傳輸
訪問所述一組控制數(shù)據(jù),并響應(yīng)于檢測所述一組控制數(shù)據(jù)被標(biāo)記為有效;
執(zhí)行由所述一組控制數(shù)據(jù)控制的所述又進(jìn)一步的數(shù)據(jù)傳輸。
20、根據(jù)權(quán)利要求16所述的直接存儲器存取控制方法,其特征在于,由所述一組控制數(shù)據(jù)控制的所述數(shù)據(jù)傳輸?shù)乃霾糠职ㄖ貙懰隽硪唤M控制數(shù)據(jù),所述方法包括完成由所述一組控制數(shù)據(jù)控制的所述數(shù)據(jù)傳輸之后的進(jìn)一步步驟
訪問所述另一組控制數(shù)據(jù),以用于控制所述數(shù)據(jù)傳輸?shù)倪M(jìn)一步的部分;
執(zhí)行所述重寫的另一組控制數(shù)據(jù)控制下的所述數(shù)據(jù)傳輸?shù)乃鲞M(jìn)一步的部分。
21、根據(jù)權(quán)利要求20所述的直接存儲器存取控制方法,其特征在于,包括重復(fù)地執(zhí)行所述方法的所述步驟,直到接收到來自處理器的通道禁用信號或直到所述數(shù)據(jù)傳輸已經(jīng)完成。
22、根據(jù)權(quán)利要求21所述的直接存儲器存取控制方法,其特征在于,在所述更新的另一組控制數(shù)據(jù)的控制下執(zhí)行所述數(shù)據(jù)傳輸?shù)乃鲞M(jìn)一步的部分的所述步驟的重復(fù)序列中的所述步驟中的一個包括,重寫所述一組控制數(shù)據(jù)。
23、根據(jù)權(quán)利要求20所述的直接存儲器存取控制方法,其特征在于,所述方法包括進(jìn)一步的步驟
響應(yīng)于進(jìn)一步的數(shù)據(jù)請求,訪問所述一組控制數(shù)據(jù);
在所述一組控制數(shù)據(jù)的控制下執(zhí)行一部分的進(jìn)一步的數(shù)據(jù)傳輸,所述部分的所述進(jìn)一步的數(shù)據(jù)傳輸包括重寫所述另一組控制數(shù)據(jù);
訪問所述更新的另一組控制數(shù)據(jù);以及
在所述更新控制數(shù)據(jù)的控制下執(zhí)行所述進(jìn)一步數(shù)據(jù)傳輸?shù)倪M(jìn)一步部分。
全文摘要
本發(fā)明公開了一種用于控制多個數(shù)據(jù)源和多個數(shù)據(jù)目的地之間的數(shù)據(jù)傳輸?shù)闹苯哟鎯ζ鞔嫒】刂破鳌6鄠€數(shù)據(jù)源和數(shù)據(jù)目的地經(jīng)由多個通道與直接存儲器存取控制器相通信,直接存儲器存取控制器進(jìn)一步與存儲器和處理器相通信。存儲器為多個通道中的每個以及處理器存儲兩組控制數(shù)據(jù)。直接存儲器存取控制器響應(yīng)于從多個通道中的一個或從處理器中接收的數(shù)據(jù)傳輸請求來訪問存儲在存儲器中的一組相應(yīng)的控制數(shù)據(jù),直接存儲器存取依賴于被訪問的控制數(shù)據(jù)而執(zhí)行請求的至少一部分?jǐn)?shù)據(jù)傳輸。
文檔編號G06F13/20GK101271437SQ20081010034
公開日2008年9月24日 申請日期2008年2月15日 優(yōu)先權(quán)日2007年2月16日
發(fā)明者S·R·梅洛, E·J·S·阿什費(fèi)爾德, P·基梅爾曼 申請人:Arm有限公司