欢迎来到天天文库
浏览记录
ID:22632640
大小:69.50 KB
页数:8页
时间:2018-10-30
《wince中rtc驱动开发介绍》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库。
1、WinCE中RTC驱动开发介绍 刚刚在GetRealTime(LPSYSTEMTIMElpst):获得当前的时间 BOOLOEMSetRealTime(LPSYSTEMTIMElpst): 设置当前的时间 BOOLOEMSetAlarmTime(LPSYSTEMTIMElpst):设置报警的时间 上面三个函数的参数都是lpst,这里介绍一下: LPSYSTEMTIME实际上是一个指向SYSTEMTIME结构的指针,关于SYSTEMTIME,定义如下:typedefstruct_SYSTEMTIME{ GetRealTime(..)函数来获得系统的时间,
2、这种方式被称为hardode。ACHINEPlatformSoftRTC=1 我来谈谈我的看法,一般都要使用hardode,这样获得的系统时间比较准。softode获得系统时间不会很准的。 OEMSetRealTime(..)用来设置当前的时间。当SetRealTime(..)把你设置的时间写到RTC模块里面。这里要提一下,我们都知道在OEMIoControl函数里面有一个case叫IOCTL_HAL_INIT_RTC,这个case用来在初始化的时候设置实时时钟的初始值,一般在这个case里面会调用OEMSetRealTime(..)函数。参考代码如下:ca
3、seIOCTL_HAL_INIT_RTC: //Thekernelhasdetectedacoldboot. //Thereal-timeclockprobablyneedstobereset. if(nInBufSize>=sizeof(SYSTEMTIME)) returnOEMSetRealTime((LPSYSTEMTIME)lpInBuf); else returnFALSE; break; OEMSetAlarmTime(..)用来设置报警时间。实现这个函数,要看你的RTC模块是否具有报警功能。具备报警功能的RTC会允许你设
4、置报警时间,当你设置了报警时间以后,RTC会比较你的报警时间和当前时间,一旦这两个时间相等了,就会产生中断。大致原理就是这样了。所以这个函数里面实际上就是实现设置一个报警时间,还有就是打开相应的RTC中断。当然在中断程序ISR中,要返回SYSINTR_RTC_ALARM。在应用程序中,我们可以通过调用CeRunAppAtTime(..)来在一个指定的时间运行一个应用程序。这个函数好像会调用OEMSetAlarmTime(..)来设置报警时间。具体没有试过。 大致就是这些内容,一般在GetRealTime(LPSYSTEMTIMElpst){ unsigne
5、dcharbuf[12]; DSG(1,(_T(:::::OEMGetRealTime:::::rn))); if(critical_flag) //第一次上电 { InitializeCriticalSection(RTC_critsect); //123下一页——感谢阅读这篇文章,..,初始化临界区 I2C_Init(); //初始化 I2C ISL1208_Init(); //初始化ISL1208实时时钟芯片。 critical_flag
6、=0; } EnterCriticalSection(RTC_critsect); memset(buf,0,sizeof(buf)); flg=I2C_Read(ISL1208,0x0,buf,6); //读取ISL1208的时间 if(!flg) //I2C失败,返回错误 { RETAILMSG(1,(_T(:::::::OEMGetRealTimeError...rn))); returnFALSE; } LeaveCriticalSection(RTC_crit
7、sect); buf[2]=0x7f; //清除MIL位 lpst->p;0x0f)+(buf[0]>>4)*10); //获得当前时间,并将时间从BCD码转换为十进制 lpst->p;0x0f)+(buf[1]>>4)*10); lpst->p;0x0f)+(buf[2]>>4)*10); lpst->p;0x0f)+(buf[3]>>4)*10); lpst->p;0x0f)+(buf[4]>>4)*10);
8、 lpst->e(
此文档下载收益归作者所有