cc2530dma控制器功能_无线传输应用背景下CC2530芯片DMA控制器故障研究_weixin_39830906的博客-程序员宅基地

技术标签: cc2530dma控制器功能  

硅谷网7月12日消息 (原文载于《硅谷》杂志6月刊)以RF模块采用DMA的方式将数据从内存搬运到TXbuffer从而实现实时数据的无线传输为应用背景,结合实践,给出DMA在此应用中的配置方案和采用在修改SRCADDR的值后,重新将&DMAConfig[0]赋值给DMA0CFG的方案,避免DMA控制器使用的故障。

以美国Ti公司CC2430/CC2530芯片为代表的ZigbeeSOC解决方案在国内高校企业掀起了一股Zigbee技术应用的热潮。ZigBee是基于IEEE802.15.4无线标准研制开发的有关组网、安全和应用软件方面的技术标准。其特点是近距离、低复杂度、自组织、低功耗、低数据速率、低成本。ZigBee的技术特性决定它将是无线传感器网络的最好选择,广泛用于物联网,自动控制和监视等诸多领域。【1】但有些无线通信的开发并不需要依赖Zigbee协议,开发者完全可以在此上开发自己的协议。一般情况下,用CC2530的RF模块发送数据,通过向寄存器RFD[0:7]重复的赋值可以将能将内存中的数据写入到RF模块的Buffer里面,再通过选通命令启动RF发送数据。而在实时性要求较高的应用中,使用向寄存器赋值的方法远大于通过DMA将内存中的数据“搬运”到Buffer里所耗时间。CC2530里的DMA控制器可以极大的释放8051CPU内核对数据的操作,可以使CPU在最小的干预下,实现内存到ADC或RF模块之间的数据传送。使用DMA“搬运”数据的功能,要对按照CC2530的datasheet【2】对DMA控制器的进行一系列的配置。本文主要研究两个方面,一是在应用背景下基于实践对DMA控制器进行配置,另一个测试DMA控制器中主要故障的解决方案。

1DMA控制器

CC2530的DMA控制器的特点:5个独立通道,3个优先级,32个触发事件,独立的源地址和目的地址控制,3个传送模式,支持设置变化的发送长度,单字和双字发送模式。对DMA控制器的设置基本上是基于以上7个特点。具体的配置项有:Sourceaddress、DestinationAddress、TransferCount、VLENSetting、TriggerEvent、SourceandDestinationIncrement、DMATransferMode、DMAPriority、ByteorWordTransfers、InterruptMask、Mode8Setting。

DMA的配置基于应用,以RF模块传送数据为例(RF模块需要发送和接收数据,在其buffer和内存之间的数据传输通过DMA来完成)DMA控制器的使用包括对DMA中断配置,DMA控制器的参数设置,DMA控制器启动。

2DMA控制器中断的配置

IEN1|=0x01;//开DMA中断

DMAIRQ=0;//清除标志位

(中断标志位的清除不仅仅在中断使用前要进行配置,在中断触发后的中断服务程序里面也清除)。

3DMA控制器的参数设置

