基于LPC900单片机的射频数传模块开发
无线数传设备DTD433可以提供高稳定、高可靠、低成本的数据传输。它提供了透明的RS232/RS485接口,具有安装维护方便、绕射能力强、组网结构灵活、大范围覆盖等特点,适合于点多而分散、地理环境复杂等应用场合。该设备提供点对点通信,也可以实现点对多点通信,不需要编写程序,不需要布线。一般电工调试也可以通过。无线数据传输设备广泛应用于无线数传领域,典型应用包括遥控、遥感、遥测系统中的数据采集、检测、报警、过程控制等环节。
1 射频数传模块开发平台的构建
建立软硬件开发平台是模块开发的首要任务,比较了几种射频数传模块方案,最后决定采用由LPC900系列FLASH单片机和CC1000射频传输芯片为主芯片的开发方案。
1.1 主芯片简介
LPC2900 FLASH单片机是恩智浦半导体(NXP Semiconductors)(由飞利浦创建的独立半导体公司)发布了LPC2900系列微控制器,进一步扩展了其ARM7和ARM9微控制器业界最广泛的生产线。恩智浦LPC2900基于广受欢迎的、高性能的ARM968E-S处理器,针对工业、医疗、发动机控制和汽车电子行业内的应用,为设计师提供一个具有高成本效益、灵活的、低功耗的解决方案。
CC1000是根据Chipcon公司的SmartRF技术,在0.35μm CMOS 工艺下制造的一种理想的超高频单片收发通信芯片。它的工作频带在315、868及915MHz,但CC1000很容易通过编程使其工作在300~1000MHz范围内。它具有低电压(2.3~3.6V),极低的功耗,可编程输出功率(-20~10dBm),高灵敏度(一般-109dBm),小尺寸(TSSOP-28封装),集成了位同步器等特点。其FSK数传可达72.8Kbps,具有250Hz步长可编程频率能力,适用于跳频协议;主要工作参数能通过串行总线接口编程改变,使用非常灵活。
1.2 开发平台构建
LPC900系列单片机提供了较为完善的软硬件开发工具,在系统开发中采用TKS932仿真器,用于系统的仿真、调试。该仿真器支持目前流行的KEILC公司的μVisionⅡ集成开发环境。
通过自行设计的射频模块开发板以及附加一些辅助电路,配合TKS932仿真器及软件开发工具μVisionⅡ,构成的射频数传模块开发平台的框图如图1所示。
![](../img/eep/emb/emb-10068xacflqhr5ze.jpg)
PC机的COM1口与TKS932仿真器进行通信,对模块软件进行软、硬件仿真。COM2口则与LPC922进行通讯,一方面可以把软件调试信息更加直观地反映出来,配合软件调试;另一方面可以通过该串口接收或者发送数据到射频模块。
2 软件开发及调试
2.1 数传模块软件基本结构说明
射频传输芯片CCl000具有3种状态:IDEL(空闲),RX(接收数据),TX(发送数据)。整体上看,这是个具有3种状态的状态机模型,状态之间的相互转换见图2。模块主程序除了完成基本的芯片初始化工作外,程序的运行主要是根据在CC1000的DCLK管脚产生的中断,由中断管理程序进行状态检测及切换.
![](../img/eep/emb/emb-10069ul53i1m25ia.jpg)
2.2 软件调试开发中遇到的问题分析
该开发平台采用的软件开发环境为μVisionⅡ。该环境内嵌多种符合当前工业标准的开发工具,可以完成从工程建立和管理、编译、连接、目标代码的生成,软件仿真,硬件仿真等完整的开发流程。即使不使用C语言而仅用汇编语言编程,其方便的集成环境、强大的软件仿真调试工具也会令开发进度大大加快。但是其开发环境又有其自身的特色,需要对其中一些特殊的问题加以考虑。
2.2.1 程序中的关键字
在进行程序设计时不能使用C51编译器的关键字来定义变量名或者函数名。C51是区别大、小字母的,而关键字都是小写字母。
一些函数定义从字面上看没有问题,但在编译时均指示错误,查看C51关键字有关目录,查出原因在于变量参数data为其关键字,造成了编译时的错误。
下面列出了一些常用的关键字,在程序设计时定义变量或函数名时应特别注意避免使用:
_at_,alien,bdata,bit,code,data,idata,large,pdata,sbit,sfr,sfrl6,smal,task,using,xdata,priority。
2.2.2 BIT和SBIT的区别和全局变量、局部变量的使用
bit主要用位变量操作。sbit虽然也是用于位变量的操作,但其使用范围较bit更广泛。sbit不仅可以用于定义可位寻址寄存器的各个位,使我们可以对寄存器进行位操作,sbit的另一个重要作用在于构建类似于共用体数据类型,这种数据类型在LPC922与CC1000的串行/并行数据相互转换中起着重要的作用。例如:
unsigned char bdata myDatas2;//定义一个可位寻址的全局变量
//定义变量的各个位
sbit cDatas0=myDatas2^O;
sbit cDatasl=myDatas2^l;
sbit cDatas2=myDatas2^2;
sbit cDatas3=myDatas2^3;
sbit eDatas4=myDatas2^4;
sbit eDatas5=myDatas2^5;
sbit cDatas6=myDatas2^6;
sbit cDatas7=myDatas2^7;
在这里myDatas
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)