通信新技术报告无线传感器网络WSN_第1页
通信新技术报告无线传感器网络WSN_第2页
通信新技术报告无线传感器网络WSN_第3页
通信新技术报告无线传感器网络WSN_第4页
通信新技术报告无线传感器网络WSN_第5页
已阅读5页,还剩48页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、通信新技术综合训练报告 JIANGSU TEACHERS UNIVERSITY OF TECHNOLOGY 通信新技术综合训练报告学院名称: 电气信息工程学院 专 业: 通信工程 班 级: 06通信1W 姓 名: 赵灿杰 学 号: 06313129 指导老师: 贾中宁、陶为戈、宋伟 2009年12月目 录无线传感器网络实验前 言 Jennic-WSN 介绍2实验一 GPIO及LCD使用实验16实验二 简单点对点无线通信实验19实验三 两个EndDevice之间的无线通信实验24实验四 DIO中断实验28实验五 定时器实验32实验六 UART实验36实验七 ADC及数据采集实验41实验八 休眠和

2、掉电保护实验47心得体会50MSP430实验实验一 入门和I/O基础实验51实验二 键盘实验52实验三 MC39I实验56实验四 12864液晶实验59前 言 Jennic-WSN 介绍一、硬件平台1. JN5139-Z01-MXX 模块JN5139-Z01-MXX 模块是基于JN5139 芯片所开发的一系列表帖形式的模块产品,该系列模块集成了所有的射频组件和无线微控制器。这一系列的模块包含下列不同的型号(如图1-1 所示): JN5139-Z01-M00 内置陶瓷天线; JN5139-Z01-M01 带有SMA 天线连接接口; JN5139-Z01-M02 带有功率放大器和SMA 天线连接接

3、口; JN5139-Z01-M03 带有uFL 天线连接接口; JN5139-Z01-M04 带有功率放大器和uFL 天线连接接口。基于 JN5139 芯片所设计的最小系统如图1-2 所示。SPISSZ 与SPISSM 连接,SPISWP接高电平,JN5139 上电自动复位或按键复位,SPIMISO 为编程控制端,与复位按键配合使用,经DIO6、DIO7 实现程序BIN 文件的下载。关于编程下载具体使用可参考相关说明文档:JN-UG-3007-Flash-Programmer-1v12.pdf。JN5139 模块提供如下外围部件功能: 5 个主SPI 选择口; 2 个UART 串口; 2 个带

4、捕获/比较功能的可编程定时器/计数器; 2 个可编程睡眠定时器和1 个滴答定时器; 两线串口(兼容SMbus和I2C); 从SPI 接口(与数据I/O 共享); 21 个数据I/O 口(与UART 串口、定时器及SPI 选择复用); 4 通道12 位100kbps 模数转换输入; 2 个11 位数模转换输入; 2 个可编程模拟比较输入; 内部温度传感及电压监控。二、软件平台1. 建立开发环境在光盘中找到 software 文件夹下的JN-SW-4031-SDK-Toolchain-v1.1.exe 文件并运行。在安装过程中,最简单的方法是按默认设置安装。图 1-5 为安装时出现的第一个界面,选

5、择按钮Next,当图1-6 所示的界面出现后,默认选择Cygwin,同样点击Next 按钮。在下一个界面中(图1-7),选择需要将工具链安装的位置,可选择默认安装目录C:Jennic。如果需要,可以选择另一个驱动器,但必须保证目录是Jennic,例如:D:Jennic。然后点击Next 继续。当新的安装界面出现时,继续点击Next,直到安装完毕后,重新启动计算机。第53页,共53页接下来运行JN-SW-4030-SDK-Libraries-v1.5.exe安装程序,它包括了基于Jenie、ZigBee和IEEE 802.15.4协议的无线网络应用程序所用的SDK软件库。在安装过程中,最简单的方

6、法是按默认设置安装。当新的安装界面出现后,继续点击 Next 按钮,直到安装完毕。2. 新建一个工程在 Jennic SDK v1.1 环境下,能很好地支持JN51xx 模块,下面涉及到以JN5139 模块的实验都是在该版本下进行的。新建一个工程的步骤如下:打开 Code:Blocks 软件,单击Create a new project工具链或点击菜单项File->New->Project,出现图1-11所示的对话框。在该对话框中,有三种工程类型可供选择。选择Empty Project类型可创建一个空的工程;选择Jennic类型可创建一个Jennic无线传感器网络工程;选择Stat

