S3C2410下DMA的使用

2021-06-19 08:05:15 字數 2000 閱讀 3874

dma優點是其進行資料傳輸時不需要cpu的干涉,可以大大提高cpu的工作效率。

dma大容量資料傳輸中非常重要,比如影象資料傳輸,sd卡資料傳輸,usb資料傳輸等等。 s

3c2410有四個dma,每個dma支援工作方式基本相同,但支援的source dest可能略有不同。

那麼怎麼使用dma呢,s3c2410內部整合了dma控制器,我們只需要簡單的配置一下暫存器就可以實現dma的傳輸了。

步驟與要點: 1.

資料從**來,到**去?

使用dma當然首先我們要知道資料的流向,disrcx暫存器是dma初始源暫存器存放了資料的源位址。didstx是dma的初始目的暫存器,應該存放資料的目的位址。 2.

資料走得什麼匯流排?位址是否是固定的?

我們還要知道源與目的資料儲存裝置是在什麼匯流排上(ahb系統匯流排,一般是高速的比如記憶體,apb外圍匯流排低速的,比如sd,uart);

以及資料傳輸結束以後起始位址還原到傳送前的起始位址呢,還是在現在的末尾+1做為新的起始位址。

這些設定在disrccx與didstcx兩個暫存器裡面配置。 3.

資料以什麼方式傳輸?源與目的是什麼裝置?要不要自動過載?

需要確定資料的傳輸方式有請求還是握手(推薦使用handshake),根據上面的匯流排確定與什麼時鐘同步(hclk,pclk),是單元傳輸還是突發傳輸,是以位元組傳輸還是字傳輸,是否過載。是單服務(只傳送一次)還是多服務(不停迴圈傳送),以及資料的傳送大小。

選擇源與目的裝置,這裡dma控制器支援:

ch0:nxdreq0,uart0,sdi,timer,usb ep1

ch1: nxdreq1,uart1,i2ssdi,spi0,usb ep2

ch2:i2ssdo,i2ssdi,sdi,timer, usb ep3

ch3:uart1,sdi,spi1,timer, usb ep4

最後還要確定中斷是不是傳輸結束發生(curr_tc記數是不是0)。

這些都在dconx中設定。 4.

怎麼開始傳輸dma和停止dma,這些在dmasktrig中設定。

下面是dma在sd卡中使用的一段示例:

sd卡讀的dma設定:

pisr_dma0=(unsigned)dma_end; //dma中斷服務函式入口位址,一次dma傳送結束發生rintmsk = ~(bit_dma0); //開dma中斷

rdisrc0=(int)(tx_buffer);//源位址在記憶體

就是從記憶體讀資料到sd卡

rdisrcc0=(0<<1)+(0<<0);//記憶體的匯流排是 ahb, 位址是自動增加inc

rdidst0=(u32)(sdidat); // 目的位址sd卡

rdidstc0=(1<<1)+(1<<0);// 在匯流排apb, 位址是固定的因為sd的fifo是固定大的

rdcon0=(1<<31)+(0<<30)+(1<<29)+(0<<28)+(0<<27)+(2<<24)+(1<<23)+(1<<22)+(2<<20)+128*block;

//handshake握手模式, 與 pclk同步,傳送完產生中斷, 單元傳輸, 單服務, sdi

//不自動過載,每次傳送乙個字,傳送大小

rdmasktrig0=(0<<2)+(1<<1)+0;//不停止, dma0 channel 啟動,不用sw觸發

sd卡寫的相應**

pisr_dma0=(unsigned)dma_end;

rintmsk = ~(bit_dma0);

rdisrc0=(int)(tx_buffer);

rdisrcc0=(0<<1)+(0<<0);

rdidst0=(u32)(sdidat);

rdidstc0=(1<<1)+(1<<0);

rdcon0=(1<<31)+(0<<30)+(1<<29)+(0<<28)+(0<<27)+(2<<24)+(1<<23)+(1<<22)+(2<<20)+128*block;

rdmasktrig0=(0<<2)+(1<<1)+0; 0

給主人留下些什麼吧!~~

S3C2410讀寫Nand Flash分析

2009 01 15 16 51 321人閱讀 收藏舉報 s3c2410讀寫nand flash分析 一 結構分析 s3c2410處理器整合了8位nandflash控制器。目前市場上常見的8位nandflash有三星公司的k9f1208 k9f1g08 k9f2g08等。k9f1208 k9f1g0...

s3c2410的nand flash的驅動分析

以前都是把別人寫好的 直接拿過來用,而沒有去關心裡面到底怎麼實現的,昨晚對照著samsung 2410和k 9f1208的晶元資料把這些 讀了一遍,終於明白了對nand flash的操作一步步是怎麼實現的了。以下的這些 可以在vivi或者kernel裡面找到 對乙個nand flash的操作,總體上...

S3C2410快速啟動的實現

嵌入式系統對功能 可靠性 成本 體積 功耗等均有嚴格要求,以arm體系結構為基礎的各種risc微處理器具有靈活的特性和強大的效能,在嵌入式系統中得到了廣泛的應用。s3c2410是三星公司基於arm920t設計的一款處理器,在開發基於s3c2410的系統的過程中,如何讓系統快速穩定地啟動是乙個重要問題...