tq2440 的dma裸机驱动
来源:互联网 发布:阿里云 vps 编辑:程序博客网 时间:2024/05/20 05:56
<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);"></span><span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">DMA是一种提高CPU效率的工具。如果让cpu去负责搬运数据,效率是十分低下的,因为在这个过程中,cpu就只能做这么一件事。因此DMA就应运而生。只要告诉dma,要搬运的数据源地址,以及要搬运到哪里去的地址,何种方式,使能它,DMA就会获取总线控制权,自动地搬运数据,从而解放cpu,提高效率。</span>
tq2440的dma裸机驱动,按以下方式进行初始化:
//初始化原地址
//初始化目的地址
//dma 控制方式初始化
//使能dma
参照2440芯片手册,dma共有4个通道,我们选择将字符串数据传输到串口上(UART0),对应通道ch-0.
each DMA channel has nine control registers.ch-0 有9个寄存器,但在本次裸机驱动中,并不需要全部用上。(用到再来细究)
首先是初始化原地址:
DISRCn 是一个source register ,需要给它传递数据源地址;
DISRCCn 是source control register ,通过对此register进行操作,控制某些方式。
它的[0]位为 select the address increment ,赋值为0,表示DISRCn在传输完一次之后,地址会增加,指向下一个地址单元
第[1]位为选择source的总线结构,我们要传递的数据在内存中,内存是AHB总线,故在这儿select 0.
第二步是初始化目的地址:
DIDSTn 是一个 destination register,传递给它的值,应该是一个地址,此处应为我们的uart0的发送缓冲区地址,UTXH0。
DIDSTC0 ,destination control register ,控制方式用。
第[2]位,但传送剩余个数为0时,发生一次中断,因此select 0
第[1]位,uart0 处在APB总线上,因此选择1
第[0]位,uart0的UTXH0地址应该固定住,因为我们定向输出到串口,所以select 1
第三步,dma控制方式初始化
DCONn control register .
[24-26]位,select DMA request source for each DMA,此处为001,uart0
[23] 位 为,1.
[22] ,DMA传送完毕后就关闭,故选 1.
[20-21],默认传送字节,byte。
[19-0],传送的数据个数
第四步,使能dma,DMASKIRIGn,把该寄存器的第[1]位置 1 。
一下为裸机的一些代码。
11 char *buf = "hello world!\n"; 12 void dma_init() 13 { 14 //初始化源地址 15 DISRC0 = (unsigned int)buf; 16 DISRCC0 = (0<<0) | (0<<1); 17 18 19 20 //初始化目的地址 21 DIDST0 = UTXH0; 22 DIDSTC0 = (1<<0) | (1<<1) | (0<<2); 23 24 DCON0 = (1<<24) | (1<<23) | (1<<22) | (13<<0); 25 26 } 27 28 void dma_start() 29 { 30 DMASKTRIG0 = (1<<1); 31 }
- tq2440 的dma裸机驱动
- TQ2440裸机上的UART程序分析
- TQ2440上的PWM实验(裸机)
- TQ2440的AD驱动
- SPI的驱动 dma
- linux的dma驱动
- tq2440 裸机使用mmu
- TQ2440裸机MMU
- linux内核驱动:TQ2440的LED驱动
- S3C6410 裸机DMA
- mini2440裸机之DMA
- mini2440裸机之DMA
- mini2440裸机之DMA
- zynq DMA 裸机实例
- S3C6410-DMA裸机编程
- tiny6410的IIC裸机驱动
- DMA方式的网卡驱动
- TQ2440裸机跑NRF24l01模块
- poj2395 kruskal
- 面试的算法2(C语言)(整理)
- 一切皆对象
- C++拷贝构造函数
- RTFM("Read The Fucking Manual")的意思
- tq2440 的dma裸机驱动
- Java 堆排序 Top K
- Linux 下 C 语言实现 Copy 复制命令
- hdu3944 DP? (lucas定理+预处理)
- 较简单的正则匹配引擎实现
- 自定义View
- HDU 1394 Minimum Inversion Number (BIT入门)
- iOS游戏IAP数据服务器验证
- Mac上的安卓相关工具