ZigBee基础实验(八)--定时器一

发布者:polkmm最新更新时间:2019-04-09 来源: eefocus关键字:ZigBee  定时器一  睡眠模式 手机看文章 扫描二维码
随时随地手机看文章

1、概述

  睡眠定时器用于设置系统进入和退出低功耗睡眠模式之间的周期。睡眠定时器还用于当进入低功耗睡眠模式时,维持定时器2 的定时。

  睡眠定时器的主要功能如下:

● 24 位的定时器正计数器,运行在32kHz 的时钟频率
● 24 位的比较器,具有中断和DMA 触发功能
● 24 位捕获

  睡眠定时器是一个24 位的定时器,运行在一个32kHz 的时钟频率(可以是RCOSC 或XOSC)上。定时器在复位之后立即启动,如果没有中断就继续运行。定时器的当前值可以从SFR 寄存器ST2:ST1:ST0 中读取。

 

2、定时器比较

  一次定时器比较发生在定时器的值等于24位比较器的值,寄存器ST2:ST1:ST0可以用来设置比较器的值。 当STLOAD.LDRDY=1写入ST0发起加载新的比较值。当STLOAD.LDRDY=0软件不能开始一个新的加载,直到它为1。 

  Reading ST0 captures(捕获) the current value of the 24-bit counter. Thus, the ST0 register must be read before ST1 and ST2 to capture a correct Sleep Timer count value.

  When a timer compare occurs the interrupt flag STIF is asserted.

  The current timer value is updated each time a positive clock edge on the 32 kHz clock is detected by the system clock. Thus, when returning from PM1/2/3 (where the system clock is shut down) the Sleep Timer value in ST2:ST1:ST0 is not up-to-date if a positive edge on the 32 kHz clock has not been detected yet. To ensure an updated value is read, wait for a positive transition on the 32 kHz clock by polling(轮询) the SLEEPSTA.CLK32K bit, before reading the Sleep Timer value.

  The interrupt enable bit for the ST interrupt is IEN0.STIE, and the interrupt flag is IRCON.STIF.

  当运行在除了PM3之外的所有供电模式,睡眠定时器才会运行。因此,睡眠定时器的值在PM3模式下不保存。在PM1和PM2模式下,睡眠定时器捕获事件用来唤醒设备到active模式进行active操作。The default value of the compare value after reset is 0xFF FFFF。

  The Sleep Timer compare can also be used as a DMA trigger, here I don't want to talk about.

  Note that: if supply voltage drops below 2 V while in PM2, 睡眠间隔 might be affected.

 

3、定时器捕获 

  当设置了已选I/O 引脚的中断标志,且32 kHz 时钟检测到这一事件时,发生定时器捕获。 Sleep Timer capture is enabled by setting STCC.PORT[1:0] and STCC.PIN[2:0] to the I/O pin that is to be used to trigger the capture. When STCS.VALID goes high, the capture value in STCV2:STCV1:STCV0 can be read.

  捕获值多于在I/O 引脚上的事件瞬间的值,因此如果时序需要,软件必须从捕获的值中间减去一个。要使能一个新的捕获,遵循以下步骤:

1. 清除STCS.VALID。
2. 等待直到SLEEPSTA.CLK32K 变为低电平。
3. 等待直到SLEEPSTA.CLK32K 变为高电平。
4. 清除P0IFG/P1IFG/P2IFG 寄存器中的引脚中断标志。

  This sequence, using rising edge on P0.0 as an example, is shown in following:

 

  It is not possible to switch input capture pin while capture is enabled. Capture must be disabled before a new input capture pin can be selected. To disable capture follow these steps (if disabling interrupts for up to half a 32 kHz cycle (~15.26 ms) is OK):

1. Disable interrupts
2. Wait until SLEEPSTA.CLK32K is high.
3. Set STCC.PORT[1:0] to 3. This disables capture.

 

4、睡眠定时器寄存器

  睡眠定时器使用的寄存器是:

• ST2 – 睡眠定时器2
• ST1 – 睡眠定时器1
• ST0 – 睡眠定时器0
· STLOAD – 睡眠定时器加载状态
· STCC – 睡眠定时器捕获控制
· STCS – 睡眠定时器捕获状态
· STCV0 – 睡眠定时器捕获值字节0
· STCV1 – 睡眠定时器捕获值字节1
· STCV2 – 睡眠定时器捕获值字节2

 

