1 / 14
文档名称:

睡眠及唤醒 - 睡眠及唤醒-word资料(精).doc

格式:doc   页数:14页
下载后只包含 1 个 DOC 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

睡眠及唤醒 - 睡眠及唤醒-word资料(精).doc

上传人:3188035052 2016/7/15 文件大小:0 KB

下载得到文件列表

睡眠及唤醒 - 睡眠及唤醒-word资料(精).doc

文档介绍

文档介绍:一、承上启下这一篇, 2430 的睡眠功能及唤醒方法。 2430 节点一般是靠电池来供电,因此对其功耗的控制显得至关重要。 2430 2430 的4 种功耗模式的介绍: 从上表中可看出, CC2430 共有 4 种电源模式: PM0 ( 完全清醒), PM1 ( 有点瞌睡)、 PM2 (半醒半睡)、 PM3 (睡的很死)。越靠后,被关闭的功能越多,功耗也越来越低。它们之间的转化关系如下: 把 PM1 、 PM2 唤醒到 PM0 ,有三种方式:复位、外部中断、睡眠定时器中断;但把 PM3 唤醒到 PM0 ,只有两种方式:复位、外部中断(这是因为在 PM3 下,所有振荡器均停止工作, 睡眠定时器当然也熄火啦~) 下面我们通过一个小实验,来介绍如何进入睡眠模式,以及如何唤醒到 PM0 状态。二、系统睡眠及中断唤醒实验(1 )实验简介系统初始化,处于 PM0 →进入 PM1 → 1s 后被睡眠定时器唤醒为 PM0 →进入 PM2 → 2s 后被睡眠定时器唤醒为 PM0 →进入 PM3 →等待按键 S1 按下,触发外部中断,被唤醒为 PM0 ( 2 )程序流程图(注:上图中的圆角框表示系统的运行状况) (3 )实验源码及剖析( 下面的框框是可以点的~) 头文件及宏定义/* 实验说明:中断唤醒睡眠实验,分别介绍三种睡眠模式下的唤醒*/ #include <> #define LED_ON 0 #define LED_OFF 1 #define led1 P1_0 #define led2 P1_1 #define led3 P1_2 #define led4 P1_3 子函数/* 系统时钟初始化-------------------------------------------------------*/ void xtal_init( void ) {SLEEP &= ~0x04 ;// 都上电 while (!(SLEEP &0x40 )); // 晶体振荡器开启且稳定 CLKCON &= ~0x47 ;// 选择 32MHz 晶体振荡器 SLEEP |= 0x04 ; }/*LED 初始化-------------------------------------------------------*/ void led_init( void ) {P1SEL =0x00 ;//P1 为普通 I/O 口 P1DIR |= 0x0F ;// 输出 led1 =LED_OFF; // 关闭所有 LED led2 =LED_OFF; led3 =LED_OFF; led4 =LED_OFF; }/* 外部中断初始化-------------------------------------------------------*/ void io_init( void ) {P0INP &= ~0X02 ;// 有上拉、下拉 EA =1;// 总中断允许 IEN1 |= 0X20 ;// P0IE =1,P0 中断使能 PICTL |= 0X09 ;// 允许中断,下降沿触发 P0IFG &= ~0x02 ;// 中断标志清 0 } /* 睡眠定时器中断初始化-------------------------------------------------------*/ void sleepTimer_init( void ) {STIF= 0;// 睡眠定时器中断标志清 0 STIE= 1;// 开睡眠定时器中断 EA= 1;// 开总中断}/* 设置睡眠定时器的定时间隔-------------------------------------------------------*/ void setSleepTimer(unsigned int sec) {unsigned long sleepTimer =0; sleepTimer |= ST0; // 取得目前的睡眠定时器的计数值 sleepTimer |= (unsigned long )ST1 << 8; sleepTimer |= (unsigned long )ST2 << 16 ; sleepTimer += ((unsigned long )sec *(unsigned long )32768 ); // 加上所需要的定时时长 ST2 =(unsigned char )(sleepTimer >> 16 ); // 设置睡眠定时器的比较值 ST1 =(unsigned char )(sleepTimer >> 8); ST0 =(unsigned char )sleepTimer; }/* 选择电