《ARM Cortex-A9多核嵌入式系統(tǒng)開發(fā)教程》課件第八章_第1頁
《ARM Cortex-A9多核嵌入式系統(tǒng)開發(fā)教程》課件第八章_第2頁
《ARM Cortex-A9多核嵌入式系統(tǒng)開發(fā)教程》課件第八章_第3頁
《ARM Cortex-A9多核嵌入式系統(tǒng)開發(fā)教程》課件第八章_第4頁
《ARM Cortex-A9多核嵌入式系統(tǒng)開發(fā)教程》課件第八章_第5頁
已閱讀5頁,還剩24頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

DMA控制器8DMAC簡介DMAC工作原理PL330指令集其他相關(guān)寄存器DMA編程實(shí)例第8章DMA控制器8.1DMAC簡介

當(dāng)需要在系統(tǒng)內(nèi)存與高速外設(shè)或者內(nèi)存的不同區(qū)域之間進(jìn)行批量數(shù)據(jù)的快速傳送時(shí),采用查詢或中斷的方式并不能滿足要求。DMA(DirectMemoryAccess,存儲(chǔ)器直接訪問)正是為解決這一問題提出來的,無需占用CPU,在DMA控制器的控制下,可以高速地完成外設(shè)和存儲(chǔ)器之間數(shù)據(jù)的交換。CPU除了在數(shù)據(jù)傳輸開始和結(jié)束時(shí)做一些處理外,在傳輸過程中,CPU可以進(jìn)行其他工作。這樣,在大部分時(shí)間里,CPU和DMA都處于并行操作狀態(tài)。DMAC(DirectMemoryAccessController)是一個(gè)自適應(yīng)、先進(jìn)的微控制器總線體系的控制器,它由ARM公司設(shè)計(jì)并基于PrimeCell技術(shù)標(biāo)準(zhǔn)。DMAC提供了一個(gè)AXI接口用來執(zhí)行DMA傳輸,以及兩個(gè)APB接口用來控制這個(gè)操作。DMAC在安全模式下用一個(gè)APB接口執(zhí)行TrustZone技術(shù),其他操作則在非安全模式下執(zhí)行。圖8.1是DMAC外部接口框圖。第8章DMA控制器圖8.1DMAC外部接口框圖第8章DMA控制器圖8.2DMAC原理框圖第8章DMA控制器由圖8.2可以看出,Exynos4412的DMA模塊又分為兩個(gè)子模塊,DMA_mem和DMA_peri。其中,DMA_mem用于內(nèi)存之間的數(shù)據(jù)傳輸;DMA_peri用于內(nèi)存與外設(shè)之間進(jìn)行數(shù)據(jù)傳輸。DMA_mem包括一個(gè)PL330模塊,而DMA_peri包括兩個(gè)PL330模塊(分別為DMA0和DMA1)。每個(gè)PL330模塊有32個(gè)中斷源,但是每一次只能發(fā)送一個(gè)中斷請求到中斷控制器第8章DMA控制器8.2DMAC工作原理DMAC內(nèi)部包括了指令處理模塊,使得DMAC本身能夠處理代碼以控制DMA傳送。這些指令代碼存儲(chǔ)在系統(tǒng)存儲(chǔ)器中,DMAC通過AXI接口獲取這些代碼。DMAC的8個(gè)通道都是可配置的,且每個(gè)都支持單個(gè)并發(fā)線程的操作。除此之外,還有一個(gè)管理線程、專門用來初始化DMA通道的線程。DMAC使用了變長指令集,范圍為1~6字節(jié),并為每個(gè)通道提供了單獨(dú)的PC寄存器。第8章DMA控制器1、工作過程當(dāng)外設(shè)準(zhǔn)備就緒,向DMA控制器(DMAC)發(fā)出DMA請求信號(hào)(DREQ)。DMAC收到此信號(hào)后,向CPU發(fā)出總線請求信號(hào)(HOLD)。CPU在完成當(dāng)前總線操作后立即對DMA請求信號(hào)做出響應(yīng)。DMAC獲得總線的控制權(quán)。

DMAC獲得總線的控制權(quán)后,向地址總線發(fā)出地址信號(hào),指出傳送過程需使用的內(nèi)存地址。向外設(shè)發(fā)出DMA應(yīng)答信號(hào)(DACK),實(shí)現(xiàn)該外設(shè)與內(nèi)存之間的DMA傳送。第8章DMA控制器(4)在DMA傳送期間,DMAC發(fā)出內(nèi)存和外設(shè)的讀/寫信號(hào)。(5)為了決定數(shù)據(jù)塊傳輸?shù)淖止?jié)數(shù),在DMAC內(nèi)部必須有一個(gè)“字節(jié)計(jì)數(shù)器”。在開始時(shí),由軟件設(shè)置數(shù)據(jù)塊的長度,在DMA傳送過程中,每傳送一個(gè)字節(jié),字節(jié)計(jì)數(shù)器減1,減為0時(shí),該次DMA傳輸結(jié)束。(6)

