下载此文档

睡眠及唤醒 - 睡眠及唤醒.doc


文档分类:医学/心理学 | 页数:约14页 举报非法文档有奖
1/14
下载提示
  • 1.该资料是网友上传的,本站提供全文预览,预览什么样,下载就什么样。
  • 2.下载该文档所得收入归上传者、原创者。
  • 3.下载的文档,不会出现我们的网址水印。
1/14 下载此文档
文档列表 文档介绍
一、承上启下这一篇, 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; }/* 选择电

睡眠及唤醒 - 睡眠及唤醒 来自淘豆网www.taodocs.com转载请标明出处.

非法内容举报中心
文档信息
  • 页数14
  • 收藏数0 收藏
  • 顶次数0
  • 上传人825790901
  • 文件大小0 KB
  • 时间2016-07-27