目录

前言

一、实验相关电路图

二、实验相关理论与寄存器

三、源码分析


前言

1) 为什么要睡眠? Zigbee的特点就是远距离低功耗的无线传输设备,节点模块闲时可以
进入睡眠模式,在需要传输数据时候进行唤醒,能进一步节省电量
2) 掌握几种系统电源模式的基本设置及切换。系统电源有以下几种管理模式:

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

3) 将睡眠模式下的 CC2530 通过定时器唤醒,观察 LED 闪烁现象

一、实验相关电路图

由于发光二级管单向导电特性, 即只有在正向电压(二极管的正极接正,负极接负)下才
能导通发光。 P1.0 引脚接发光二极管(D1)的负极,所以 P1.0 引脚输出低电平 D1 亮, P1.0
引脚输出亮电平 D1 熄灭。 当 P0_1 引脚为低电平时说明按键被按下,高电平时为抬起状态.

二、实验相关理论与寄存器

相关寄存器 PCON, SLEEPCMD,ST0, ST1, ST2,如下表所示:

寄存器 作用 描述

PCON (0x87)

供电模式控制

Bit[0] 供电模式控制。写1 到该位强制设备进入
SLEEP.MODE(注意MODE=0x00 且IDLE = 1 将停止CPU内核活动)设置的供电模式,这位读出来一直是0。
当活动时,所有的使能中断将清除这个位,设备将重新进入主动模式。

SLEEPCMD(0xBE)

睡眠模式控制

Bit[1:0] 供电模式设置
00 : 主动/空闲模式
01 : 供电模式1
10 : 供电模式2
11 : 供电模式 3
ST0

睡眠计数器数据Bit[7:0]

ST1 睡眠计数器数据Bit[15:8]
ST2 睡眠计数器数据Bit[23:16]

设置睡眠时间具体配置如下:

sleepTimer |= ST0;
sleepTimer |= (ulong)ST1 << 8;
sleepTimer |= (ulong)ST2 << 16;
sleepTimer += ((ulong)sec * (ulong)32768);
ST2 = (uchar)(sleepTimer >> 16);
ST1 = (uchar)(sleepTimer >> 8);
ST0 = (uchar) sleepTimer;

配置完毕后 sleepTimer 与 ST2<<16|ST1<<8|ST0 相差即为睡眠秒数

三、源码分析

main.c文件如下