7、ic Library类型可创建一个静态库文件。本课程有关Jennic的实验均选择Jennic类型。对于Jennic类型的工程,Code:Blocks自动生成相应的函数,用户可以利用各个API函数实现自己的应用。选择Jennic类型工程后单击Go按钮则出现图1-12所示对话框。在该对话框中填写工程名和工程所在路径。本实验以“ test ” 为工程名, 工程所在路径默认选择“JenniccygwinjennicSDKapplication”,然后,单击Next按钮进入下一步。选择编译器,这里选择默认值 JN51xx Compiler,如图1-13 所示,单击Next 按钮,选择Jennic 开发应

8、用类型,它们分别为802.15.4Aplication、ZigBee Coordinator、ZigBee End Device、ZigBee Router、Jenie End Device、Jenie Coordinator 和Jenie Router 等七种应用类型,如图1-14 所示。在本教程Jennic 实验中,我们主要使用ZigBee Coordinator、ZigBee End Device和ZigBee Router 三种类型的应用。这里选择ZigBee Coordinator,单击Next 按钮进入选择目标板类型。选择目标板类型时选择DK2,如图1-15 所示。单击Next按钮

9、,选择无线微控制器类型,本实验使用的微控制器类型为JN5139R1,所以选择JN5139XR1选项,如图1-16所示。单击Finish按钮,进入新建工程界面,如图1-17所示,JN51xx_JZ_Coord.c为自动生成的源程序文件,它包括了程序入口函数AppColdStart( ),初始化协议栈函数以及协议栈调用应用程序的一些函数的说明,用户可以根据自己的需求编写相应的函数,或添加其他的c源程序。用户也可以直接将JN51xx_JZ_Coord.c文件从工程中去掉,而在工程中添加用户自己编写的c源程序。三、编译和下载编写代码完成后,可按Ctrl+F9快捷键或选择主菜单Build下的Build子

10、菜单或点击图标建立可执行二进制代码文件。若工程编译(Build)成功,则可在C:JenniccygwinjennicSDKApplicationtestJN5139_BuildRelease 目录下生成test.bin 文件。否则,出错信息会显示在信息窗口中,根据出错信息调试程序。Jennic JN51xx Flash可编程器是用来将编译好的二进制代码文件(*.bin)下载到JN51xx模块中的Flash芯片的代码下载工具,它通过串行总线与JN51xx模块相连。Jennic JN51xx Flash可编程器的用户界面如图1-18所示,它可以将* .bin文件下载到目标板或模块中,下载步骤如下:

11、(1) 用串口线连接PC机和目标板或模块。(2) 运行Flash可编程器,选择PC机与目标板相连的串行通讯端口。(3) 将目标板上的J7跳线至编程(左侧)状态,给目标板上电,按一下RESET按钮后释放,再恢复J7跳线至右侧。(4) 在图1-18所示的Flash可编程界面上点击Browse按钮(图处)查找并选择要下载的目标文件。(5) 选择好目标文件后,点击Progrm按钮(图中处)开始下载。当下载完成后,将显示下载成功或错误,如果遇到错误,请尝试重新下载。(6) 成功下载后,关掉Flash可编程器再给目标板或模块上电、或按Reset按钮,则刚下载的代码自动运行。实验一 GPIO及LCD使用实验

12、一、实验内容 设计一个程序,实现 LED自动闪烁,周期 1 秒。二、实验原理1. GPIO 使用 Jennic 的模块具有 21 路通用的 GPIO,可以通过软件的方式进行设置,这些 GPIO口和其他的外围接口是共用的。其共用关系如表 2-1 所示: 表2-1:IO口和其他的外围接口共用关系 DIO引脚共用关系DIO0SPI从选择1 (输出)DIO1SPI从选择2 (输出)DIO2SPI从选择3 (输出)DIO3SPI从选择4 (输出)DIO4- DIO7UART0DIO8- DIO10Timer0DIO11- DIO13Timer1DIO14- DIO15Serial interfaceDI

