ZigBee学习之4——DMA

来源:互联网 发布:手机数据恢复精灵 破解 编辑:程序博客网 时间:2024/04/25 15:37

DMA(直接内存控制),DMA可以在外设之间传递数据而不要CPU的干预,节约了大量的CPU时间,并且减轻了CPU的负担,是一种快速高效的通信方式,在CC2430中集成了DMA控制器,提供5个DMA通道,并且官方推荐使用DMA方式传送RF寄存器中的数据,而且为了方便DMA对数据进行传输CC2430中对RF寄存器,硬件寄存器等进行了映射,全部映射到了XDATA区域,这样就可以用DMA来读取寄存器的数据,给操作带来了很大的方便。下面我们就对CC2430中集成的DMA进行试验。


关于DMA的寄存器并不多,但是DMA的操作和其他单片机寄存器的操作有一些不同的地方,就是DMA市通过读配置的方式来实现DMA的初始化的,所有的配置信息都存放在一个固定的地址中,当药启动DMA时只要先读入配置的地址然后启动相应地通道就可以了。


关于DMA的传输方式,在CC2430中集成的DMA控制器有四种传输模式:单模式:触发一次只能传送一个字节(字),直到传送完指定的长度后通知CPU,并且解除DMA通道工作状态;块模式:当触发一到就传输指定的长度,直到完成后就通知CPU;重复单一模式和重复块模式和非重复模式的区别在于当完成指定长度数据的传输并通知CPU后并不解除DMA通道的工作状态,而是DMA通道重新进入工作状态。


关于DMA的触发时个很灵活的东西,比如我可以用某个特定的触发条件,那么在程序中我就要确保这个触发条件在一定的情况下能够得到满足,否则得话DMA永远也不能进行传输,不过通过手动来第一次的启动DMA好像也是个不错的方法哦,呵呵!


DMA处理流程:
1、写DMA配置参数数据结构;
2、设置DMA配置的读取地(将配置参数数据结构作为第几个DMA通道的配置);
3、关闭将要使用的通道;
4、启动相应的通道;
5、清除相应通道的DMA传输中断标志;
(6、手动触发相应的通道开始传输;)
6、等待DMAIRQ变化。


不管是什么设备中的DMA基本上都是这个流程。前几天帮同学调试赛灵思平台的SOC上的DMA也是这样做的,可惜一直出现总线错误,找不到原因!只是不同的平台可能程序库的集成度不同,越高级的可能使用起来就越方便。