/****************************************************************************
* 文 件 名: main.c
* 描    述: 设置定时器让系统在设定的时间被唤醒,每次唤醒LED1闪烁3下提示用户
****************************************************************************/
#include <ioCC2530.h>typedef unsigned char uchar;
typedef unsigned int  uint;
typedef unsigned long ulong;#define LED1 P1_0            //P1.0口控制LED1/程序入口函数
void main(void)
{   uchar i=0;  InitLed();              //设置LED灯相应的IO口     InitSleepTimer();        //初始化休眠定时器while(1){for (i=0; i<6; i++)  //LED1闪烁3次提醒用户将进入睡眠模式{LED1 = ~LED1;DelayMS(500);}Set_ST_Period(5);   //设置睡眠时间,睡眠5秒后唤醒系统SysPowerMode(2);    //重新进入睡眠模式PM2}
}/****************************************************************************
* 名    称: DelayMS()
* 功    能: 以毫秒为单位延时 16M时约为535,系统时钟不修改默认为16M
* 入口参数: msec 延时参数,值越大,延时越久
* 出口参数: 无
****************************************************************************/
void DelayMS(uint msec)
{ uint i,j;for (i=0; i<msec; i++)for (j=0; j<535; j++);
}/****************************************************************************
* 名    称: InitLed()
* 功    能: 设置LED灯相应的IO口
* 入口参数: 无
* 出口参数: 无
****************************************************************************/
void InitLed(void)
{P1DIR |= 0x01;           //P1.0定义为输出口LED1 = 1;                //LED1灯上电默认为熄灭
}/****************************************************************************
* 名    称: SysPowerMode()
* 功    能: 设置系统工作模式
* 入口参数: mode等于0为PM0 1为PM1 2为PM2 3为PM3
* 出口参数: 无
****************************************************************************/
void SysPowerMode(uchar mode)
{ if(mode < 4) {  SLEEPCMD |= mode;    //设置系统睡眠模式 PCON = 0x01;         //进入睡眠模式 ,通过中断唤醒} else PCON = 0x00;         //通过中断唤醒系统
}/****************************************************************************
* 名    称: ST_ISR(void) 中断处理函数
* 描    述: #pragma vector = 中断向量,紧接着是中断处理程序
****************************************************************************/
#pragma vector = ST_VECTOR
__interrupt void ST_ISR(void)
{ STIF = 0;          //清标志位SysPowerMode(4);   //进入正常工作模式
} /****************************************************************************
* 名    称: SysPowerMode()
* 功    能: 初始化休眠定时器,设定后经过指定时间自行唤醒
* 入口参数:
* 出口参数: 无
****************************************************************************/
void InitSleepTimer(void)
{ ST2 = 0x00; ST1 = 0x00; ST0 = 0x00; EA = 1;     //开中断 STIE = 1;   //睡眠定时器中断使能 0: 中断禁止     1: 中断使能STIF = 0;   //睡眠定时器中断标志 0: 无中断未决   1: 中断未决
}/****************************************************************************
* 名    称: Set_ST_Period()
* 功    能: 设置睡眠时间
* 入口参数: sec 睡眠时间
* 出口参数: 无
****************************************************************************/
void Set_ST_Period(uint sec)
{ ulong sleepTimer = 0; sleepTimer |= ST0; sleepTimer |= (ulong)ST1 <<  8; sleepTimer |= (ulong)ST2 << 16; sleepTimer += ((ulong)sec * (ulong)32768); ST2 = (uchar)(sleepTimer >> 16); ST1 = (uchar)(sleepTimer >> 8); ST0 = (uchar) sleepTimer;
}

小知识:
晶体频率太高比较耗电, 32.768 原来主要是用在时钟上,比较方便产生 1 秒的时钟。
32768=2 的 15 次方,即 (1/32.768kHz)*32768=1s 这就是为什么核心板有个 32.768k
晶振的原因


CC2530基础实验:(11)系统睡眠唤醒--定时器唤醒相关推荐

  1. Zigbee之旅(九):几个重要的CC2430基础实验——系统睡眠及中断唤醒

    Zigbee之旅(九):几个重要的CC2430基础实验--系统睡眠及中断唤醒 一.承上启下 这一篇,我们来讨论一下CC2430的睡眠功能及唤醒方法.在实际运用中的CC2430节点一般是靠电池来供电,因 ...

  2. TI CC2530基础实验(定时器1查询方式——自由运行模式)

    本实验实现通过CC2530的定时器1(16位)查询方式控制LED1以1S的周期性闪烁,此实验使用的三个寄存器T1CTL(定时器1控制寄存器),T1STAT(定时器1状态寄存器),IRCON. 有关CC ...

  3. CC2530基础实验:(8)串口通讯-发送字符串控制LED

     目录 前言 一.实验相关电路图 二.实验相关理论与寄存器 1.并行通信与串行通信 2.URAT 3.同步通信与异步通信 4.外设I/O 5.CC2530 的串口通信模块 6.相关寄存器 三.源码分析 ...

  4. CC2530基础实验:(10)系统睡眠唤醒--中断唤醒

    目录 前言 一.实验相关电路图 二.实验相关理论与寄存器 三.源码分析 前言 1) 为什么要睡眠? Zigbee的特点就是远距离低功耗的无线传输设备,节点模块闲时可以 进入睡眠模式,在需要传输数据时候 ...

  5. CC2530基础实验:(1)按键控制LED跑马灯

    文章目录 前言 一.实验相关电路图 二.实验相关寄存器 三.源码分析 前言 本实验用于学习CC2530芯片GPIO 的配置方法,Led 驱动电路及开关 Led 的原理,按键的使用,实现简单的人机交互. ...

  6. CC2530基础实验:(9)AD采集cc2530温度串口显示

    目录 前言 一.实验相关电路图 二.实验相关理论与寄存器 1.A/D 转换的基本工作原理 2.CC2530的A/D转换模块 3.ADC模块的信号输入 4.ADC相关的几个概念 5.相关寄存器 三.源码 ...

  7. CC2530基础实验:(2)外部中断控制LED亮灭

    目录 前言 一.实验相关电路图 二.实验相关理论与寄存器 1.中断相关的基础概念 2.CC2530 的中断系统 3.CC2530 的中断处理函数编写方法 4.CC2530 的外部中断 三.源码分析 前 ...

  8. CC2530基础实验四 串口通信

    一.任务要求 编写程序实现实验板定期向PC机串口发送字符串"Hello ! I am CC2530 .\n".实验板开机后按照设定的时间间隔,不断地向PC及发送字符串,报告自己的状 ...

  9. CC2530基础实验:(12)看门狗

      目录 前言 一.实验相关理论与寄存器 二.源码分析 前言 看门狗是在软件跑飞的情况下 CPU 自恢复的一个方式,当软件在选定的时间间隔内不能置位看门狗定时器(WDT), WDT 就复位系统.看门狗 ...

最新文章

  1. .jsp后缀语言_ARM汇编语言入门(三)
  2. 深度区分LoRa和LoRaWAN的区别
  3. 从英伟达 vs ATI的芯片大战看GPU前世今生
  4. 为什么新闻联播的主持人不低头念稿,难道都背下来了?
  5. 作为测试人员,这些工具不会真不行
  6. JavaScript菜鸟教程笔记
  7. 博主自我介绍、当前已经成立的技术分局【专栏必读】
  8. jquery实现回到顶部和回到底部
  9. perl data::dumper 模块使用
  10. @Valid使用详解
  11. Uart串口实验--TQ2440
  12. 使用GEE或PIE下载Landsat8影像
  13. 【Linux Centos6\7 Oracle11g 修改数据库最大连接数】
  14. W7计算机名称原名,w7系统版本名称与区别
  15. Linux命令总结-cd
  16. PaadleInference源码编译操作流程
  17. 送给PUB所有MM《Silent love 微笑的弧度 》 三颗猫饼干
  18. Format函数的用法
  19. [leetcode] 4 寻找两个有序数组的中位数(二分+递归查找第K小数)(重要)
  20. XShell传输文件(CentOS7)

热门文章

  1. mysql从安全文件密码_MySQL安全输入密码的一些操作介绍_MySQL
  2. wpsppt页面卷曲在哪里_如何用PPT制作卷轴效果
  3. 正在使用的Android应用程序
  4. RPA财务机器人的应用分类丨运行方式维度
  5. 治疗性放射性同位素行业调研报告 - 市场现状分析与发展前景预测
  6. 生信学习过程中遇到的问题
  7. MOXA NPort5210 串口设备联网服务器
  8. ros常遇到的Couldn‘t find executable named ---错误
  9. UESTC oj 758 P酱的冒险旅途
  10. 计算机控制技术第二版答案于微波,微波技术基础课后参考答案(田加胜版)