No.50548 作者:fengjian99 邮件:gj_92839@163.com ID:109039 登陆:21次 文章数:33篇 最后登陆IP:113.97.226.101 最后登陆:2010/10/26 15:08:32 注册:2008/4/24 14:26:22 财富:296 发帖时间:2009/2/25 17:20:38 发贴者IP:116.25.70.151 标题:fengjian99:[推荐]睡眠定时器的使用 摘要:No.50548[推荐]睡眠定时器的使用 /***************************************************************************** 在使用本文件请定义以下数据类型:typedef enum TimeUnit{MILLISECOND,SECOND,MINUTE,HOUR} TimeUnit_def;声明以下函数:extern void halInitSleepTimer(void);extern BYTE setSleepTimerPeriod(WORD time,TimeUnit_def uint);extern void halResetSleepTimerAndEnterPM2(void); ******************************************************************************/ /**********************************头文件***********************************/ #include "hal.h" #ifndef SLEEPTIMER_ENABLE#define SLEEPTIMER_ENABLE TRUEtypedef enum TimeUnit{MILLISECOND,SECOND,MINUTE,HOUR} TimeUnit_def; #endif//----------------------------------------------------------------------------- //功能: 用来初始化睡眠定时器 // 启用了全局中断,并打开了ST的中断//输入:无 //输出:无 //说明:在使用ST唤醒系统时,请先调用本函数 //----------------------------------------------------------------------------- void halInitSleepTimer(void) { //SET_MAIN_CLOCK_SOURCE(CRYSTAL);//设主时钟为晶振,可不设 INT_GLOBAL_ENABLE(INT_OFF); //关中断 SLEEP_TIMER_INIT(); INT_SETFLAG(INUM_ST,INT_CLR); INT_ENABLE(INUM_ST,INT_ON); SLEEP_TIMER_ENABLE_EVENT0_INT(INT_ON); INT_GLOBAL_ENABLE(INT_ON);} //----------------------------------------------------------------------------- //功能:设置睡眠定时器的唤醒时间 //输入:time,时间 uint,单位 //输出:设置的状态,0代表成功,其他数代表失败 //说明:使用低速RC时,最长可以定时17.2H,最小11.08MS (Tmin = 750/Fref * 384) // 使用低速晶振时,最长可以定时18.2小时,最小11.72MS // 调用本函数之前必须先调用halInitSleepTimer()。 //----------------------------------------------------------------------------- BYTE setSleepTimerPeriod(WORD time,TimeUnit_def uint) { UINT32 temp = 0; BYTE wor_res = 0; float t ......
>>返回讨论的主题
|