注册
登录
电子工程世界-论坛
返回首页
EEWORLD首页
频道
EE大学堂
下载中心
Datasheet
专题
单片机
物联网
汽车电子
嵌入式
手机/便携
模拟电子
家用电子
网络通信
电源管理
工业控制
测试测量
半导体设计/制造
安防电子
传感器
医疗电子
dingshidong的个人空间
https://home.eeworld.com.cn/space-uid-226256.html
[收藏]
[复制]
[分享]
[RSS]
空间首页
动态
记录
日志
相册
主题
分享
留言板
个人资料
借用开发板
论坛
淘帖
Collection
查看新帖
最新回复
社区活动
联系管理员
我的空间
帖子
日志
收藏
好友
勋章
积分
安全验证
请完成以下验证码
日志
cc2530-睡眠定时器中断(ST0,ST1,ST2)
已有 6196 次阅读
2012-8-31 16:41
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;
懂得给说下喽~~谢谢
收藏
邀请
举报
全部
作者的其他最新日志
•
仿真器识别不了CC2530芯片,求HEX文件!
•
谁用过检测“紫外线”的传感器
•
stm32野火开发板上做USB通信,用的CDC虚拟串口。
•
LM358单运放接成仪表放大器
•
2A太阳能,温差的能量收集, 凌特的芯片:LT3652和LTC3108.
评论 (
0
个评论)
涂鸦板
您需要登录后才可以评论
登录
|
注册
评论
dingshidong
加为好友
给我留言
打个招呼
发送消息
热门文章
头条资讯
干货 | 全手工打造!短波调频接收机设计及制作
MEMS行业的三大竞争壁垒
『大选』进入关键9月,要不要来干预一把?
支持Matter1.0标准的设备即将闪亮登场
华为举债40亿
中国宣布,审查美光
新增数据手册
T499D476M016ATE800Z123
MF75-2463-DB101
TSW-204-09-S-Q-LA
ICH-240-N
FMXMA218IJF-04.200000M
RR0510P5622D-C
热搜器件
236
801-009-07ZNU16-12PA
SN74ALVC125DG4
MS3100E14S-9P
MIKROE-1455
S-13A1H12-U5T1U3
推荐下载
雷达模块集库缩短系统开发周期
基于单片机的液位监控系统
A BASIC INTRODUCTION TO RFID T
一个修改过的devC版的控件汉化包
一种改进的用于FPGA快速部分配置的电路结构
基于C语言编写的,在ZIGBEE的网络中,进行环境数据采集和无线传输的程序
推荐关注
四脚晶振怎么区分有源无源
上汽大通汽车CAN数据解析开发服务及技术商用领域详细解析
【Follow me第二季第4期】2.必做任务之点灯+串口打印
【Follow me第二季第3期】DAC配置生成波形及性能测试(二)使用ADC采样DAC模块输出...
《Linux内核深度解析》 ---- 序言阅读及相关资源获取
OpenHarmony测试RS232/RS485串口方法,触觉智能SBC3528工控主板演示