嵌入式系统开发技术课程.docx

上传人:b****5 文档编号:14514788 上传时间:2023-06-24 格式:DOCX 页数:19 大小:234.68KB
下载 相关 举报
嵌入式系统开发技术课程.docx_第1页
第1页 / 共19页
嵌入式系统开发技术课程.docx_第2页
第2页 / 共19页
嵌入式系统开发技术课程.docx_第3页
第3页 / 共19页
嵌入式系统开发技术课程.docx_第4页
第4页 / 共19页
嵌入式系统开发技术课程.docx_第5页
第5页 / 共19页
嵌入式系统开发技术课程.docx_第6页
第6页 / 共19页
嵌入式系统开发技术课程.docx_第7页
第7页 / 共19页
嵌入式系统开发技术课程.docx_第8页
第8页 / 共19页
嵌入式系统开发技术课程.docx_第9页
第9页 / 共19页
嵌入式系统开发技术课程.docx_第10页
第10页 / 共19页
嵌入式系统开发技术课程.docx_第11页
第11页 / 共19页
嵌入式系统开发技术课程.docx_第12页
第12页 / 共19页
嵌入式系统开发技术课程.docx_第13页
第13页 / 共19页
嵌入式系统开发技术课程.docx_第14页
第14页 / 共19页
嵌入式系统开发技术课程.docx_第15页
第15页 / 共19页
嵌入式系统开发技术课程.docx_第16页
第16页 / 共19页
嵌入式系统开发技术课程.docx_第17页
第17页 / 共19页
嵌入式系统开发技术课程.docx_第18页
第18页 / 共19页
嵌入式系统开发技术课程.docx_第19页
第19页 / 共19页
亲,该文档总共19页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

嵌入式系统开发技术课程.docx

《嵌入式系统开发技术课程.docx》由会员分享,可在线阅读,更多相关《嵌入式系统开发技术课程.docx(19页珍藏版)》请在冰点文库上搜索。

嵌入式系统开发技术课程.docx

嵌入式系统开发技术课程

*****************

实践教学

*******************

兰州理工大学

计算机与通信学院

 

2013年春季学期

 

嵌入式系统开发技术课程设计

 

题目:

2.4G各信道信号强度测试实验

专业班级:

通信工程4班

姓名:

牛毅

学号:

10250424

指导教师:

薛建斌

成绩:

摘要

在嵌入式操作系统上,Linux一直因其内核精简、代码开发、基于移植等特点使得嵌入式能力更加强大。

而本设计是嵌入式应用里比较简单的一个实现,是针对嵌入式开发板CC2530的一个模块进行构建和设计的,要实现的是两个CC2530间的RF的无线通信,并且要对各个信道信号进行监测,嵌入式开发是现阶段,现世界比较流行的开发模式。

在模块设计中,在两个CC2530的RF模块间进行无线通信,并且在无线通信的基础上进行2.4G频段信道11-26各个信道的信号强度分析与测试。

本次课程设计使用CC2530的RF射频CC2530RF功能模块及带有RF功能模块的智能主板分析2.4G频段信道11-26各个信道的信号强度。

而且测试的效果是通过LED灯的亮灭来进行监测的。

关键词:

RF的无线通信、CC2530、2.4G信道信号监测

前言

嵌入式系统(Embeddedsystem)是一种专用的计算机系统,是以应用为中心,计算机技术为中心,硬件软件可裁剪的系统。

作为装置或设备的一部分。

通常,嵌入式系统是一个控制程序存储在ROM中的嵌入式处理器控制板。

事实上,所有带有数字接口的设备,如手表、ATM、智能手机、汽车等,都使用嵌入式系统,有些嵌入式系统还包含操作系统,但大多数嵌入式系统都是是由单个程序实现整个控制逻辑。

而本设计是嵌入式应用里比较简单的一个实现,是针对嵌入式开发板CC2530的一个模块进行构建和设计的,要实现的是两个CC2530间的RF的无线通信,并且要对各个信道信号进行监测,嵌入式开发是现阶段,现世界比较流行的开发模式。

嵌入式系统是计算机技术、通信技术、半导体技术、微电子技术、语音图象数据传输技术,甚至传感器等先进技术和具体应用对象相结合后的更新换代产品。