DMA過程結(jié)束時(shí),DMAC向CPU發(fā)出結(jié)束信號(hào)(撤消HOLD請求),將總線控制權(quán)交還CPU。第8章DMA控制器2、傳送的方式?I/O接口到存儲(chǔ)器方式:I/O接口的數(shù)據(jù)利用DMAC送出控制信號(hào),將數(shù)據(jù)輸送到數(shù)據(jù)總線D0~D7上,同時(shí)DMAC送出存儲(chǔ)器單元地址及控制信號(hào),將存于D0~D7上的數(shù)據(jù)寫入選中的存儲(chǔ)單元中。這樣就完成了I/O接口到存儲(chǔ)器的一個(gè)字節(jié)的傳送。第8章DMA控制器(2)?存儲(chǔ)器到I/O接口方式:

在進(jìn)行傳送時(shí),DMAC送出存儲(chǔ)器地址和控制信號(hào),將選中的存儲(chǔ)器單元的內(nèi)容讀入數(shù)據(jù)總線的D0~D7,然后DMAC送出控制信號(hào),將數(shù)據(jù)寫到指定的端口中。DMAC再修改“地址寄存器”和“字節(jié)計(jì)數(shù)器”的內(nèi)容。第8章DMA控制器(3)?存儲(chǔ)器到存儲(chǔ)器方式:

這種方式的DMA數(shù)據(jù)傳送是用“數(shù)據(jù)塊”方式傳送。首先,送出存儲(chǔ)器源的地址和控制信號(hào),將選中內(nèi)存單元的數(shù)據(jù)暫存,然后修改“地址寄存器”和“字節(jié)計(jì)數(shù)器”的值,接著,送出存儲(chǔ)器目標(biāo)的地址和控制信號(hào),將暫存的數(shù)據(jù)通過數(shù)據(jù)總線寫入存儲(chǔ)器的目標(biāo)區(qū)域中,最后修改“地址寄存器”和“字節(jié)計(jì)數(shù)器”的內(nèi)容,當(dāng)“字節(jié)計(jì)數(shù)器”的值減少到零時(shí)便結(jié)束一次DMA傳送。第8章DMA控制器8.3PL330指令集1.?DMAMOV

該指令是一條數(shù)據(jù)轉(zhuǎn)移指令,它可以將一個(gè)32位的立即數(shù)移動(dòng)到源地址寄存器、目標(biāo)地址寄存器、通道控制寄存器3種類型的寄存器中。(1)源地址寄存器:該寄存器提供了DMA通道的數(shù)據(jù)源的地址。DMAC從該地址取得數(shù)據(jù),每個(gè)通道都有自己的數(shù)據(jù)源地址寄存器。第8章DMA控制器表8.1通道源地址寄存器注:SA_n表示DMA通道n的源地址(SourceAddress)。第8章DMA控制器(2)目標(biāo)地址寄存器:該寄存器提供了DMA的目標(biāo)數(shù)據(jù)存放地址,和數(shù)據(jù)源地址寄存器是相互對應(yīng)的。表8.2是每個(gè)通道的目標(biāo)地址寄存器列表。表8.2通道目標(biāo)地址寄存器第8章DMA控制器(3)通道控制寄存器:該寄存器可以控制DMA在AXI中的傳輸,并且該寄存器記錄了一些關(guān)于目標(biāo)與源寄存器的基本配置,如表8.3所示。圖8.3是該寄存器的位分配順序。表8.3通道控制寄存器第8章DMA控制器2.?DMALD

該指令是一條DMAC裝載指令,它可以從源數(shù)據(jù)地址中讀取數(shù)據(jù)序列到MFIFO中,如果src_inc位被設(shè)置,則DMAC會(huì)自動(dòng)增加源地址的值。

其指令格式為:DMALD[S|B]其中:[S]——如果S位被指定,則bs位被置0,且x轉(zhuǎn)換為0。[B]——如果B位被指定,則bs位被置0,且x轉(zhuǎn)換為1。第8章DMA控制器3.?DMAST

該指令與DMALD相互對應(yīng),是一條DMA存儲(chǔ)指令,是將MFIFO中的數(shù)據(jù)轉(zhuǎn)移到目的地址中。目的地址是由目的地址寄存器所指定的,如果dst_inc被置位,則DMAC會(huì)自動(dòng)增加目的地址的值。

