Chinaunix首页 | 论坛 | 博客
  • 博客访问: 241581
  • 博文数量: 41
  • 博客积分: 928
  • 博客等级: 准尉
  • 技术积分: 550
  • 用 户 组: 普通用户
  • 注册时间: 2011-04-01 10:07
文章分类
文章存档

2011年(41)

分类: 嵌入式

2011-04-21 10:31:54

弄了好几天的DMA终于是成功了,只是成功了一小步,还要继续改善,为什么配置几个DMA寄存器这么难了,还要好好想想为什么?先记录一下,2011-04-21 10:31:54
又过了一天,现在的我还是不是很明白一些问题,可能是知识面的限制还是什么知识是我不熟悉的。首先一开始我从UART传到内存中,但是一直到现在都没解决的问题就在这里了,那就是一个关于DMA传输的物理地址的问题,首先由于C语言的不熟悉导致我对ARM中地址的定义都变成了很迷糊的。在另一篇文章中将分析#define rUTXH0 (*(volatile unsigned char *)0x50000020)的定义。其实做DMA的实验从内存分配一个字符串常量在传输到UART发送缓存寄存器就行了。但是从串口到内存,物理地址是一个方面,其实分配了一个物理地址后,用jlink调试的时候第一次传输可以得到数据但是后面就只能看到地址的变化里面数据不再变化,可能的原因是内存是不是需要先察除再读写了?不明白。
关于串口的几点总结:
1. DMA地址需要连续的物理地址,一般应用程序分配的是线性地址,虚拟地址,很可能是不连续的,这里需要地址映射。这一点很重要,其次分清字符串常量,全局的字符数组的区别,多看看内存区域的分配关系。
2. DMA的初始化可以有硬件和软件请求,2440中的DMA请求是硬件自动发出的,也就是DMA的初始化是由硬件自动完成的,不需要编程初始化。使用外部DMA源时需要自己编程初始化DMA。
3.DMA寄存器配置,2种传输大小,unit和burst。2种模式请求和握手,demand和handshake。2种服务单一服务和整体服务,single和whole。2011-04-22 21:39:24
阅读(1648) | 评论(0) | 转发(0) |
0

上一篇:裸机系列——DMA工作

下一篇:C优先级

给主人留下些什么吧!~~