DMA控制的参数设置是通过“填写”一张数据结构表(ConfigurationDataStructure)。数据结构表里的参数有:SRCADDR[15:8]、SRCADDR[7:0]、DESTADDR[15:8]、DESTADDR[7:0]、VLEN[2:0]、LEN[12:8]、LEN[7:0]、WORDSIZE、TMODE[1:0]、TRIG[4:0]、SRCINC[1:0]、DESTINC[1:0]、IRQMASK、M8、PRIORITY[1:0]与上述配置项是相对应的。CC2530DMA控制器配置的实现是通过先将数据表封装成结构体,配置好该结构体后将其的地址传给DMA0CFGH寄存器,这样才能被arm启动。CC2530共有两个这样的寄存器,另外一个是DMA1CFGH。前者对应通道0的配置信息,后者对应余下通道(1~4通道)。由于RF模块收发数据均要依靠DMA,因此使用DMA控制器两个通道。0通道负责将数据从内存搬运到Buffer,1通道负责将数据从Buffer搬运到内存。在DMA配置表的填写中,(以通道0的配置为例,1通道方法相同)源地址填待发数据的首地址,目的地址填Buffer的地址。RF的Buffer分为TXbuffer和RXbuffer,通道0是发送数据用,所以应该填写TXbuffer的地址,该地址在CC2530的ioCC2530.h已经宏定义成了宏(#defineX_RFDXREG(0x70D9)),取其地址赋值给DESTADDR。

DMA传送的第一个字节应是长度字节lengthbyte,DMA搬运数据前会检查该值,从而确定执行一次搬运所搬运的字节。而这个字节在设定后,可由VLEN改变,VLEN决定最后搬运的值,有4个选项,分别是lengthbyte+1,lengthbyte,lengthbyte+2,lengthbyte+3。这部分在设计程序时尤其注意,特别是在RF应用中。

LEN决定了DMA搬运的最大长度。即使VLEN长度大于LEN,搬运的长度仍然是LEN。

WORDSIZE的选择单字节。

TMODE在四个选择single、block、singlerepeated、blockrepeated中,通道0可以任选,通道1则只能选择single或者repeatedsingle。这个选择决定了每次DMA被触发后,DMA采取的搬运机制,触发一次是搬运一个字节还是搬运整块数据。由于将数据从RF模块的RXbuffer搬运到内存,DMA搬运数据的时间小于RF模块接收数据的时间,所以在RADIO触发方式下,选择single或者repeatedsingle可以保证RF模块收到一个字节立即通过DMA将器搬运至内存,这样才能保证接收到的数据被完整无错的存到内存中。

TRIG选择NONE,采用手动触发。通道1的配置要选择RADIO,即在RXbuffer收到一个字节,DMA立刻搬运一个字节到内存。DMA控制器一共提供了31个触发选项,包括定时器、I/0控制器、UART、Flash控制器、ADC、AES、Debuginterface的触发源,应用面非常广。

SRCINC和DESTINC决定源地址和目的地址在每次DMA完成一次搬运后地址变化的方式,在不变、增一、增二、减一四个选项中选增一的方式,SRCINC选择增一的方式,DESTINC选择不变。这是由于目的地址对应RFD寄存器,需将数据依次“搬运”到该寄存器,便能将相应的字节依次写入到TXbuffer中。

IRQMASK屏蔽通道中断的配置,所以IRQMASK|=0x03开通道0和1的中断,同时屏蔽其他的通道的中断。

M8选择搬运每个字节的位数。选择8位还是7位,其中7位是LSB小端。

PRIORITY优先级的选择。该优先级是与CPU相比,此应用中应该将DMA的优先级设置的比CPU高。

4DMA控制器启动

在填好DMA控制器的参数表后,将该表的地址(&DMAConfig[0])赋值给DMA0CFG,在使用前先arm上DMA,再手动触发,触发完后在DMA的中断服务程序启动RF发送。

DMAARM|=0x01;//对通道0arm

如果触发模式选择手动触发则

DMAREQ |=0x01;//手动触发DMA控制器

后才能触发DMA;若是RADIO触发则是收到一个数据会自动触发DMA。

5DMA控制器测试中主要故障的解决方案

按照CC2530的datasheet对DMA控制器进行按需配置,测试过程中发现一个问题:如果在使用了DMA后,修改DMA参数中源地址SRCADDR的值,在没有将该结构体参数表的地址&DMAConfig[0]重新赋值给DMA0CFG情况下arm后触发DMA,DMA控制器的执行会出现故障,可以进入中断,但是搬运的数据并非我们期望的数据。而修改其他参数则斐然。解决方案是在修改了SRCADDR的值后,重新将&DMAConfig[0]赋值给DMA0CFG。

6总结

DMA的配置需要细致的阅读CC2530的说明文档,按照开发的需要不断的测试。本文以RF模块的应用为背景,以采用DMA的方式将数据从内存搬运到TXbuffer近而实现无线实时数据传输为例,在实践和反复测试后中,给出了DMA在此应用的配置方案和测试中主要故障的解决方案。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_39830906/article/details/111545391

智能推荐

Java面试之计算机网络_早起的虫子jj的博客-程序员宅基地

1.说一下http协议:背景,互联网上需要传输视频、文字、图片等信息。应用层协议。请求结构、响应结构。http1.0、http1.1、http2.0,最后在到https.1.1 http1.0和1.1的区别?1)长连接。HTTP1.1支持长连接和请求的流水线处理,在一个TCP连接上可以传送多个HTTP请求和响应,减少了建立和关闭连接的消耗和延迟。2)节约带宽。HTTP1.0中存在一些浪费带宽的现象,例如客户端只是需要某个对象的一部分,而服务器却将整个对象送过来了,并且不支持**断点续传**功能。HTT

Haskell学习笔记:database 程序实例_Jiazhou_garland的博客-程序员宅基地