因此往往是技术密集、投资强度大、高度分散、不断创新的知识密集型系统。

嵌入式系统为控制、监视或辅助设备、机器或用于工厂运作的设备。

与个人计算机这样的通用计算机系统不同,嵌入式系统通常执行的是带有特定要求的预先定义的任务。

由于嵌入式系统只针对一项特殊的任务,设计人员能够对它进行优化,减小尺寸降低成本。

由于嵌入式系统通常进行大量生产。

嵌入式系统的核心是由一个或几个预先编程好以用来执行少数几项任务的微处理器或者单片机组成。

信息时代,数字时代使得嵌入式产品获得了巨大的发展契机,为嵌入式市场展现了美好的前景,同时也对嵌入式生产厂商提出了新的挑战,从中我们可以看出未来嵌入式系统的几大发展趋势。

一CC2530基本介绍

1.1.CC2530芯片基本介绍

CC2530芯片具有如下主要性能:

高性能和低功耗的8051微控制器核;32KB、64KB或128KB的系统内可编程闪存;8-KBRAM,具备在各种供电方式下的数据保持能力;集成符合IEEE802.15.4标准的2.4GHz的RF无线电收发机;极高的接收灵敏度和抗干扰性能;可编程的输出功率高达4.5dBm;只需一个晶振,即可满足网状网络系统的需要;在供电模式1时仅24mA的流耗4μs就能唤醒系统;在睡眠定时器运行时仅1μA的流耗;在供电模式3时仅0.4μA的流耗,外部中断能唤醒系统;硬件支持CSMA/CA功能;较宽的电压范围(2.0~3.6V);支持精确的数字化RSSI/LQI和强大的5通道DMA;具有捕获功能的32KHz睡眠定时器;具有电视监视器和温度传感器;具有8路舒服和可配置分辨率的12位ADC;集成了AES安全协处理器;带有2个支持多种串行通信协议的强大USART,以及1个符合IEEE802.15.4规范的MAC定时器,1个16位定时器和1个8位定时器;强大和灵活的开发工具。

1.2.1、CC2530芯片引脚功能

CC2530芯片如图1所示,它采用6mm×6mm的QFN封装,共有40个引脚。

全部引脚可以分为I/O端口线引脚,电源线引脚和控制线引脚三类。

CC2530有21个可编程的I/O口引脚,P0、P1口是完全的8位口,P2口只有5个可使用的位。

通过软件设定一组SFR寄存器的位和字节,可使这些引脚作为通常的I/O口或作为连接ADC、计时器或USART部件的外围设备I/O口使用。

I/O口有下面的关键特性:

可设置为通常的I/O口,也可设置为外围的I/O使用;在输入时有上拉和下拉能力;全部21个I/O口引脚都具有响应外部中断源输入口。

如果需要外部中断,可对I/O口引脚产生中断,同时外部中断事件也能被用来唤醒休眠模式。

12~19脚(P0_7~P0_0):

具有4mA的输出驱动能力。

11,9脚(P1_0,P1_1):

具有20mA的驱动能力。

5~8,37~18脚(P1_7~P1_2):

具有4mA的输出驱动能力。

32~38脚(P2_4~P2_0):

具有4mA的输出驱动能力。

图一CC2530芯片

1.2.2电源引脚功能

AVDD1(28脚):

为模拟电路连接2.0V~3.6V的电压。

AVDD2(27脚):

为模拟电路连接2.0V~3.6V的电压。

AVDD3(24脚):

为模拟电路连接2.0V~3.6V的电压。

AVDD4(29脚):

为模拟电路连接2.0V~3.6V的电压。

AVDD5(21脚):

为模拟电路连接2.0V~3.6V的电压。

AVDD6(31脚):

为模拟电路连接2.0V~3.6V的电压。

DCOUPL(40脚):

提供1.8V的数字电源去耦电压,不使用外部电路供应。

DVDD1(39脚):

提供2.0V~3.6V的数字电源连接电压。

DVDD2(10脚):

提供2.0V~3.6V的数字电源连接电压。

1.2.3控制线引脚

RBIAS(30脚):