13、O16IP data inDIO17- DIO20UART12. LED使用 LED 驱动库文件提供了 LED 的控制方法,在 LedControl.h 中宏定义了相应功能函数。开发板中的 LED驱动电路如图 2-1 所示:3. 按键使用 按键驱动库文件提供了按键的控制方法,在 Button.h 中宏定义了相应功能函数。开发板中的按键驱动电路如图 2-2 所示:三、软件设计1.流程图建网建网成功熄灭所有灯灯号加1,至0归3点亮相应灯号的led灯调用相应延时 NoYes2. 功能程序 PRIVATE void vAppTickLED(void *pvMsg, uint8 u8Param) vLe

14、dControl(0,FALSE); vLedControl(1,FALSE); vLedControl(2,FALSE); vLedControl(3,FALSE); LED+; if(LED=4) LED=0; bToggle=1; vLedControl(LED,bToggle); (void)bBosCreateTimer(vAppTickLED, &u8Msg, 0, (APP_TICK_PERIOD_ms/10), &u8TimerId);四、实验结果与分析编译程序,无误后进行下载,运行后即可观察到实验现象:Coordinator模块上的LED以1s为周期自动闪烁。

15、若出现这种现象,则说明实验正确。五、存在问题和解决方法做这个实验的时候,程序下载完毕后开始运行后,发现LED灯的闪烁状态不是以1S的周期进行闪烁的,后来经修改源程序中设置周期的部分,即恢复正常。实验二 简单点对点无线通信实验一、实验内容分别为Coordinator和EndDevice设计一个程序,分别用按键控制切换对方对应LED亮/灭状态。如Coordinator的SW3控制EndDevice的LED3,EndDevice的SW0控制Coordinator的LED0。二、实验原理1. 获得16位短地址的方法 Coordinator的16位短地址固定为0x0000,而EndDevice的16位短

16、地址是由Coordinator动态分配的。EndDevice可直接使用短地址0x0000与Coordinator通信,而Coordinator与EndDevice通信时,Coordinator必须使用EndDevice的短地址。在应用程序中,Coordinator获得EndDevice短地址的方法比较简单,每当有新的结点加入网络时,Coordinator协议栈会调用处理协议栈低层的回调函数 JZA_vStackEvent(teJZS_EventIdentifier eEventId, tuJZS_StackEvent *puStackEvent),参数puStackEvent是一个指向栈事件t

17、uJZS_StackEvent类型的指针,通过该参数即可获得新加入结点的16位短地址。下面的JZA_vStackEvent( )函数的代码中给出了获取16位短地址DstAddress的具体方法。 if (eEventId = JZS_EVENT_NEW_NODE_HAS_JOINED) DstAddress = puStackEvent->sNewNodeEvent.u16ShortAddr; 2. 数据格式 ZigBee2004支持KVP键值对和MSG消息帧两种类型数据格式。KVP是ZigBee2004协议中规定的一种特殊的数据传输机制,通过一种规定来标准化数据传输格式和内容,主要用于

18、传输较简单的变量值格式;MSG是ZigBee协议中规定的另一种数据传输机制,这种机制在数据传输格式和内容上并不做更多的规定,主要用于专用的数据流或文件数据等数据量较大的情况。由于在ZigBee2006及以后的版本中不再支持KVP格式的数据包,因此,在本实验中,仅使用MSG消息帧进行数据的传输。 在Jennic ZigBee应用程序中,通常使用协议栈提供的afdeDataRequest( )函数发送数据帧。当一个结点收到来自其他结点的MSG帧时,协议栈就会调用回调函数JZA_bAfMsgObject( ) 对接收的MSG帧进行处理。在数据收发过程中,发送和接收设备双方都需要知道事件的数据格式,才

19、能正确处理信息。 3. 创建和发送数据请求函数afdeDataRequest( ) 该函数属于AFDE(AF Sub-layer Data Entity) 类函数,用来向网络层发出数据发送的请求。 该函数的原型为: Stack_Status_e afdeDataRequest( APS_Addrmode_e eAddrMode, uint16 u16AddrDst, uint8 u8DstEP, uint8 u8SrcEP, uint16 u16ProfileId, uint8 u8ClusterId, AF_Frametype_e eFrameType, uint8 u8TransCount

20、, AF_Transaction_s *pauTransactions, APS_TxOptions_e u8txOptions, NWK_DiscoverRoute_e eDiscoverRoute, uint8 u8RadiusCounter); 各形参描述如下: eAddrMode:该参数定义了发送的目标地址模式,它是APS_Addrmode_e枚举类型的数据。 u16AddrDst:该参数是数据要发送的目标地址,地址范围为0x0000到0xFFFE。 u8DstEP:目标地址的端口号,范围是0x01到0xF0。 u8SrcEP:源地址的端口号,范围是0x01到0xF0。 u16Prof

