3406|0

26

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

cc2530-睡眠定时器中断(ST0,ST1,ST2) [复制链接]

cc2530-睡眠定时器中断(ST0,ST1,ST2)




下面是是我学习CC2530(webee套件)-----睡眠定时器中断的两段程序:


/*****************************************
//初始化 Sleep Timer (设定后经过指定时间自行唤醒)
*****************************************/
void Init_SLEEP_TIMER(void)
{
ST2 = 0X00;
  ST1 = 0X0f;
  ST0 = 0X0f;             //设置计数值
  EA = 1;                  //开中断
  STIE = 1;               //SleepTimerinterrupt enable 使能睡眠定时器
  STIF = 0;               //SleepTimerinterrupt flag   清除睡眠定时器标志位
}




/*********************************************************************
//设置睡眠时间
//说明:读取睡眠定时器的当前计数值,顺序必须遵循:读ST0 →读ST1 →读ST2
        写入睡眠定时器的比较值,    顺序必须遵循:写ST2 →写ST1 →写ST0
        当定时器的计数值=比较值时,产生中断
*********************************************************************/
void Set_ST_Period(uint sec)
{
   UINT32 sleepTimer = 0;
   //把ST2:ST1:ST0赋值给sleeptimer
   sleepTimer |= ST0;
   sleepTimer |= (UINT32)ST1 <<  8;
   sleepTimer |= (UINT32)ST2 << 16;
   sleepTimer += ((UINT32)sec * (UINT32)32768); //低速频率为32.768KHZ,故每秒定时器计数32768次  
   //把加N秒的计数值赋给ST2:ST1:ST0
   ST2 = (UINT8)(sleepTimer >> 16);
   ST1 = (UINT8)(sleepTimer >> 8);
   ST0 = (UINT8) sleepTimer;
}






主函数直接调用 :Set_ST_Period(10);      //10S之后重新进入睡眠
                         SysPowerMode(2);       //进入PM2低频晶振模式,睡眠定时器中断唤醒
CC2530的睡眠定时器(SLEEP TIMER)是一个24位的计数器(最大0xffffff),可以用来作为唤醒中断(仅PM0-2)下面有效,ST的计数时钟是32.768K,向上计数,可以和一个24数比较以产生中断,在PM2仍然工作,可以产生中断.
实现定时唤醒就要利用ST的数差,相差32768,就表示1秒唤醒一次,相差n*32768表示n秒唤醒一次,这里的n可以是小数。
所以,既然是两次ST(ST0,ST1,ST2)的差值,为何还要在void Init_SLEEP_TIMER(void) 函数中写ST2 = 0X00; ST1 = 0X0f;  ST0 = 0X0f; 我也看了无线龙的基础实验,是寄存器全部给0的,ST2 = 0X00; ST1 = 0X00;  ST0 = 0X00;
ST是24位计数器0xFFFFFF,转成十进制是16777215,除以32768,等于511.99997秒,等于8分32秒。也就是在ST0=ST1 = ST2=0X00;前提下,最大定时时间是8分32秒。
按网蜂ST2 = 0X00; ST1 = 0X0f;  ST0 = 0X0f; 0xffffff减去0xf0f,等于0xfff0f0,转成十进制16773360,在除以32768,等于511.88232秒,也近似约等于8分32秒。
所示,实在搞不清楚,void Init_SLEEP_TIMER(void) 函数里的为何要这么设置?ST2 = 0X00; ST1 = 0X0f;  ST0 = 0X0f;
懂得给说下喽~~谢谢
 
点赞 关注

回复
举报
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表