为参考电流提供精确的偏置电阻。

RESET_N(20脚):

复位引脚,低电平有效。

RF_N(26脚):

在RX期间向LNA输入负向射频信号。

RF_P(25脚):

在RX期间向LNA输入正向射频信号。

XOSC_Q1(22脚):

32MHz的晶振引脚1,或外部时钟输入引脚。

XOSC_Q2(23脚):

32MHz的晶振引脚2。

1.2.4增强型8051内核

CC2530集成了增强工业标准8051内核MCU核心。

该核心使用标准8051指令集。

每个指令周期中的一个时钟周期与标准8051每个指令周期中的12个时钟周期相对应,并且取消了无用的总线状态,因此其指令执行速度比标准8051快。

由于指令周期在可能的情况下包含了取指令操作所需的时间,故绝大多数单字节指令在一个时钟周期内完成。

除了速度改进之外,增强的8051内核也包含了下列增强的架构:

第二数据指针;扩展了18个中断源。

该8051内核的目标代码与工业标准8051微控制器目标代码兼容。

但是,由于与标准8051使用不同的指令定时,现有的带有定时循环的代码可能需要修改。

此外,由于外接设备单元比如定时器的串行端口不同于它们在其他的8051内核,包含有使用外接设备单元特殊功能寄存器SFR的指令代码将不能正常运行。

Flash预取默认是不使能的,提高了CPU高达33%的性能。

这是以功耗稍有增加为代价的,但是因为它更快,所以在大多数情况下提高了能源消耗。

可以在FCTL寄存器中使能Flash预取。

1.2.5复位

CC2530有5个复位源:

强置输入引脚RESET_N为低电平;上电复位;掉电复位;看门狗定时器复位;时钟丢失复位。

复位后的初始状况如下:

I/O引脚设置为输入、上拉状态(P1.0和P1.1为输入,但是没有上拉/下拉);CPU的程序计数器设置为0x0000,程序从这里开始运行;所有外部设备的寄存器初始化到它们的复位值(参考有关寄存器的描述);看门狗定时器禁止;时钟丢失检测禁止。

二CC2530RF模块以及信号信道分配模式

RF是CC2530的射频模块,无线信道的分配IEEE802.15.4规范的物理层定义了三个载波频段用于收发数据:

868~868.6MHz、902~928MHz和2400~2483.5MHz。

在这三个频段上发送数据使用的速率、信号处理过程以及调制方式等方面都存在着一定的差异,其中2400MHz频段的数据传输速率为250kbit/s,915MHz、868MHz分别为40kbit/s和20kbit/s。

IEEE802.15.4规范定义了27个物理信道,信道编号从0至26,每个具体的信道对应着一个中心频率,这27个物理信道覆盖了以上3个不同的频段。

不同的频段所对应的宽度不同,标准规定868MHz频段定义了1个信道(0号信道);915MHz频段定义了10个信道(1~10号信道);2400MHz频段定义了16个信道(11~26号信道)。

这些信道的中心频率定义如下:

F=868.3MHzk=0

F=906+2(k-1)MHzk=1,2,…,10

F=2405+5(k-11)MHzk=11,12,…,26

式中:

k为信道编号,F为信道对应的中心频率。

通常,ZigBee硬件设备不能同时兼容两个工作频段,在选择时,应符合当地无线电管理委员会的规定。

由于868~868.6MHz频段主要用于欧洲,902~928MHz频段用于北美,400~2483.5MHz频段可以用于全球,因此在中国所采用的都是2400MHz的工作频段。

三设计流程

3.1CC2530模块进行简单的点到点无线通信

3.2设计原理及说明

实验主要分为3大部分,第一部分为初始化与RF相关的信息;第二部分为发送数据和接收数据;最后为选择模块功能函数。

其中模块功能的选择是通过开发板上的按键来选择的,其中按键功能分配如下:

SW1---开始测试(进入功能选择菜单)

SW2---设置模块为接收功能(Light)

SW3---设置模块为发送功能(Switch)

SW4---发送模块发送命令按键

当发送模块按下SW4时,将发射一个控制命令,接收模块在接收到该命令后,将控制LDE1的亮或者灭。