21、ileid:所采用的 profile ID。 u8ClusterId:所采用的 cluster ID。 eFrameType:使用的数据帧类型0x01=KVP,0x02=MSG。 u8TransCount:本次请求发送的数据事务的数量。取值范围在0到0x0f。 pauTransactions:该参数是一个指向AF_Transaction_s结构体类型的指针,在该结构体类型的变量中,存放着需要发送的数据。bTxOptions:指定发送方式,可以选择下列的值,这些值可以进行逻辑或。 u8DiscoverRoute:设定所采用的路由发现模式。 u8RadiusCounter:数据发送的深度,即所发送

22、数据包的最大转发次数,如果设置为0,协议栈将采用2倍的MaxDepth发送深度。 4. 收到MsgObject调用的函数JZA_bAfMsgObject ( ) 该函数属于协议栈调用应用程序的函数,用来处理来自其他结点发送来的MSG帧。这个函数详细说明请参阅文档JN-RM-2014-ZigBeeAppDevAPI-1v8.pdf。 该函数的原型为: PUBLIC bool_t JZA_bAfMsgObject(APS_Addrmode_e eAddrMode, uint16 u16AddrSrc, uint8 u8SrcEP, uint8 u8LQI, uint8 u8DstEP, uint8

23、 u8ClusterID, uint8 *pu8ClusterIDRsp, AF_Transaction_s *puTransactionInd, AF_Transaction_s *puTransactionRsp) 各形参描述如下: eAddrMode:该参数定义了发送的目标地址模式,它是APS_Addrmode_e枚举类型的数据. u16AddrSrc:该参数是数据发送方的源短地址,地址范围为0x0000到0xFFFE。 u8SrcEP:源端口号,范围是0x01到0xF0。 u8LQI:接收帧的链路质量。 u8DstEP:目标端口号,范围是0x01到0xF0。 u8ClusterID:所

24、采用的cluster ID。 *pu8ClusterIDRsp:应答cluster ID指针。 *puTransactionInd:该参数是一个指向AF_Transaction_s结构体类型的指针,在该结构体类型的变量中,存放着接收的数据。 *puTransactionRsp:该参数是一个指向AF_Transaction_s结构体类型的指针,在该结构体类型的变量中,存放着response信息。 5. 简单设备描述函数afmeAddSimpleDesc( ) 该函数属于AFME(AF Sub-layer Management Entity) 类函数,在增加设备描述符函数vAddDesc(void

25、)中调用,其功能是为一个endpoint增加一个简单描述符(simple descriptor)。如果一个endpoint上没有正确定义的简单描述符,那么它将不能正确地接收来自其他结点的数据,通常简单描述符应该在设备建立网络成功或者加入网络成功后添加。 三、软件设计流程图建网建网成功Coordinator读键值Coordinator发送数据NoYes入网入网成功Enddevice读键值Enddevice发送数据Coordinator 接收数据Enddevice 接收数据控制相应灯的亮灭状态控制相应灯的亮灭状态NoYes四、实验结果与分析将Coordinator和EndDevice的电源、地线分

26、别相连,编译,下载,运行。1. 按动Coordinator的SW0、SW1、SW2、SW3,会发现它会对应控制着EndDevice的LED0、LED1、LED2、LED3的亮灭。2. 按动EndDevice的SW0、SW1、SW2、SW3,会发现它会对应控制着Coordinator的LED0、LED1、LED2、LED3的亮灭。五、存在问题和解决方法程序下载运行后发现:当按下Coordinator的SW1后,EndDevice的LED1不亮,也就是说Coordinator的按键不能控制EndDevice的对应LED亮灭状态。后来经反复修改完善程序后,终于实现了预期的功能,能互相控制对应的LED

27、的亮灭了。实验三 两个EndDevice之间的无线通信实验一、实验内容分别为Coordinator和EndDevice设计一个程序,其功能为:Coordinator负责建立网络和分配短地址及绑定的媒介。按动EndDevice按钮SW0,向Coordinator发送绑定请求信息,LED0闪烁10秒,Coordinator收到该信息后记录其短地址并定时10秒,按动另外一个EndDevice的按钮SW0向Coordinator发送绑定应答信息,LED0闪烁5秒,在有效定时时间10秒内若Coordinator收到该应答信号,则记录其短地址,分别将记录的两个短地址发送给两个对应EndDevice,两个E