Haskell学习笔记:database 程序实例数据库要求代码验证数据库要求task0:有效性检验:检验数据库所有学生的ID,以及某学生选的课不重复task1 :输入某一特定学生ID,输出该学生选的课task2:输入某一特定课程号,输出选改课的所有学生名字task3: 根据学生的姓名,对数据库进行排序task4:实现两个数据库合并的功能代码import Data.List (...

Spring 动态管理定时任务(使用quartz) 只是管理启动时间 不能做启动和暂停_旧城旧爱的博客-程序员宅基地

前言:以前都没有做记录的习惯,发现做过的项目中用过的技术都很容易给忘了,然后要一次次的翻API一次次的查百度,浪费了大量的时间,看到了同事和朋友用博客的方式记录着自己的收获,想到自己也应该这样做,以后就不会浪费时间做自己做过的事了。框架:Spring4 MVC利用的jar包:quartz最后好不容易终于普通和动态的都整了出来,怕再给忘了,记录下。 以下是普通的定时器:

jupyter notebook kernel安装+自动补全_FlavorArray的博客-程序员宅基地

1. 在对应环境下为jupyter notedbook 添加kernelpip3 install ipykernel

ccf-csp 2018秋季真题题解_Raymond_YP的博客-程序员宅基地

卖菜问题描述  在一条街上有n个卖菜的商店,按1至n的顺序排成一排,这些商店都卖一种蔬菜。  第一天,每个商店都自己定了一个价格。店主们希望自己的菜价和其他商店的一致,第二天,每一家商店都会根据他自己和相邻商店的价格调整自己的价格。具体的,每家商店都会将第二天的菜价设置为自己和相邻商店第一天菜价的平均值(用去尾法取整)。  注意,编号为1的商店只有一个相邻的商店2,编号为n的商店只有一个相邻的商店n-1,其他编号为i的商店有两个相邻的商店i-1和i+1。  给定第一天各个商店的菜价,请计算第二..

项目编译器可以运行,打成jar包运行出现字符集乱码_dbtq82579的博客-程序员宅基地

今天将项目打成jar包在本地windows环境运行时,出现一系列乱码问题,但是在idea编译器环境中则是正常运行。因此导致后台程序无法识别相应的JSON串,导致报错无法继续运行。原因:运行环境字符集问题,windows环境下默认的字符集是gb-2312,而项目运行需要的字符集编码是utf-8 所以导致该项目接收数据后将中文字转化成了gb-2312,输出时出现乱码。解决方案...

随便推点

Python安装opencv(cv2)_hhh江月的博客-程序员宅基地_python安装opencv2

Python安装opencv(cv2)文章目录Python安装opencv(cv2)一、简介二、具体的安装一、简介本人在安装opencv(cv2)的时候,遇到了一些麻烦问题,这里来简单描述一下,并且提供解决方案。二、具体的安装刚开始我使用了:pip install cv2结果报错,后来发现,cv2是在opencv里面的,于是改成:pip install opencv结果,还是会报错,于是,我有查阅了相关的资料,结果发现,opencv有很多种版本,支持的是不同的语言或者系统的,所以在安装

qrencode生成二维码_xmmdbk的博客-程序员宅基地

#include<windows.h>#include<iostream>#include"stdio.h"#include"qrencode/qrencode.h"usingnamespacestd;#pragmawarning(disable:4099)#ifdef_DEBUG #pragmacomment(lib,"qrencode/...

linux下的C编程调试_搞机器人的程序猿的博客-程序员宅基地_linux调试c

linux下的C编程调试概述:Linux下C语言编程常用的编辑器是vim,编译器一般用gcc,编译链接程序用make,跟踪调试一般使用gdb,项目管理用makefile。Gcc简介:GCC 的意思也只是 GNU C Compiler 而已。经过了这么多年的发展,GCC 已经不仅仅能支持 C 语言;它现在还支持 Ada 语言、C++ 语言、Java 语言、Objective C 语言、Pascal 语言、COBOL语言,以及支持函数式编程和逻辑编程的 Mercury 语言,等等。而 GCC 也不再单只

Python的交互式界面 编写 ._hong2511的博客-程序员宅基地_python交互式窗口

1 from tkinter import * 2 # 导入tkinter模块的所有内容 3 4 root = Tk() 5 6 # 创建一个文本Label对象 7 textLabel =

轮播插件html结构,轻量级jQuery轮播图插件partialViewSlider_宇宙探奇的博客-程序员宅基地

partialViewSlider是一款轻量级jQuery轮播图插件。该jquery轮播图插件仅8k大小,响应式设计,支持移动设备,还支持多种预览模式。使用方法在页面中引入jquery和partialviewslider.min.js文件以及partialviewslider.min.css文件。HTML使用无序列表作为该轮播图的HTML结构。 初始化插件在页面DOM元素加载...

推荐文章

热门文章

相关标签