其中LED6为工作指示灯,当工作不正常时,LED5将为亮状态。

3.3设计步骤

1、给智能主板供电(USB外接电源或2节干电池)。

2、将两个无线节点模块分别插入到两个带LCD的智能主板的相应位置。

3、将2.4G的天线安装在无线节点模块上。

4、将CC2530仿真器的一端通过USB线(A型转B型)连接到PC机,另一端通过10Pin下载线连接到智能主板的CC2530JTAG口(J203)。

5、将智能主板上电源开关拨至开位置。

按下仿真器上的按钮,仿真器上的指示灯为绿

色时,表示连接成功。

6、使用IAR7.51打开“…\OURS_CC2530LIB\lib11(simple_RF)\IAR_files”下的simple_RF.eww文件,下载程序。

7、关掉智能主板上电源,拔下仿真器,按4、5步骤对另一个模块下载程序。

8、打开两个模块的电源,当LED1处于亮时,按下SW1进入模块功能选择。

然后一个模块按下SW2设置为接收功能(Light),此时LED3将被点亮;另一个模块按下SW3设置为发

送功能(Switch),此时LED4将被点亮。

9、按下发送模块的SW4按键,接收模块的LED6将被点亮,再次按下SW4按键,

LED6

将被熄灭。

注:

如果需要重新设置模块的收发功能,按复位按键。

3.4程序流程图

3.5代码清单:

#include"hal_board.h"

#include"hal_int.h"

#include"hal_mcu.h"

#include"hal_rf.h"

#include"basic_rf.h"

#include"LCD.h"

#defineRF_CHANNEL25//2.4GHzRF使用信道25

#definePAN_ID0x2011//通信PANID

#defineSWITCH_ADDR0x2530//开关模块地址

#defineLIGHT_ADDR0xBEEF//灯模块地址

#defineAPP_PAYLOAD_LENGTH1//命令长度

#defineLIGHT_TOGGLE_CMD0//命令数据

//应用状态

#defineIDLE0

#defineSEND_CMD1

//应用角色

#defineNONE0

#defineSWITCH1

#defineLIGHT2

#defineAPP_MODES2

//按键

#defineHAL_BUTTON_11

#defineHAL_BUTTON_22

#defineHAL_BUTTON_33

#defineHAL_BUTTON_44

#defineHAL_BUTTON_55

#defineHAL_BUTTON_66

staticuint8pTxData[APP_PAYLOAD_LENGTH];//发送数据数组164

staticuint8pRxData[APP_PAYLOAD_LENGTH];//接收数据数组

staticbasicRfCfg_tbasicRfConfig;//RF初始化结构体

externvoidhalboardinit(void);//硬件初始化函数

externvoidctrPCA9554FLASHLED(uint8led);//IIC灯控制函数

externvoidctrPCA9554LED(uint8led,uint8operation);

externuint8halkeycmd(void);//获取按键值函数

#ifdefSECURITY_CCM//安全密钥

staticuint8key[]={

0xc0,0xc1,0xc2,0xc3,0xc4,0xc5,0xc6,0xc7,

0xc8,0xc9,0xca,0xcb,0xcc,0xcd,0xce,0xcf,

};

#endif

staticvoidappLight();//灯应用处理函数

staticvoidappSwitch();//开关应用处理函数

staticuint8appSelectMode(void);//选择应用功能函数

/*************************************/

函数名称:

appLight

*功能描述:

接收模式应用函数,初始化RF一些参数,接收另一个模块发送的控制命令,然后控制相应的LED灯

*参数:

*返回值:

/***************************************************/

staticvoidappLight()

{

basicRfConfig.myAddr=LIGHT_ADDR;//设置接收模块的地址

if(basicRfInit(&basicRfConfig)==FAILED)//RF初始化

{

ctrPCA9554FLASHLED(5);//RF初始化不成功,则所有的LED5闪烁

}

basicRfReceiveOn();//打开接收功能

//Mainloop

while(TRUE)

{

while(!

basicRfPacketIsReady());//准备接收数据

if(basicRfReceive(pRxData,APP_PAYLOAD_LENGTH,NULL)>0)//接收数据

{

if(pRxData[0]==LIGHT_TOGGLE_CMD)//判断命令是否正确

{

ctrPCA9554FLASHLED

(1);//关闭或打开LED1

}

}

}

}