5、DEMO PROJECT——系统睡眠中断唤醒

  Zigbee的特点是远距离低功耗的无线传输设备,节点模块闲时可以进入睡眠模式,在需要传输数据时候进行唤醒,能进一步节省电量。

    系统电源有以下几种管理模式:

  • * 全功能模式:高频晶振(16M或者32M)和低频晶振(32.768K RCOSC/XOSC)全部工作,数字处理器模块正常工作; 
    * PM1:高频晶振关闭,低频晶振正常工作,数字核心模块正常工作; 
    * PM2:低频晶振工作,数字核心模块关闭,系统通过RESET,外部中断或者睡眠计数器溢出唤醒; 
    * PM3:晶振全部关闭,数字处理器核心模块关闭,系统只能通过RESET或者外部中断唤醒,此模式功耗最低;

  本工程实现的功能是:将睡眠模式下的CC2530通过安检中断唤醒,观察LED闪烁现象。

代码:

  1 /****************************************************************************

  2 * 文 件 名: main.c

  3 * 描    述: LED1闪烁3次后进入睡眠状态,通过按下按键S1产生外部中断进行唤醒

  4 ****************************************************************************/

  5 #include

  6 

  7 typedef unsigned char uchar;

  8 typedef unsigned int  uint;

  9 

 10 #define LED1 P1_0            //P1.0口控制LED1

 11 #define KEY1 P0_1            //P0.1口控制S1

 12 

 13 

 14 /****************************************************************************

 15 * 名    称: DelayMS()

 16 * 功    能: 以毫秒为单位延时 16M时约为535,系统时钟不修改默认为16M

 17 * 入口参数: msec 延时参数,值越大,延时越久

 18 * 出口参数: 无

 19 ****************************************************************************/

 20 void DelayMS(uint msec)

 21 { 

 22     uint i,j;

 23     

 24     for (i=0; i

 25         for (j=0; j<535; j++);

 26 }

 27 

 28 /****************************************************************************

 29 * 名    称: InitLed()

 30 * 功    能: 设置LED灯相应的IO口

 31 * 入口参数: 无

 32 * 出口参数: 无

 33 ****************************************************************************/

 34 void InitLed(void)

 35 {

 36     P1DIR |= 0x01;           //P1.0定义为输出口

 37     LED1 = 1;                //LED1灯上电默认为熄灭 

 38 }

 39 

 40 /****************************************************************************

 41 * 名    称: InitKey()

 42 * 功    能: 设置KEY相应的IO口,采用中断方式 

 43 * 入口参数: 无

 44 * 出口参数: 无

 45 ****************************************************************************/

 46 void InitKey()

 47 {

 48     P0IEN |= 0x2;            // P0.1 设置为中断方式 1:中断使能

 49     PICTL |= 0x2;            //下降沿触发   

 50     IEN1 |= 0x20;            //允许P0口中断; 

 51     P0IFG = 0x00;            //初始化中断标志位

 52     EA = 1;                  //打开总中断

 53 }

 54 

 55 /****************************************************************************

 56 * 名    称: SysPowerMode()

 57 * 功    能: 设置系统工作模式

 58 * 入口参数: mode等于0为PM0 1为PM1 2为PM2 3为PM3             

 59 * 出口参数: 无

 60 ****************************************************************************/

 61 void SysPowerMode(uchar mode) 

 62 { 

 63     if(mode > 0 && mode < 4) 

 64     {  

 65         SLEEPCMD |= mode;    //设置系统睡眠模式 

 66         PCON = 0x01;         //进入睡眠模式 ,通过中断唤醒

 67     } 

 68     else 

 69         PCON = 0x00;         //主动/空闲模   通过中断唤醒系统 

 70 }

 71 

 72 /****************************************************************************

 73 * 名    称: P0_ISR(void) 中断处理函数 

 74 * 描    述: #pragma vector = 中断向量,紧接着是中断处理程序

 75 ****************************************************************************/

 76 #pragma vector = P0INT_VECTOR 

 77 __interrupt void P0_ISR(void) 

 78 { 

 79     if(P0IFG > 0) 

 80     { 

 81         P0IFG = 0;           //清标志位

 82     } 

 83     

 84     P0IF = 0; //清中断

 85     SysPowerMode(4);         //正常工作模式

 86 } 

 87 

 88 /****************************************************************************

 89 * 程序入口函数

 90 ****************************************************************************/

 91 void main(void)

 92 {   

 93     uchar i=0;  

 94       

 95     InitLed();                 //设置LED灯相应的IO口     

 96     InitKey();               //设置KEY相应的IO口

 97     

 98     while(1)

 99     {

100         for (i=0; i<6; i++)  //LED1闪烁3次提醒用户将进入睡眠模式

101         {

102             LED1 = ~LED1;

103             DelayMS(500);

104         }

105 

106         SysPowerMode(3);     //进入睡眠模式PM3,按下按键S1中断唤醒系统 

107     }

108 }


第46~53行按键中断可以参考[ZigBee] 4、ZigBee基础实验——中断中的介绍,我们重点看:

 61 void SysPowerMode(uchar mode) 
 62 { 
 63     if(mode > 0 && mode < 4) 
 64     {  
 65         SLEEPCMD |= mode;    //设置系统睡眠模式 
 66         PCON = 0x01;         //进入睡眠模式 ,通过中断唤醒
 67     } 
 68     else 
 69         PCON = 0x00;         //主动/空闲模   通过中断唤醒系统 
 70 }

其中SLEEPCMD:在main函数中设置为3表示进入10模式即power mode2模式,此时低频晶振工作,数字核心模块关闭,系统可通过RESET,外部中断或者睡眠计数器溢出唤醒,也就是进入了休眠模式~ 

 

PCON为:给该位赋值1导致设备强制进入SLEEPCMD.MODE设置的Power Mode,在活动时任何使能的中断都会导致该位被清0,设备重新进入活动模式。因此当触发按键中断传入SysPowerMode中的参数为4,将执行PCON=0x00,使系统重新进入活动状态。


关键字:ZigBee  定时器一  睡眠模式 引用地址:ZigBee基础实验(八)--定时器一

上一篇:ZigBee基础实验(九)--定时器二
下一篇:ZigBee基础实验(七)--AD采集温度串口显示

推荐阅读最新更新时间:2024-03-16 16:27

无线传感器网络的室内定位节点设计
引言     公共安全领域内,室内定位技术在羁押场所预警监控、取保候审、监视居住,以及紧急情况救援与救灾应急指挥调度等应用中具备良好的应用前景。ZigBee技术是一种基于IEEE 802.15.4标准的低复杂度、低功耗、低成本的无线通信技术,具有自组网、低延迟、可实现128位的AES加密和组网方式灵活等特性,非常适合用于室内定位技术的应用需求。基于ZigBee技术的室内定位系统,具有成本低、节点续航时间长、自组网方便灵活、便于快速部署和安全性较高等优点。 1 基于ZigBee的室内定位节点简述     基于ZigBee的定位网络是一个WSN网络(Wireless Sensor Network,无线传感器网络),为定位应用系统提供
[嵌入式]
GPRS_ZigBee技术的公交车智能监控系统
  引言   在如今的现代生活中,公交车是城市交通中最重要的部分,其运行效率与服务质量很大程度上影响城市交通状况和市民的出行状况。衡量运行效率和服务质量的重要标准是公交车能否准点到达各站和人们能否知道自己等待的公交车运行情况。   目前,除始发站和终点站外,中间的众多站无法保证公交车准点;依靠驾驶员按键操作报站,难免出现错误而误导乘客;候车人不知道等待的公交车运行状况。为此,本文开发了一种基于GPRS和ZigBee的公交车运行监控系统,以期能较好的解决这些问题。   1 系统整体设计   该系统由公交车监控中心、公交车站台的站台监测器和公交车上的智能无线终端(以下简称监控中心、监测器和无线终端)组成,如图1所示。无线终端通
[单片机]
GPRS_<font color='red'>ZigBee</font>技术的公交车智能监控系统
在物联网应用中采用ZigBee IP的主要考虑因素
最近有相当多的讨论是关于物联网和不久即将部署的数十亿可连接设备。这些设备的大多数不是智能手机或其他通讯设备,而是那些可以使我们的家庭、工厂、汽车和其他更多系统被无线连接的遥控器和 传感器 ,并且允许他们在远程处理器或手动控制下更有效的运作。 为了满足这种无处不在的物联网连接需求,就必须有一个满足可连接设备需求的网络标准。蜂窝技术太复杂,使用它将会大大增加成本,并且不支持这些大多数设备所需的电池寿命要求。 用于传感和控制应用的ZigBee标准已经面世多年。而由ZigBee联盟于2013年发布的ZigBee IP规范承诺为无线传感器网络提供无缝的互联网连接,特别是智能电网应用,将会得到ZigBee Smart Energy I
[嵌入式]
基于ZigBee无线传感网的电源监控系统设计
0 引言 传统电源监控系统多采用有线连接方式。当监控节点较多时,就存在着安装困难、布线繁琐及维护不便等问题。采用基于ZigBee 技术的无线传感器网络来组建这种电源监控系统,即可解决上述种种问题。现介绍ZigBee 技术的工作原理及实时监控系统的设计。 ZigBee 协议栈结构由物理层、MAC 层、网络层和应用层组成。ZigBee 标准规定,所有的ZigBee网络节点分为Coordinator、Route、End Device 这3种类型。不论ZigBee 网络采用何种拓扑方式,网络会自动按照ZigBee 协议算法选择较好的路由路径作为数据传输通道,以提高通讯效率。 1 监控系统设计 1.1 系统结构设计 基于ZigBee
[单片机]
基于<font color='red'>ZigBee</font>无线传感网的电源监控系统设计
基于Zigbee技术实现了无线投票表决器远程监控与投票功能
1 引言 投票表决器在选举,会议,教学,娱乐节目中得到大量的使用。现行的无线表决系统采用单一的无线网络,使无线终端设备与上位机进行通信。由于无线网络存在传输距离有限,对障碍物穿透性较差等问题,无法实现远程监控和多会议室同时投票等问题。本文利用Zigbee 技术具有低功耗,使用频段免费和以太网具有传输远,传输速率快等特点,将二者相结合,设计了一款无线投票表决器基站。实现了无线投票表决器远程监控和多会议室同时投票功能。 2 系统概述 整个无线投票表决器系统,由监控中心,基站,表决器组成,如图1 所示。基站既作为远程监控中心与无线投票表决器设备通信的枢纽,并且还作为无线投票表决器网络中的协调器,维护和管理整个无线网络。基站收集各投票
[单片机]
基于<font color='red'>Zigbee</font>技术实现了无线投票表决器远程监控与投票功能
基于嵌入式和无线收发模块的教学楼节能系统
目前,国内各大高校中,同学们的自觉节能意识薄弱,在教室光线足够亮时也开灯,课上完离开教室后灯还亮着的现象普遍存在;而且,学校节能规划极为欠缺,教室的灯光控制由专门的管理人员手工管理,教室极多,管理人员管理不过来,这样就造成不必要的电能浪费和经济损失。本文将嵌入式技术、新兴的ZIGBEE 无线通信技术和传感器技术相结合设计了教学楼节能控制系统,以便能为学校节能及国家节能做出微薄贡献。 1 教室楼节能系统方案 教学楼智能节能系统按功能分由主控制器、ZigBee无线传输网络、亮度检测三部分组成。其中,主控制器负责接受来自ZIGBEE 网络的数据,并根据数据做出相应的判断和处理;ZIGBEE 无线传输网络负责主控制器和亮度检测部分的通
[单片机]
基于嵌入式和无线收发模块的教学楼节能系统
ZigBee基础实验(九)--定时器
1、前言   上一节讲了Zigbee的睡眠定时器利用外部按键使系统从休眠态唤醒到工作态,其核心在于:   61 void SysPowerMode(uchar mode)   62 {   63 if(mode 0 && mode 4)    64 {   65 SLEEPCMD |= mode; //设置系统睡眠模式    66 PCON = 0x01; //进入睡眠模式 ,通过中断唤醒    67 }    68 else    69 PCON = 0x00; //主动/空闲模 通过中断唤醒系统    70 }   其中参数mode表示电源管理系统中
[单片机]
<font color='red'>ZigBee</font>基础实验(九)--<font color='red'>定时器</font>二
GreenPeak超低功耗绿色智能ZigBee技术推动家庭和办公室网络等物联网应用
基于ZigBee RF4CE标准的遥控器将成为首选应用 随着家庭和办公室网络等物联网应用快速发展,电子信息通信领域(ICT)内的各种标准组织和各家公司都在积极推出全新的低功耗近距离联网标准和技术。除去熟悉的支持高速数据传输的Wi-Fi和蓝牙以外,诸如超低功耗ZigBee和超低能耗DECT等以脉冲爆发式数据传输方式的超低功耗、低成本技术也引起了广泛关注。为此,专业ICT技术市场分析机构北京华兴万邦管理咨询有限公司走访了位于荷兰和比利时GreenPeak科技公司,对该公司在超低功耗ZigBee领域内的创新和应用进行了调研。 GreenPeak于2011年7月由德国的无晶圆厂半导体公司Xanadu Wireless和比利时专业无线网
[网络通信]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved