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的系統的過程中,如何讓系統快速穩定地啟動是乙個重要問題...