*函数名称:

appSwitch

*功能描述:

发送模式应用函数,初始化发送模式RF,通过按下SW4向另一个模块发

送控制命令。

*参数:

*返回值:

staticvoidappSwitch()

{

pTxData[0]=LIGHT_TOGGLE_CMD;//向发送数据中写入命令

basicRfConfig.myAddr=SWITCH_ADDR;//设置发送模块的地址

if(basicRfInit(&basicRfConfig)==FAILED)//RF初始化

{

ctrPCA9554FLASHLED(5);//RF初始化不成功,则所有的LED5闪烁

}

basicRfReceiveOff();//关闭接收功能

//Mainloop

while(TRUE)

{

if(halkeycmd()==HAL_BUTTON_4)//判断是否按下SW4

{

basicRfSendPacket(LIGHT_ADDR,pTxData,APP_PAYLOAD_LENGTH);//发送数

halIntOff();//关闭全局中断

halIntOn();//打开中断

}

}

}

*函数名称:

appSelectMode

*功能描述:

通过SW2或SW3选择模块的应用模式。

*参数:

*返回值:

LIGHT--接收模式

*SWITCH--发送模式

*NONE--不正确模式

/*******************************************************************/

staticuint8appSelectMode(void)

{

uint8key;

GUI_ClearScreen();//LCD清屏

GUI_PutString5_7(25,6,"OURS-CC2530");//在LCD上显示相应的文字

GUI_PutString5_7(10,22,"DeviceMode:

");

GUI_PutString5_7(10,35,"SW2->Light");

GUI_PutString5_7(10,48,"SW3->Switch");

LCM_Refresh();

do

{

key=halkeycmd();

}while(key==HAL_BUTTON_1);//等待模式选择

if(key==HAL_BUTTON_2)//接收模式

{

GUI_ClearScreen();

GUI_PutString5_7(25,6,"OURS-CC2530");//在LCD上显示相应的文字

GUI_PutString5_7(10,22,"DeviceMode:

");

GUI_PutString5_7(10,35,"Light");

LCM_Refresh();

returnLIGHT;

}

if(key==HAL_BUTTON_3)//发送模式

{

GUI_ClearScreen();

GUI_PutString5_7(25,6,"OURS-CC2530");//在LCD上显示相应的文字

GUI_PutString5_7(10,22,"DeviceMode:

");

GUI_PutString5_7(10,35,"Switch");

GUI_PutString5_7(10,48,"SW4SendCommand");

LCM_Refresh();

returnSWITCH;

}

returnNONE;

}

/**************************************************************************************************/

*函数名称:

main

*功能描述:

通过不同的按键,设置模块的应用角色(接收模式或发送模式)。

通过SW4

发送控制命令

*参数:

*返回值:

/**************************************************************************************************/

voidmain(void)

{

uint8appMode=NONE;//应用职责(角色)初始化

basicRfConfig.panId=PAN_ID;//配置PANID2011

basicRfConfig.channel=RF_CHANNEL;//设置信道25

basicRfConfig.ackRequest=TRUE;//需要ACK请求

#ifdefSECURITY_CCM//编译未选选项

basicRfConfig.securityKey=key;//安全密钥

#endif

halboardinit();//初始化板的外围设备(包括LEDLCD和按键等)

if(halRfInit()==FAILED)//初始化RF

{

ctrPCA9554FLASHLED(5);//RF初始化不成功,则所有的LED5闪烁

}

ctrPCA9554FLASHLED(6);//点亮LED6,以指示设备正常运行

GUI_PutString5_7(10,22,"SimpleRFtest");//在LCD上显示相应的文字

GUI_PutString5_7(10,35,"SW1->Start");

LCM_Refresh();

while(halkeycmd()!

=HAL_BUTTON_1);//等待按键1按下,进入下一级菜单

halMcuWaitMs(350);//延时350MS

appMode=appSelectMode();//设置应用职责(角色)同时在

LCD上显示相应的设置信息

if(appMod

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 经管营销 > 经济市场

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2