28、ndDevice收到短地址后分别点亮LED0(不再闪烁),若在规定时间内没有建立绑定关系,超时后灭LED0。如果按下任何EndDevice的SW1则解除绑定,且LED1闪烁3秒。绑定状态下按动每个EndDevice的按钮SW2、SW3可分别切换对方对应LED亮/灭状态。二、实验原理1. 通过发送请求/应答绑定信息给Coordinator获得对方的16位短地址按动EndDevice或Router按钮,调用afdeDataRequest( )函数向Coordinator发送绑定请求信息,Coordinator收到该信息后记录其短地址并定时,按动另外一个结点的按钮使用afdeDataRequest(

29、 )函数向Coordinator发送绑定应答信息,在有效定时时间内若Coordinator收到该应答信号,则记录其短地址,分别将记录的两个段地址发送给两个对应结点,两个结点收到短地址后便可以相互直接通信。2通信过程中,Coordinator接受数据处理函数JZA_bAfMsgObjec() 首先通过此函数可以在广播通信中将对方的短地址提取出来,然后将短地址进行保存PUBLIC bool_t JZA_bAfMsgObject(APS_Addrmode_e eAddrMode, uint16 u16AddrSrc, /发送方的短地址uint8 u8SrcEP, uint8 u8LQI, uint8

30、 u8DstEP, uint8 u8ClusterID, uint8 *pu8ClusterIDRsp, AF_Transaction_s *puTransactionInd, AF_Transaction_s *puTransactionRsp) if(puTransactionInd->uFrame.sMsg.au8TransactionData0=2) (void)bBosCreateTimer(vAppLED, &u8Msg, 0, 0, &u8TimerId); u16DstAddr1=u16AddrSrc; RESPONSE=1; (void)bBosCrea

31、teTimer(vAppstop, &u8Msg, 0, 10000/10, &u8TimerId); 3.通信过程中,Coordinator事件处理函数JZA_vAppEventHandler(void)待两个EndDevice的短地址都保存好以后,通过此函数来将EndDeviceA的短地址发给EndDeviceB,将EndDeviceB的短地址发给EndDevice。void JZA_vAppEventHandler(void) if (!bNwkStarted) return; /判断是否有键按下 if(FLAG=2) u16DstAddr=u16DstAddr1; vS

32、endData(4,u16DstAddr2); u16DstAddr=u16DstAddr2; vSendData(4,u16DstAddr1); u16DstAddr=0x0000; FLAG=3;4通信过程中,EndDevice接受数据处理函数JZA_bAfMsgObjec()待两个终端绑定以后,可以根据此函数接收到的另一终端发送来的数据来控制本身LED灯的亮与灭。PUBLIC bool_t JZA_bAfMsgObject(APS_Addrmode_e eAddrMode, uint16 u16AddrSrc, /发送方的短地址uint8 u8SrcEP, uint8 u8LQI, ui

33、nt8 u8DstEP, uint8 u8ClusterID, uint8 *pu8ClusterIDRsp, AF_Transaction_s *puTransactionInd, AF_Transaction_s *puTransactionRsp) 三、软件设计四、实验结果与分析给Coordinator和EndDevice上电后, Coordinator负责建立网络和分配短地址,按动EndDevice按钮SW0,向Coordinator发送绑定请求信息,此时Coordinator通过JZA_bAfMsgObjec()函数将此EndDevice的短地址提取出来,并保存,并定时10秒,按动另

34、外一个EndDevice的按钮SW0向Coordinator发送绑定应答信息,LED0闪烁5秒,在有效定时时间10秒内若Coordinator收到该应答信号,则记录其短地址,分别将记录的两个短地址发送给两个对应EndDevice,两个EndDevice收到短地址后分别点亮LED0(不再闪烁),若在规定时间内没有建立绑定关系,超时后灭LED0。如果按下任何EndDevice的SW1则解除绑定,且LED1闪烁3秒。绑定状态下按动每个EndDevice的按钮SW2、SW3可分别切换对方对应LED亮/灭状态。五、存在问题和解决方法刚开始按下任何EndDevice的SW1后无法正常解除绑定,后来经过修改

