实验报告
课程名称: 无线传感器网络原理与应用
实验一CC2530 LED灯闪烁实验
一、实验目的
熟悉鼎轩 WSN 实验平台使用的基本步骤,熟悉 IAR 开发环境,掌握 CC2530 芯片 LED 对应的 GPIO 引脚,并且熟练掌握 LED 的使用。
二、实验内容
1)安装 IAR 开发环境;
2)控制红灯、绿灯、蓝灯(蓝灯、黄灯、绿灯)交替闪烁。
三、实验环境
硬件:鼎轩 WSN 实验箱(汇聚网关、烧录线) ,PC 机;
软件:IAR 软件。
四、实验步骤
目前网关上有红、绿、蓝 3 个 LED 灯,还另有一个红色的 LED 工作指示灯,节点上有红、蓝、黄、绿 4 个 LED 灯,其中,红灯是工作指示灯,蓝灯和黄灯主要用于程序调试。 现在对 LED 灯的操作主要是点亮和关闭,下面是 CC2530 中 LED部分的原理图。LED 颜色, MCU 管脚,信号控制关系如下: 对于网关板:
对于节点板:
要想通过编程 P1,P2 引脚控制 LED 的亮灭,必须设置对应的引脚方向为输出,对应的暂存器为 P1DIR,P2DIR。
P2DIR :D0~D4 设置 P2_0 到 到 P2_4 的方向D7 、D6 位作为端口 0 外设优先级的控制
1)打开鼎轩 WSN 实验箱,检查实验箱设备,确保实验箱设备完整、连接无误后,连接电源线,打开电源开关;
2)安装好 IAR 开发环境以及驱动程序,详细方法见说明资料;
3)用烧录线连接汇聚网关上的烧录接口与 PC 机 USB 接口,连接方法可参考 相应的说明资料;
4) 双击打开目录(/cc2530-simple-demo/LED_BLINK)下的工程图标 AUTO.eww 打开工程;
5) 点击 IAR 中的图标按钮 编译程序;
6)完成编译后若没有错误信息,将实验箱节点编程开关上汇聚网关开关拨上 去,点击调试并下载按钮 将程序下载到汇聚网关上; 7) 运行程序,可以观察到红灯和绿灯交替闪烁。 8) 修改程序代码,实现红、蓝、绿三个灯一起闪烁。
程序代码:
程序代码源文件为/cc2530-simple-demo/LED_BLINK/main.c, #include #define uchar unsigned char //定义控制灯的端口 #define RLED P1_2 //定义红灯为 P1_2 口控制 #define GLED P1_3 //定义绿灯为 P1_3 口控制 //Local Functions void Delay(uint); //延时函数 void Initial(void); //初始化 P1 口 /**************************** //延时 *****************************/ void Delay(uint n) { uint tt; for(tt = 0;tt *****************************/ void Initial(void) { P1DIR |= 0x0C; //P1_2、P1_3 定义为输出 RLED = 0; GLED = 1; } /*************************** //主函数 ***************************/ void main(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)和一个休 眠定时器(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 灯 *********************************/ void Init_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 实验总结 该实验使同学们熟悉了继电器的工作方式与使用方法,为以后的综合实验打下了基础。 实验四: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,红灯灭。 实验总结 该实验完成串口的基本通讯。在串口通讯中一般有两种方式来接受数据,一种是查询法、一种是中断法。查询法就是要串口一致处于等待状态,看串口上是不是有数据,一旦数据接收完毕,就开始对接收的数据进行相应的操作。这个方法需要让程序一致等待串口,所以这种方法效率还是比较低的。中断法师运用串口的中断服务子程序来完成的,如果串口上有数据的话,那么会调用中断向量,中断向量把程序指针指到相应的中断服务服务程序上。在中断服务程序完成之后,程序只能还会跳转到中断之前的地址。这个方法的效率比较高,但是从稳定性上面讲,这种方法不如查询法。本实验用的是中断法。 实验五 CC2530 DMA 实验 一、实验目的 透过本实验的学习,使使用者熟悉 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) ) ,容量为 32KB XREG(映射位址:0x6000 ~ 0x63FF) ,容量为 1KB 可被映射到 XDATA存 储器空间的 SFR(映射位址:0x7080 ~ 0x70FF) ,容量为 128Byte 4. 目标位址 DMA 通道从该位址开始写入资料。该位址是 XDATA 存储器空间中的位址, 可以具体 映射到下面几种存储器或暂存器: SRAM 存储器(映射位址:0x0000 ~ SRAM_SIZE-1) ,容量为 8KB 可选的 FLASH存储器BANK (映射位址: XBANK (0x8000~ 0xFFFF) ) , 容量为32KB XREG(映射位址: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 为对应的触发事件号码就可以了,数据手册有详细的对照表。 实验六 CC2530 Flash读写实验 一、实验目的 掌握 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) ,其他配置如下图都不更改。打开串口,可以看到输出的结果,如下图: 7 ) 改变写入的地址,或是写入的数据,重新试验,深入理解程序中的读写函数。 程序代码 程序源文件路径为/cc2530-simple-demo/ DMA_Test/ Flash_DMA 实 验总结 对 Flash 进行写的时候, 一定要先对指定的地址进行擦除工作, 否则对 Flash写会写失败,本实验简单的演示了 Flash 的基本操作读和写,对于 Flash 而言,掌握这些就可以了,接下来的综合实验中存储路由表会用到 Flash 的读写。 实验七 CC 2530看门狗实验 一、实验目的 有些稳定性要求高的应用中, 需要使用看门狗 (Watchdog) 机制来重启系统。本实验主要介绍看门狗看门狗模式的使用方法及作用。 CC250 芯片中已集成看门狗硬件模块,无需插入扩展板。 二、实验内容 利用看门狗重启系统,实现 LED 的闪烁。 三、实验环境 硬件:鼎轩 WSN 实验箱(汇聚网关、烧录线) ,PC 机; 软件:IAR 软件。 四、实验步骤 1)打开鼎轩 WSN 实验箱,检查实验箱设备,确保实验箱设备完整、连接无误后,连接电源线,打开电源开关; 2)用烧录线连接汇聚网关上的烧录接口与电脑 USB 接口; 3)点击(\\CC2530_simple_demo\\cc2530-simple-demo\\WATCHDOG)目录下的工程图标 watchdog.eww 打开工程; 4)点击 IAR 中的图标按钮 编译程序; 5)完成编译后若没有错误信息,将实验箱节点编程开关上汇聚网关开关拨上去,点击调试并下载按钮 将程序下载到汇聚网关上; 6)调试运行程序,可以看到,红绿灯闪烁,这是看门狗重启系统的效果。 7)加入喂狗函数,查看实验现象,验证看门狗的看门狗模式的工作原理,学生还可以配置 WDCTL 使看门狗工作与定时器模式。 程序代码 程序源文件路径为/cc2530-simple-demo/ DMA_Test/ watchdog.c 实验总结 本实验验证了看门狗重启系统的效果,while 循环中, 注释掉的是喂狗函数,如果即时喂狗,系统便不会重启,小灯也就不会闪烁。 因篇幅问题不能全部显示,请点此查看更多更全内容