实验二:CC2530定时器实验
一、实验目的
了解并学会使用 CC2530 芯片的定时器。
二、实验内容
用定时器 1 和定时器 3 采用中断方式实现定时,分别控制红绿灯的状态翻转。
定时器 1 自由运行模式,8 分频;定时器 3 自由运行,128 分频。定时器 1 为16 位定时器,在自由运行模式下,从 0x0000 到 0xFFFF 反复计数;定时器 3 为 8位定时器,在自由运行模式下,从 0x00 到 0xFF 反复计数。当到达计时值时,定时器会产生中断,中断函数就是处理相应定时器产生的中断。
三、实验环境
硬件:鼎轩 WSN 实验箱(汇聚网关、烧录线) ,PC 机;
软件:IAR 软件。
四、实验步骤
CC2530 芯片包含四个定时器(Timer1、Timer2、Timer3、Timer4)和一个休
眠定时器(Sleep Timer) 。
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 位的定时器,主要用于提供定时/计数功能。 Sleep Timer 主要将节点从超低功耗工作状态唤醒。 本实验用到定时器 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
*********************************/ void InitT1() {
T1CTL = 0x05; //8 分频,自由运行,从 0x0000 到 0xFFFF 反复// 计数
IEN1 |= 0X02; //开定时器 1 中断 }
/******************************** 初始化定时器 3
*********************************/ void InitT3() {
T3CTL = 0xF8; //128 分频,开溢出中断,启动定时器 IEN1 |= 0X08; //开定时器 3 中断 }
/***************************************** ******************主函数****************** ******************************************/ void main(void) {
Init_Led(); //初始化 LED 灯 InitT1(); //初始化定时器 1 InitT3(); //初始化定时器 3 EA = 1; //使能全局中断 }
/****************************** 定时器 1 中断处理函数
*******************************/ #pragma vector=T1_VECTOR
__interrupt void T1_IRQ(void) {
EA = 0;
if(T1STAT & 0x20) //判断是否是定时器 1 产生的中断 {
if(++count >= 50) {
count = 0;
RLED = !RLED; //RLED 闪烁 }
IRCON &= ~0x02; //清中断标志 }
EA = 1; }
/****************************** 定时器 3 中断处理函数
*******************************/ #pragma vector=T3_VECTOR
__interrupt void T3_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