對于6410的DMA控制器和2440的DMA控制器有很大不一樣。
S3C6410中DMA操作步驟:
1、決定使用安全DMAC(SDMAC)還是通用DMAC(DMAC);
2、開啟DMAC控制,設置DMAC_Configuration寄存器;
3、清除傳輸結束中斷寄存器和錯誤中斷寄存器;
4、選擇合適的優先級通道;
5、設置通道的源數據地址和目的數據地址(設置DMACC_SrcAddr和DMACC_DestAddr);
6、設置通道控制寄存器0(設置DMACC_Control0);
7、設置通道控制寄存器1,(傳輸大小,設置DMACC_Control1);
8、設置通道配置寄存器;(設置DMACC_Configuration)
9、使能相應通道(設置DMACC_Configuratoin);
1、決定使用安全DMAC(SDMAC)還是通用DMAC(DMAC);
在6410的DMA控制器里有四個控制器:
這里使用的是UART0的源,而該源可以還有的控制器有兩個:DMA0和SMDA0:
那么到底使用的哪個寄存器呢?是通過DMA_SEL這個寄存器來進行選擇的:
這里使用的是UART0,然后是通過SDMA0寄存器控制的。所以設置DMA_SEL的值為0即可:
2、開啟DMAC控制,設置DMAC_Configuration寄存器;
第一步選擇好了DMA寄存器后,接著就是使能DMA控制。使能是通過DMAC_Configuration寄存器:
由該寄存器的描述知道,要使能DMA只需將DMAC_Configuration寄存器的[0]位設置為1即可:
3、設置通道的源數據地址和目的數據地址(設置DMACC_SrcAddr和DMACC_DestAddr);
這一步跟2440是一樣的,都是設置DMA的源寄存器和DMA的目的寄存器。由于我們這里是將內存里的字符串送到串口,所以源寄存器地址是在內存,目的寄存器的地址是在串口0中寄存器的地址。實現代碼:
寄存器DMACC0SrcAddr參數:
4、設置通道控制寄存器0(設置DMACC_Control0);
[25]位中,由于我們的串口是外設,所以[25]位的值是1。然后在我們的源地址寄存器里,當輸出一個字符是,是會增長里面的參數,然后繼續輸出的。所以[26]位的值是1。[31]位是中斷的運行位,也是設置位1。最后設置的參數:
5、設置通道控制寄存器1,(傳輸大小,設置DMACC_Control1);
主要是設置傳輸數據的大小的:
實現:
6、設置通道配置寄存器;(設置DMACC_Configuration)
在上面的寄存器里,要考慮的位是[6]位、[11]位、[14]、[15]位。其中[6]位是選擇DMA的目的地址是不是一個外設,我們這里是串口,就是一個外設,所以是1。[11]位是流控制位和tranfer type:
我們這里是從內存到串口,所以是001.
[14]位和[15]位是中斷屏蔽的,設置為1.
最后實現的函數:
7、使能相應通道(設置DMACC_Configuratoin);
上面就設置好了使能6410的DMA通道的操作。在main.c調用:
Make編譯:
上一篇:19.液晶屏的原理
下一篇:17.DMA-2440
推薦閱讀最新更新時間:2025-06-07 23:47


設計資源 培訓 開發板 精華推薦
- 意法半導體緊湊型可配置車規負載驅動器具備安全引腳
- 美光宣布在美投資增至 2000 億美元,加建晶圓廠和 HBM 封裝設施
- AMD舉辦Advancing AI 2025大會:Instinct MI350系列GPU發布,35倍推理性能提升
- 特斯拉起訴前Optimus機器人工程師,指控其竊取商業機密
- Nordic Semiconductor將在MWC上海2025上展示前沿蜂窩物聯網解決方案
- SiC 市場的下一個爆點:共源共柵(cascode)結構詳解
- 香港科技大學工學院推出擬人化自動駕駛系統
- 現代摩比斯推出新型安全技術 防止追尾碰撞
- 研究人員開發新型機器人系統 利用AI賦能機器人技術
- 研究人員開發具有突破性觸覺靈敏度的機械手 可實現類人靈巧操作