35、程序和反复尝试后,终于恢复了正常,实验现象与题意相吻合。实验四 DIO中断实验一、实验内容分别为Coordinator和EndDevice设计一个程序,运用DIO中断的方式分别用按键控制切换对方对应LED亮/灭状态。如Coordinator的SW3控制EndDevice的LED3,EndDevice的SW0控制Coordinator的LED0等等。二、实验原理1. vAHI_DioSetDirection( )函数该函数用来设置DIO引脚的方向(输入或输出),其函数原型和使用方法参见讲义2。当某个DIO作为外部终端源时,则意味着该DIO引脚设置为输入。如果一个DIO引脚已安排给另一个外设且该外

36、设已启用,则该函数对该DIO引脚不产生影响。2. vAHI_DioInterruptEdge( )函数当某个DIO作为输入引脚时,则用该函数设置中断产生时是采用上升沿还是下降沿触发。该函数的原型如下: void vAHI_DIOInterruptEdge ( uint32 u32Rising, uint32 u32Falling ); 各参数的具体含义描述如下: u32Rising:32位位掩码,其位0至位20对应于每一个DIO引脚。当某一位为1时,则意味着该位对应的引脚在输入信号的上升沿触发中断。u32Rising的位21至位31无定义,可设置为1或0。 u32Falling:32位位掩码,

37、其位0至位20对应于每一个DIO引脚。当某一位为1,则意味着该位对应的引脚在输入信号的下降沿触发中断。u32Rising的位21至位31无定义,可设置为1或0。该函数仅将u32Rising中为1的位对应的引脚设置为上升沿触发中断,u32Falling中为1的位对应的引脚设置为下降沿触发中断,没有涉及到的引脚保持它原来的状态。如果某一个引脚在u32Rising和u32Falling中都进行了设置,则默认为上升沿触发。该函数仅对设置为输入的DIO引脚有效。如果一个DIO引脚已安排给另一个外设且该外设已启用,则该函数对该DIO引脚不产生影响。例如: vAHI_DioSetDirection(0x00

38、0000FF, 0x00000000); vAHI_DioInterruptEdge (0x0000000F, 0x00000077); 函数vAHI_DioSetDirection设置DIO0、DIO1、DIO7等8个引脚方向为输入,函数vAHI_DIOInterruptEdge设置DIO0、DIO1、DIO2和DIO3等4个引脚为上升沿触发中断,DIO4、DIO5和DIO6等3个引脚为下降沿触发中断,DIO7引脚保持原状态。3. vAHI_DioInterruptEnable( ) 函数当某个DIO作为输入引脚时,则该函数用来设置接收或屏蔽该引脚发来的中断,及使能/屏蔽中断。该函数的原型如

39、下: void vAHI_DIOInterruptEnable (uint32 u32Enable, uint32 u32Disable); 各参数的具体含义描述如下: u32Enable:32位位掩码,它的位0至位20对应于每一个DIO引脚。当某一位为1时,则使能该位对应的引脚发来的中断。u32Enable的位21至位31无定义。 u32Disable:32位位掩码,它的位0至位20对应于每一个DIO引脚。当某一位为1时,则屏蔽该位对应的引脚发来的中断。u32Disable的位21至位31无定义。该函数仅使能u32Enable中为1的位对应的引脚中断,屏蔽u32Disable中为1的位对应的

40、引脚中断,没有涉及到的引脚保持它原来的状态。如果某一个引脚在u32Enable和u32Disable中都进行了设置,则默认为屏蔽中断。该函数仅对设置为输入的DIO引脚有效。如果一个DIO引脚已安排给另一个外设且该外设已启用,则对该DIO引脚不产生影响。DIO引脚中断可用来唤醒处于睡眠模式的设备。例如: vAHI_DioSetDirection(0x000000FF, 0x00000000); vAHI_DioInterruptEdge (0x0000000F, 0x00000077); vAHI_DioInterruptEnable (0x00000007, 0x0000007C); 使能DI

