}
/****************************
//初始化程序
*****************************/
voidInitial(void)
{
P1DIR|=0x0C;//P1_2、P1_3定义为输出
RLED=0;
GLED=1;
}
/***************************
//主函数
***************************/
voidmain(void)
{
Initial();//调用初始化函数
while
(1)
{
GLED=!
GLED;
RLED=!
RLED;
Delay(50000);
}
}
P1DIR|=0x0C;该语句定义P1口的P1.2和P1.3方向为输出;
RLED=0;红灯初始化低电平,程序开始运行时熄灭;
GLED=1;绿灯初始化高电平,程序开始运行时点亮;
GLED=!
GLED;RLED=!
RLED;这两个语句让LED状态翻转,即若当前LED点亮,则将它熄灭,若当前LED熄灭,则将它点亮。
实验总结
该实验完成了对CC2530芯片的LED进行控制,实际上是对CC2530芯片的GPIO的控制。
掌握芯片LED控制之后,在复杂的程序中可以用LED作为一种很好的调试手段。
实验二:
CC2530定时器实验
一、实验目的
了解并学会使用CC2530芯片的定时器。
二、实验内容
用定时器1和定时器3采用中断方式实现定时,分别控制红绿灯的状态翻转。
定时器1自由运行模式,8分频;定时器3自由运行,128分频。
定时器1为16位定时器,在自由运行模式下,从0x0000到0xFFFF反复计数;定时器3为8位定时器,在自由运行模式下,从0x00到0xFF反复计数。
当到达计时值时,定时器会产生中断,中断函数就是处理相应定时器产生的中断。
三、实验环境
硬件:
鼎轩WSN实验箱(汇聚网关、烧录线),PC机;
软件:
IAR软件。
四、实验步骤
CC2530芯片包含四个定时器(Timer1、Timer2、Timer3、Timer4)和一个休
眠定时器(SleepTimer)。
Timer1是16位的定时器,支持典型的定时/计数功能以及PWM功能,该定时
器共有三个捕捉/比较通道,每个通道使用一个单独的I/O引脚。
Timer1的时钟频率是由系统时钟分频得到,首先由寄存器中的CLKON.TICKSPD分频,系统时钟是32MHz的情况下,CLKON.TICKSPD可以将该时钟频率分频到32MHz(TICKSPD为000)、16MHz(TICKSPD为001)、8MHz(TICKSPD为010)、4MHz(TICKSPD为011)、2MHz(TICKSPD为100)、1MHz(TICKSPD为101)、0.5MHz(TICKSPD为110)、0.25MHz(TICKSPD为111);分频后的时钟频率可以被T1CTL.DIV分频,分频数为1、8、32、128。
因此,在32MHz的系统频率下,Timer1的最小时钟频率为1953.125Hz,最大时钟频率为32MHz。
Timer2主要用于为802.15.4标准中的CSMA/CA算法提供定时。
该定时器即使在节点处于低功耗状态下仍然运行。
Timer3和Timer4是两个8位的定时器,主要用于提供定时/计数功能。
SleepTimer主要将节点从超低功耗工作状态唤醒。
本实验用到定时器1和定时器3,当定时器到达计数值时,产生一处中断,在中断处理函数里面进行相应处理。
与定时器1相关的控制寄存器有:
T1CTL(0xE4)–定时器1的控制和状态
T1STAT(0xAF)–定时器1状态
1)打开鼎轩WSN实验箱,检查实验箱设备,确保实验箱设备完整、连接无误后,连接电源线,打开电源开关;
2)用烧录线连接汇聚网关上的烧录接口与PC机USB接口;
3)双击打开目录(/cc2530-simple-demo/T1T3_interrupt)下的工程图标T1T3_interrupt.eww打开工程;
4)点击IAR中的图标按钮编译程序;
5)完成编译后若没有错误信息,将实验箱节点编程开关上汇聚网关开关拨上去,点击调试并下载按钮将程序下载到汇聚网关上;
6)实验现象为红绿灯的状态定时翻转。
7)修改实验代码,用定时器4实现红灯的状态定时翻转。
程序代码
程序员文件为/cc2530-simple-demo/T1T3_interrupt/T1T3_interrupt.c.
/********************************
初始化LED灯
*********************************/
voidInit_Led(void)
{
P1DIR|=0X0C;//P1_2,P1_3定义为输出
RLED=1;
GLED=1;//点亮红灯和绿灯
}
/********************************
初始化定时器1
*********************************/
voidInitT1()
{
T1CTL=0x05;//8分频,自由运行,从0x0000到0xFFFF反复//
计数
IEN1|=0X02;//开定时器1中断
}
/********************************
初始化定时器3
*********************************/
voidInitT3()
{
T3CTL=0xF8;//128分频,开溢出中断,启动定时器
IEN1|=0X08;//开定时器3中断
}
/*****************************************
******************主函数******************
******************************************/
voidmain(void)
{
Init_Led();//初始化LED灯
InitT1();//初始化定时器1
InitT3();//初始化定时器3
EA=1;//使能全局中断
}
/******************************
定时器1中断处理函数
*******************************/
#pragmavector=T1_VECTOR
__interruptvoidT1_IRQ(void)
{
EA=0;
if(T1STAT&0x20)//判断是否是定时器1产生的中断
{
if(++count>=50)
{
count=0;
RLED=!
RLED;//RLED闪烁
}
IRCON&=~0x02;//清中断标志
}
EA=1;
}
/******************************
定时器3中断处理函数
*******************************/
#pragmavector=T3_VECTOR
__interruptvoidT3_IRQ(void)
{
EA=0;
if(TIMIF&0x01)//判断是否是定时器3产生的中断
{
if(++count2>=1000)
{
count2=0;
GLED=!
GLED;//RLED闪烁
}
T3IF=0;//清中断标志
}
EA=1;
}
实验总结
该实验完成了对CC2530芯片的定时器的使用,通过LED来表现定时器的工作过程。
在这个实验中用的定时器的精度为毫秒。
在这个实验中只使用了定时器1和定时器3,我们可以在课后自己动手尝试使用其它的定时器。
实验三CC2530继电器实验
一、实验目的
掌握CC2530芯片GPIO引脚的控制方式,并且掌握继电器的工作方式。
二、实验内容
利用timer1定时产生中断,在中断处理中翻转P2.0口的状态,实验继电器状态的翻转。
三、实验环境
硬件:
鼎轩WSN实验箱(汇聚网关、继电器模块、烧录线),PC机;
软件:
IAR软件。
四、实验步骤
继电器(英文名称:
relay)是一种电控制器件,是当输入量(激励量)的
变化达到规定要求时,在电气输出电路中使被控量发生预定的阶跃变化的一种电器。
它具有控制系统(又称输入回路)和被控制系统(又称输出回路)之间的互动关系。
通常应用于自动化的控制电路中,它实际上是用小电流去控制大电流运作的一种“自动开关”。
故在电路中起着自动调节、安全保护、转换电路等作用。
继电器分很多类型,本实验使用的是信号继电器,针对我们的试验箱,继电
器与P2.0GPIO口相接,P2.0口的电平变化会是继电器“开关”发生变化。
实验步骤
1)打开鼎轩WSN实验箱,检查实验箱设备,确保实验箱设备完整、连接
无误后,连接电源线,打开电源开关;
2)用烧录线连接汇聚网关上的烧录接口与电脑USB接口;
3)打开(\CC2530_simple_demo\cc2530-simple-demo\Relay)下的工程图标
Relay.eww打开工程;
4)点击IAR中的图标按钮编译程序;
5)完成编译后若没有错误信息,将实验箱节点编程开关上汇聚网关开关拨
上去,点击调试并下载按钮将程序下载到汇聚网关上;
6)点击运行程序,可以看到继电器及上面的灯每隔5秒变换一次。
程序代码
程序源文件路径为/cc2530-simple-demo/Relay/Relay.c
实验总结
该实验使同学们熟悉了继电器的工作方式与使用方法,为以后的综合实验打下了基础。
实验四:
CC2530串口收发数据实验
一、实验目的
熟悉并掌握CC2530芯片串口发送和接收数据的操作,为今后的综合实验打下基础。
二、实验内容
使串口将接收的数据再发送。
三、实验环境
硬件:
鼎轩WSN实验箱(汇聚网关、烧录线、平行串口线),PC机;
软件:
IAR软件,串口助手。
四、实验步骤
1)打开鼎轩WSN实验箱,检查实验箱设备,确保实验箱设备完整、连接无
误后,连接电源线,打开电源开关;
2)用烧录线连接汇聚网关上的烧录接口与电脑USB接口;
3)双击打开目录(/cc2530-simple-demo/USART_send_receive)下的工程图标USART_SR.eww打开工程;
4)点击IAR中的图标按钮编译程序;
5)完成编译后若没有错误信息,将实验箱节点编程开关上汇聚网关开关拨上去,点击调试并下载按钮将程序下载到汇聚网关上;
6)用串口线连接汇聚网关上的数据输出口和PC机USB接口,打开串口助手,正确选择串口号(视具体电脑而定)、波特率(9600),其他配置如下图都不更改。
7)在串口助手上字符串输入框内,输入需要传输的内容,点击发送按钮,可
以看到字符串经串口传送给汇聚网关,然后又由串口打印输出,输出内容如下图:
8)修改实验代码,实现输入字符1,红灯亮,输入字符2,红灯灭。
实验总结
该实验完成串口的基本通讯。
在串口通讯中一般有两种方式来接受数据,一种是查询法、一种是中断法。
查询法就是要串口一致处于等待状态,看串口上是不是有数据,一旦数据接收完毕,就开始对接收的数据进行相应的操作。
这个方法需要让程序一致等待串口,所以这种方法效率还是比较低的。
中断法师运用串口的中断服务子程序来完成的,如果串口上有数据的话,那么会调用中断向量,中断向量把程序指针指到相应的中断服务服务程序上。
在中断服务程序完成之后,程序只能还会跳转到中断之前的地址。
这个方法的效率比较高,但是从稳定性上面讲,这种方法不如查询法。
本实验用的是中断法。
实验五CC2530DMA实验
一、实验目的
透过本实验的学习,使使用者熟悉CC2530芯片的DMA传输功能相关暂存
器的配置及其使用方法。
二、实验内容
用CC2530芯片内DMA控制器将一字符串从源位址转移到目标位址。
三、实验环境
硬件:
鼎轩WSN实验箱(汇聚网关、烧录线、平行串口线),PC机;
软件:
IAR软件,串口助手。
四、实验步骤
1.DMA简介
直接存取访问(DMA)控制器可以用来减轻8051CPU内核传送数据操作的负担,从而实现在高效利用电源的条件下的高性能。
只需要CPU极少的干预,DMA控制器就可以将数据从诸如ADC或RF收发器的外设单元传送到存储器。
DMA控制器协调所有的DMA传送,确保DMA请求和CPU存储器访问之间按照优先等级协调、合理地进行。
DMA控制器含有若干可编程的DMA通道,用来实现存储器-存储器的数据传送。
DMA控制器控制整个XDATA存储空间的数据传送。
由于大多数SFR寄存器映射到DMA存储器空间,这些灵活的DMA通道的操作能够以创新的方式减轻CPU的负担,例如,从存储器传送数据到USART,或定期在ADC和存储器之间传送数据样本,等等。
使用DMA还可以保持CPU在低功耗模式下与外设单元之间传送数据,不需要唤醒,这就降低了整个系统的功耗。
DMA控制器的主要功能如下:
(1)5个独立的DMA通道;
(2)3个可以配置的DMA通道优先级;
(3)32个可以配置的传送触发事件;
(4)源地址和目标地址的独立控制;
(5)单独传送、数据块传送和重复传送模式;
(6)支持传输数据的长域域,设置可变传输长度;
(7)既可以工作在字模式,又可以工作在字节模式。
2.DMA参数配置
DMA控制器的配置需要由使用者软件来完成。
在一个DMA通道可被使用之
前必须要配置一些参数。
DMA控制器的5个通道的行为都与下列配置参数有
关:
3.源地址
DMA通道从该位址开始读取资料。
该位址是XDATA存储器空间中的位址,可以具体映射到下面几种存储器或暂存器:
SRAM存储器(映射位址:
0x0000~SRAM_SIZE-1),容量为8KB可选的
FLASH存储器BANK(映射位址,:
XBANK(0x8000~0xFFFF)),容量为32KBXREG(映射位址:
0x6000~0x63FF),容量为1KB可被映射到XDATA存储器空间的SFR(映射位址:
0x7080~0x70FF),容量为128Byte
4.目标位址
DMA通道从该位址开始写入资料。
该位址是XDATA存储器空间中的位址,
可以具体映射到下面几种存储器或暂存器:
SRAM存储器(映射位址:
0x0000~SRAM_SIZE-1),容量为8KB可选的
FLASH存储器BANK(映射位址:
XBANK(0x8000~0xFFFF)),容量为32KBXREG(映射位址:
0x6000~0x63FF),容量为1KB,可被映射到XDATA存储器空间的SFR(映射位址:
0x7080~0x70FF),容量为128Byte。
5.字节传输或字传输
用于配置DMA通道所完成的传输是8位元(字节)还是16位元(字)。
6.M8
该参数用于配置采用7位元长还是8位元长的字节来传输资料。
此参数只适
用于字节传输。
7.源位址和目标位址增量
当DMA通道进入工作状态或重新进入工作状态时,源位址和目标位址被转送到内部位址指针。
该内部位址指标可以有下列4种增量:
增量为0:
每次传输之后该内部位址指标将保持不变。
增量为1:
每次传输之
后该内部位址指针将加1。
增量为2:
每次传输之后该内部位址指针将加2。
减量为1:
每次传输之后该内部位址指针将减1。
在位元组模式,1个计数等于1个位元组;在字模式下,1个计数等于2个位元组。
8.传输长度
DMA传输的字节数或字数。
当到达该值时,DMA控制器重新使DMA通道
进入工作状态或解除DMA通道的工作状态,并且可以产生中断请求。
可以看出,使用该参数后,每次DMA传输的字节数或字数就由该值决定,这
是一个固定长度。
如果需要每次DMA传输的字节数或字数是可变的,需要用到
下面介绍的配置参数。
9.可变长度((VLEN)
DMA通道可以利用源资料中的第一个位元组或字(对于字,使用[12:
0]位元)作为传输长度,这样就允许了可变长度传输。
有4种可选的可变长度传输模式(为了便于描述,我们假设传输长度参数的值为LEN,源资料中的第一个位元组/字所指示的传输长度为S):
10.传输模式
传输模式用于选择DMA通道传输资料的模式。
共有四种传送模式:
实验步骤
1)打开鼎轩WSN实验箱,检查实验箱设备,确保实验箱设备完整、连接
无误后,连接电源线,打开电源开关;
2)用烧录线连接汇聚网关上的烧录接口与电脑USB接口;
3)双击打开目录(/cc2530-simple-demo/DMA_Test)下的工程图标dmatest.eww
打开工程;
4)点击IAR中的图标按钮编译程序;
5)完成编译后若没有错误信息,将实验箱节点编程开关上汇聚网关开关拨
上去,点击调试并下载按钮将程序下载到汇聚网关上;
6)用串口线连接汇聚网关上的数据输出口和PC机USB接口,打开串口助
手,正确选择串口号(视具体电脑而定)、波特率(9600),其他配置如下图都不更改。
打开串口,可以看到输出的结果,如下图:
7)修改实验代码,使用串口接收事件作为触发源触发DMA传输。
程序代码
程序源文件路径为/cc2530-simple-demo/
DMA_Test/dmatest.c
实验总结
DMA传输可以自启动,也可以由触发源启动,若要触发源启动,只需设置
dmaConfig.TRIG
为对应的触发事件号码就可以了,数据手册有详细的对照表。
实验六CC2530Flash读写实验
一、实验目的
掌握CC2530芯片Flash的读写操作,同时为后面的综合实验做准备。
二、实验内容
使用DMA写Flash,将源缓冲区的数据使用DMA写到Flash的地址0x01000处,然后读取到目的缓冲区中,使用串口查看。
三、实验环境
硬件:
鼎轩WSN实验箱(汇聚网关、烧录线、平行串口线),PC机;
软件:
IAR软件,串口助手。
四、实验步骤
1)打开鼎轩WSN实验箱,检查实验箱设备,确保实验箱设备完整、连接
无误后,连接电源线,打开电源开关;
2)用烧录线连接汇聚网关上的烧录接口与电脑USB接口;
3)点击目录(\CC2530_simple_demo\cc2530-simple-demo\Flash_DMA_Write)
下的工程图标Flash_DMA_Write.eww打开工程;
4)点击IAR中的图标按钮编译程序;
5)完成编译后若没有错误信息,将实验箱节点编程开关上汇聚网关开关拨
上去,点击调试并下载按钮将程序下载到汇聚网关上;
6)用串口线连接汇聚网关上的数据输出口和PC机USB接口,打开串口助
手,正确选择串口号(视具体电脑而定)、波特率(9600),其他配置如