您好,欢迎访问三七文档
当前位置:首页 > 行业资料 > 国内外标准规范 > ZigBee学习电子笔记
第一讲第二讲1.cc2530通用I/O口有21个:P0/P1/口个8个;P2口5个,其中,P1_0、P_1有20mA的驱动能力,其余只有4mA2.IO口配置相关的寄存器(3个)PxSEL:P0SEL、P1SEL、P2SEL,每个寄存器是1byte,分别用来设定3个口的工作模式。IO的两种工作模式:1.普通IO口模式:点灯、监测按键输入2.片上外设模式:作为串口或者其他非普通IO口PxDIR:P0DIR/P1DIR/P2DIR,每个寄存器占一个字节,用来设定IO口作为输入还是输出PxINP:P0INP/P1INP/P2INP:输入情况下,注意P2INP寄存器后3位的用法(见下图):输出示例(以P0_0为例):1)设置P0_0为普通IO口工作模式,非片上外设:P0SEL=0xFE(&11111110)2)让P0_0作为输出用,非输入监测用:P0DIR=0x01(+00000001)3)输出(如P0_0=0或P0_0=1等)。输入示例(让P1_2作为输入):1)设置P1_2为普通IO口工作模式,非片上外设:P1SEL=0xfd(11111011)2)让P1_2作为输入检测用,非输出用P1DIR=0xfd(11111011)3)选择上拉、下拉或三态中的一种输入(因为上电的时候寄存器默认为0,所以IO口都默认工作在普通IO口输入、上下拉模式)4)检测用:If(P1_2==0or1){}Else{}总结:由此可见,当芯片上电初始化后,3组IO口默认工作在普通IO口下的输入监测、上拉输入模式。自己编程示例:第三讲:外部中断检测中断有3级开关:CPU中断总开关------IO口组中断开关---------IO组内某口中断开关中断信号触发类型选择:上升、下降因此,某IO口产生中断需配置:1)CPU中断开关打开;EA=1;2)该口所在的IO组中断打开;P0组的中断开关在IEN1的第5位;P1组的中断开关在IEN2的第4位;P2组的中断开关在IEN2的第1位;3)该口中断打开;P0IEN;8位寄存器。例如要把P0_2脚的中断开关打开,就要把该寄存器的第2位在程序中置1P1IENP2IEN4)配置中断信号的触发方式PICTL寄存器(8位)中断函数:编程示例:#pragmavector=P0INT_VECTOR__Interruptvoidzd(){…...P0IFG=0;//为避免死循环需要先清零,该寄存器有8位,分别为P0组8个脚的标志位,若某个脚产生中断,则该位置1,故出中断函数时要清零。P0IF=0;//CPU中断标志清零}第四讲:时钟的切换和控制串口时钟:cc2530片内有4个时钟源,芯片工作时必须使用一高一低频进行搭配,使用两个寄存器进行对其配置以及当前状态标志。配置时钟源:CLKCONCMD命令寄存器:8位寄存器D6位用于高频时钟的选择;D7位用于低频时钟的选择;0表示外部,1表示内部?(视频里)芯片进行无线通信时必须将时钟切换到32MHz的石英晶振上CLKCONSTA除了时钟状态标志外还有时钟分频功能参考代码如下:串口串口0有两组备用位置:备用位置1为P0_2和P0_3;备用位置2为P1_4和P1_5。到底选择哪组由PERCFG寄存器的第0位配置,0表示备用1,1表示备用2.串口编程示例(部分):第五讲:DIY无线通信模块射频通信注意:1)数据不能直接被发送出去,必须调制到高频载波上发送以提高通信效率,接收设备再解调恢复原始数据。IEEE802.15.4ISM信道:2.4GHz频段/915GHz频段/896GHz频段实验中ZigBee大约工作在2.4GHz频段(16个信道)2)什么是信道?2405M11号信道2410M12号信道2415M13号信道…..2480M26号信道信道一致的两个收发模块才能进行收发!3)网络地址(网络短地址)、PANID(个域网ID)网络短地址:类似于计算机以太网的局域网,每台计算机都有唯一的一个IP地址。在ZigBee网络中,每一个通信模块都有一个通信地址,即网络短地址;网络短地址为2个字节。PANID:为了区分不同的ZigBee网络为每个ZigBee网络标示的ID,2个字节。4)每一个CC2530芯片上都有一块RAM存放发送和接收数据,缓冲区。都是128byte。模块通信编程示例(以视频中板子为例)下图是主程序(主函数):#defineSHORT_ADDR0XREG(0x6174)#defineSHORT_ADDR1XREG(0x6175)//宏映射到CC2530的RAM上,操作宏就是操作对应地址上的RAM。发送模块的主函数里做了哪些工作:1)板子上需要用到的资源初始化;2)设置本模块的网络短地址;3)等待按钮中断。4)发生按钮中断时,在按钮中断里调用voidRFSend(char*pstr,charlen);函数把数据发送出去射频发送函数的定义如下:注意:RFST是数据发送寄存器射频接收函数定义如下:以上为数据发送做准备使用循环将数据压入发送缓冲区发送命令寄存器数码管配置程序:读第一个字节判断这一串数据后面字节数再通过串口发出去便于调试如果倒数第三个字符为宏定义的7引脚取反点灯板子上其他硬件资源配置程序(均已模块化):实验中,使用key3按键控制另一模块的LED灯,该按键的中断程序如下图:其中涉及到该板子系统自定义的宏(如ON_LED0),参考如下:发送数据,发送内容可见其定义总结:ZigBee既需要软件上(协议栈)的支持,也需要硬件上支持协议就是基于某硬件上数据进行传输的格式第六讲:协议栈之操作系统抽象层OSAL1、操作系统是什么?能干什么事?为什么要在Zigbee里面引入操作系统他和Zigbee是什么关系?Main(){While(){A;B;//新加入B段代码后会对A段代码产生影响。Delay();//浪费CPU的资源。及时使用定时器也会使得代码繁琐}}//为了提高代码执行效率、便于管理代码、提高软硬件资源的利用率、提高整个程序效率,便引入了操作系统。协议栈就是按照一定格式对数据进行打包、拆包以及一些其他功能的程序。协议栈里面有一个类似操作系统的东西(OSAL)传统程序:Main(){While(){A;//采集数据B;//处理数据C;//报警、打印}}引入操作系统后:A;//采集数据-------模块化一个任务(功能、函数)1(ID)B;//处理数据C;//报警、打印任务的定义:在操作系统中实现某种功能的一块代码任务由一个全局变量来标识ID:任务IDchar任务通信:使用全局变量来标记任务执行状态、交流信息如Chara=0来标记任务1正在执行,当为0时,主程序检测到该任务已完成,采取其他操作。Main(){osal_init_system()//初始化每一个任务osal_start_system()}每一个任务:1)其内容由其自己的功能代码定义,代码在任务(处理)函数里,每个函数名是一个16位的地址,2)有自己的任务ID号3)每个任务都有一个用来通信的全局变量,为2个字节,存于16位的数组中,即16位变量tasksEvents[任务ID],如:tasksEvents[0]tasksEvents[1]操作系统初始化函数osal_start_system()进入之后,是一个死循环:不管得检查每一个任务的通信变量是否为零如果为0,则反复检查,如果不为零,则通过该变量的下标找到其任务ID号码,在通过该ID号从tasksAst找到相应的任务函数进行处理这就是OSAL的运作原理。事件:按钮按下以后产生中断,中断把某个任务通信的16位变量的某一位置1(还有其他一些操作)消息:向某一个任务发送消息就是把任务通信的16位变量的某一位置1,通信变量里面不同的位代表不同的消息调度:调度某一个任务就是运行某一个任务协议栈置操作系统抽象层按钮实验代码跟踪找到按键中断函数,half_key.c文件,里面的中断代码执行(通信变量置位等)完后发消息给主函数,检测到后进入处理函数。怎么配置按钮中断、小灯:OnBoard.c一些全局的函数和变量配置在half_key.c配置一些寄存器和宏(注释:Ctrl+K,取消shift+Ctrl+K)OSAL实际发消息机制1)按钮按下进入half_key.c2)操作系统的函数:即(hal_drivers.c)OSAL是TI公司开发的一个类似OS的调度软件,并不是真正的OS第七讲:协议栈之组网通信在无线传感器网络里,按照其网络功能将ZigBee模块分为协调器、路由器、终端这三者在网络中的不同点:1)协调器是WSN的发起者,创建网络,路由器和终端加入该网络2)网络地址,加入到协调器所创建的网络里的节点(协调器、路由器、终端)都会获得一个在该网络里唯一的16位地址(2byte),即网络地址(网络短地向哪个任务发送消息发送消息是哪一种事件延迟发送的时间址),并且,协调器的网络地址永远是0x0000,其余节点的网络短地址是不确定的3)除了协调器之外,其他节点如要加入网络,需要待加入节点的父节点介绍引入,注意:终端节点是不能充当父节点的,其他均可个域网ID(PANID):区分不同ZigBee网络的网络标识ID4)端点:每个加入到ZigBee网络里的无线模块均是一个节点,每个节点里逻辑上存在若干个端点,模块间的收发消息均需指定一个端点进行,因此节点间通信的本质是端点间的通信,端点中有若干簇,端点号可以不同,但是簇号要一致。ZigBee网络广播通信配置流程:协调器1)接收部分首先定义一个节点,定义一个端点描述符(结构体)簇(数组)ID16位填写端点描述符然后进行注册,注册完成后(端点和任务绑定),端点便可以接收消息了,外部从指定端点发来的数据都会引发对应用户任务的一个消息事件,然后调用任务处理函数,把数据取出来。在接受处理函数里通过簇来区分2)发送部分首先定义一个节点,定义一个端点描述符(结构体)簇(数组)ID16位填写端点描述符然后进行注册,注册完成后(端点和任务绑定),端点便可以发送消息了。因为发送的时候确定目标(宿主),所以必须要获取目标的信息,故发送方必须指定接收方的信息,如地址模式(宏),接收方接收端点设计一个系统函数:OSAL发数据的函数:第八讲:
本文标题:ZigBee学习电子笔记
链接地址:https://www.777doc.com/doc-2830011 .html