41、O0和DIO1两个引脚的中断,上升沿触发中断,屏蔽DIO2、DIO3、DIO4、DIO5和DIO6等5个引脚。DIO7引脚为输入,其它引脚保持原状态。上面三个函数都是对硬件设备进行处理的函数,都属于802.15.4规范中的内容,其详细的说明请参阅JN-RM-2001-Integrated-Peripherals-API文档。4. JZA_vPeripheralEvent( )函数该函数在中断上下文时调用,即微处理器在执行中断处理程序的过程中调用,用于处理硬件中断。该函数的原型为: PUBLIC void JZA_vPeripheralEvent(uint32 u32Device, uint32

42、 u32ItemBitmap); 各参数的具体含义描述如下: u32Device:产生中断的外围设备ID号,在802.15.4规范中被定义为枚举值。u32ItemBitmap:与u32Device相对应的外围设备中断源的位映射图,在802.15.4规范中被定义为枚举值。5. vAHI_DioSetPullup ( )函数当某个DIO作为输入输出引脚时,则用该函数设置相应引脚是否上拉。该函数的原型如下:void vAHI_DioSetPullup(uint32 u32On, uint32 u32Off); 各参数的具体含义描述如下: u32On:32位位掩码,其位0至位20对应于每一个DIO引脚

43、。当某一位为1时,则意味着该位对应的引脚被上拉。u32On的位21至位31无定义,可设置为1或0。u32Off:32位位掩码,其位0至位20对应于每一个DIO引脚。当某一位为1时,则意味着该位对应的引脚关闭上拉。u32Off的位21至位31无定义,可设置为1或0。三、软件设计建网建网成功设置Coordinator的中断口,等待中断Coordinator发送数据NoYes入网入网成功设置Enddevice的中断口,等待中断Enddevice发送数据Coordinator 接收数据Enddevice 接收数据控制相应灯的亮灭状态控制相应灯的亮灭状态NoYes响应中断响应中断YesYesNoNo流程

44、图:四、实验结果与分析按Coordinator的SW0,EndDevice上的LED0亮,按EndDevice的SW0,Coordinator的LED亮。 按Coordinator上的SW1,EndDevice上的LED1亮,按动EndDevice上的SW1,Coordinator的LED亮;按Coordinator上的SW2,EndDevice上的LED2亮,按动EndDevice上的SW2,Coordinator的LED亮;按Coordinator上的SW3,EndDevice上的LED3亮,按动EndDevice上的SW3,Coordinator的LED亮;再次将按键依次按动,对方的灯依

45、次对应地灭掉,说明双方的按键能互相控制对方LED的亮灭。可见:实验现象符合题意,说明程序设计也是正确的。五、存在问题和解决方法DIO中断实验做的比较顺畅,未出现意外状况。实验五 定时器实验一、实验内容设计一个程序,初始化DIO16(LED0)为输入,运用Timer0 PWM输出控制LED0的亮灭状态,一个周期内亮2秒,灭1秒。二、实验原理1. vAHI_TimerEnable ( )函数 该函数用来使能指定的定时器,并为该定时器设置参数。该函数的原型如下: void vAHI_TimerEnable ( uint8 u8Timer, uint8 u8Prescale, bool_t bIntR

46、iseEnable, bool_t bIntPeriodEnable, bool_t bOutputEnable); 各参数的具体含义描述如下: u8Timer:定时器的标识,在JN5121/JN513x微控制器中有两个应用级定时器/计数器,用E_AHI_TIMER_0和E_AHI_TIMER_1分别标识Time0和Timer1。 u8Prescale:时钟的预分频值,它的最大值为16。分频后的频率为原频率的1/2u8Prescale。 bIntRiseEnable:该参数值为TRUE时,当定时器的输出变为高电平时使能中断。 bIntPeriodEnable:该参数值为TRUE时,当定时器的一

47、个周期到且输出变为低电平时,使能中断。 bOutputEnable:该参数值为TRUE时,使定时器的输出出现在与PWM相关的输出引脚上。 Timer0 使用DIO8-10引脚,Timer1使用DIO11-13引脚。 2. vAHI_TimerClockSelect ( )函数 选择内部或外部时钟,当使用内部时钟时要设置输出门。该函数的原型如下: void vAHI_TimerClockSelect( uint8 u8Timer, bool_t bExternalClock, bool_t bGateControl); 各参数的具体含义描述如下: u8Timer:定时器的标识,与函数vAHI_T