其指令格式為:DMAST[S|B]其中:[S]——如果S位被指定,則bs位被置0,且x轉(zhuǎn)換為1。[B]——如果B位被指定,則bs位被置1,且x轉(zhuǎn)換為1。第8章DMA控制器4.?DMARMB

該指令是讀內(nèi)存柵欄指令。5.?DMAWMB

該指令是寫內(nèi)存柵欄指令。6.?DMALP/DMALPEND

該指令用來指定某個(gè)指令段的開始位置,需要DMALPEND指定該指令段的結(jié)束位置,一旦指定,DMAC會(huì)循環(huán)執(zhí)行介于DMALP與DMALPEND之間的指令,直到循環(huán)次數(shù)為0結(jié)束。第8章DMA控制器8.?DMASEV

使用該指令可以產(chǎn)生一個(gè)事件信號(hào),可以有以下兩種模式:(1)產(chǎn)生一個(gè)事件<event_num>。(2)產(chǎn)生一個(gè)中斷信號(hào),irq<event_num>。其指令格式為:DMASEV <event_num> 9.?DMAEND

該指令用來通知DMAC結(jié)束一次操作集合第8章DMA控制器其中,[10:8]用來確定通道號(hào)。對應(yīng)關(guān)系為:b000?=?DMA通道0;b001?=?DMA通道1;b010?=?DMA通道2;b011?=?DMA通道3;b100?=?DMA通道4;b101?=?DMA通道5;b110?=?DMA通道6;8.4其他相關(guān)寄存器?DBGINST0

該寄存器可控制調(diào)試指令、通道、DMAC線程信息。圖8.10DBGINST0位控制第8章DMA控制器2.?DBGINST1

該寄存器控制內(nèi)存中設(shè)置的指令段首地址,也就是DMAC第一次取指令的地址。DBGCMD

該寄存器控制調(diào)試命令的執(zhí)行,通過配置它,可以控制DMAC執(zhí)行一些指定的工作。第8章DMA控制器8.5DMA編程實(shí)例8.5.1DMA驅(qū)動(dòng)程序編寫步驟1.申請DMA通道

在申請DMA通道之前至少需要確定外設(shè)ID(filter_param)和通道類型(mask)。外設(shè)ID可以通過數(shù)據(jù)手冊或者PL330獲得,通道類型一般設(shè)置為DMA_SLAVE或DMA_CYCLIC。

在Linux3.8的內(nèi)核中,通過三星公司提供的以下API完成這一操作:sdd->dma->ch=sdd->ops->request(dma->dmach,&req);第8章DMA控制器2.設(shè)置DMA通道傳輸參數(shù)

設(shè)置DMA通道方向、通道設(shè)備端的物理地址(如果使用DMA向SPI收發(fā)數(shù)據(jù),則為SPI數(shù)據(jù)寄存器的物理地址)、通道字節(jié)寬度等信息。

在Linux3.8內(nèi)核中,通過三星公司提供的以下API完成這一操作:sdd->ops->config(dma->ch,&config);第8章DMA控制器3.獲取desc添加回調(diào)函數(shù)

在驅(qū)動(dòng)函數(shù)中,將發(fā)送數(shù)據(jù)個(gè)數(shù)、通道方向、數(shù)據(jù)緩存的總線地址等參數(shù)賦值給scatterlist結(jié)構(gòu)體,通過調(diào)用dmaengine_prep_slave_sg或dmaengine_prep_dma_cyclic獲取desc,再將回調(diào)函數(shù)指針傳給desc->callback。

在Linux3.8內(nèi)核中,通過三星公司提供的以下API完成這一操作:

sdd->ops->prepare(dma->ch,&sdd->rx_info);第8章DMA控制器4.遞交配置好的通道

調(diào)用dmaengine_submit((structdma_async_tx_descriptor*)desc),將desc提交到DMA驅(qū)動(dòng)等待隊(duì)列,通常第3和第4步都是在DMA驅(qū)動(dòng)的prepare函數(shù)中實(shí)現(xiàn)的。

在Linux3.8內(nèi)核中,通過三星公司提供的以下API完成這一操作:

sdd->ops->prepare(dma->ch,&sdd->rx_info);第8章DMA控制器5.開啟通道,等待回調(diào)函數(shù)

用dma_async_issue_pending(

)函數(shù)激活掛起的等待隊(duì)列,如果此時(shí)通道空閑,則開始傳輸隊(duì)列中的數(shù)據(jù),傳輸結(jié)束后調(diào)用回調(diào)函數(shù)。

在Linux3.8內(nèi)核中,通過三星公司提供的以下API完成這一操作:sdd->ops->trigger(dma->ch);第8

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論