48、imerEnable()中的用法相同,用E_AHI_TIMER_0和E_AHI_TIMER_1分别标识Time0和Timer1。 bExternalClock:该参数值为TRUE,表示使用外部时钟;为FALSE,表示使用16MHz的内部时钟。 bGateControl:该参数值为TRUE时,表示当定时器的门输入是高电平时,打开输出引脚;为FALSE时,表示当定时器的门输入为低电平时,打开输出引脚。 3. vAHI_TimerStartRepeat ( )函数 设置重复定时器。该函数的原型如下: void vAHI_TimerStartRepeat( uint8 u8Timer, uint16

49、u16Hi, uint16 u16Lo); 各参数的具体含义描述如下: u8Timer:定时器的标识,用E_AHI_TIMER_0和E_AHI_TIMER_1分别标识Time0和Timer1。 u16Hi:该参数值表示在开始一个定时器之后,在定时器的输出变为高电平之前经历的时钟周期数。 u16Lo:该参数值表示在开始一个定时器之后,在定时器的输出变为低电平之前经历的时钟周期数。即定时器有效时间内的时钟周期数。 启动定时器后,当经历u16Hi个时钟周期后,定时器的输出由低电平变为高电平,再经历u16Lo- u16Hi个时钟周期后,定时器的输出由高电平变为低电平,重新启动定时器。这个过程重复执行,

50、直到执行vAHI_TimerStop( )函数停止定时器为止。如果定时器的中断使能,可设置当定时器的输出由低电平变为高电平时触发中断,也可设置当定时器的输出电平由高变低时触发中断。 4. 停止定时 对于设置了重复定时器,当需要停止定时时,则需要执行vAHI_TimerStop( )函数停止定时器,其函数原型如下: void vAHI_TimerStop (uint8 u8Timer); 参数u8Timer为定时器的标识,用E_AHI_TIMER_0和E_AHI_TIMER_1分别标识Time0和Timer1。 5. 定时时间计算 以内部时钟为例计算定时时间为:LouMHzescaleu1621

51、61Pr8××,例如当设置Timer0为: vAHI_TimerEnable(E_AHI_TIMER_0, 10, FALSE, TRUE, FALSE); vAHI_TimerClockSelect(E_AHI_TIMER_0, FALSE, TRUE); vAHI_TimerStartRepeat(E_AHI_TIMER_0, 8000, 15625); 则定时器时间为: 1/16MHz×2u8Prescale×u16Lo = 1/16×210×15625 = 1s 6. 定时器的设置 在程序中用E_AHI_TIMER_0和E_A

52、HI_TIMER_1分别标识Time0和Timer1。在使用定时器之前需要对定时器进行设置,主要使用三个函数:第一个函数vAHI_TimerEnable ( ),用来使能指定的定时器,并为该定时器设置参数;第二个函数是vAHI_TimerClockSelect ( ),用来选择内部或外部时钟,当使用内部时钟时还要设置输出门;第三个函数是vAHI_TimerStartRepeat ( ),设置重复定时时间。例如对定时器初始化的程序段如下: vAHI_TimerEnable(E_AHI_TIMER_1, 10, FALSE, TRUE, FALSE); vAHI_TimerClockSelect(

53、E_AHI_TIMER_1, FALSE, TRUE); vAHI_TimerStartRepeat(E_AHI_TIMER_1, 8000, 16000); 7. 定时中断响应处理 JZA_vPeripheralEvent( )函数在Jennic ZigBee协议栈处理硬件中断时调用,定时器中断也属于外部中断,因此在该函数中加入定时器中断处理程序,例如当有Timer1中断时,如果EndDevice已加入网络,则发送一个数据包给Coordinator,其程序代码如下: PUBLIC void JZA_vPeripheralEvent(uint32 u32Device, uint32 u32It

54、emBitmap) if (u32Device = E_AHI_DEVICE_TIMER1) if (bNwkJoined) vSendData(2); 其中u32Device指产生中断的设备ID号,E_AHI_DEVICE_TIMER1是指定时器Tiner1的ID号,这段程序的意思是:若中断来自于Timer1并且EndDevice已加入网络的情况下给Coordinator发送数据包。 三、软件设计YesNoNoYes转换成低电平,清零计数器Yes开始网络启动?打开定时器No计数转换成高电平满31250次?满46875次?功能程序void JZA_vAppEventHandler(void) if (!bNwkStarted) return; if (NextReadStart) NextReadStart = FALSE; vAHI_TimerEnable(E_AHI_TIMER_0, 10, FALSE, TRUE, TRUE); vAHI_TimerC

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论