侵权投诉
订阅
纠错
加入自媒体

S3C2440 Windows CE的RTC模块驱动设计与实现

2013-04-01 15:19
月城清浅
关注

  3.2、时钟函数

  实现RTC功能需要编写3个函数,分别是OEMGetRealTime()、OEMSetRealTime()与OEMSetAlarmTime()。下面对于这三个函数分别介绍。

  OEMGetRealTime()得到当前时间。此函数名不可更改,是WinCE内核规定好了的,也就是当内核需要知道当前时间的时候直接调用此函数。图3为函数OEMGetRealTime()执行流程。

函数OEMGetRealTime()执行流程

  由于RTC不能任意地修改,不然会造成时间的混乱,所以每次获取时间或者设置时间完毕以后必须禁止RTC,具体是通过设置RTC使能/禁止寄存器实现的。而在每次读取时间或者设置时间的时候必须先使用它。在读取时间的时候若读取的“秒”为0必须重新读取时间,因此时的“分”已经被进位了。

  OEMSetRealTime()设置时间。与OEMGetRealTime()一样,它也不可改名,通过此函数核心可以直接修改时间。也就是说,如果用户点击WinCE任务栏中的时间以后,修改时间最终都是调用此函数。

  OEMSetAlarmTime()设置系统报警时间,其参数为指向含有SYSTEMTIME结构体缓冲区的长指针。如果此函数执行成功则返回TRUE,执行失败则返回FALSE。此函数必须是可重人的以防止对硬件的多次操作。对于一般用户的操作,用户可以不用编写此函数。如果需要系统在特定的时间完成特定的功能就需要完成此函数的编写。

  下面给出OEMGetRealTime()的源代码仅供参考。

  OEMGetRealTime(LPSYSTEMTIMElpst)

  {

  volatileRTCreg*s2440RTC;

  s2440RTC=(RTCreg*)RTC_BASE;

  //RETAILMSG(1,(_T("OEMGetRealTime")));

  //使能RTC

  s2440RTC->rRTCCON=0x1;

  lpst->wMilliseconds=0;

  lpst->wSecond=FROM_BCD(s2440RTC->rBCDSEC&0x7f);

  lpst->wMinute=FROM_BCD(s2440RTC->rBCDMIN&0x7f);

  lpst->wHour=FROM_BCD(s2440RTC->rBCDHOUR&0x3f);

  lpst->wDayOfWeek=(s2440RTC->rBCDDATE-1);

  lpst->wDay=FROM_BCD(s2440RTC->rBCDDAY&0x3f);

  lpst->wMonth=FROM_BCD(s2440RTC->rBCDMON&0x1f);

  //lpst->wYear=(2000+s2440RTC->rBCDYEAR);

  lpst->wYear=FROM_BCD(s2440RTC->rBCDYEAR)+2000;

  if(lpst->wSecond==0)

  {

  lpst->wSecond=FROM_BCD(s2440RTC->rBCDSEC&0x7f);

  lpst->wMinute=FROM_BCD(s2440RTC->rBCDMIN&0x7f);

  lpst->wHour=FROM_BCD(s2440RTC->rBCDHOUR&0x3f);

  lpst->wDayOfWeek=(s2440RTC->rBCDDATE-1);

  lpst->wDay=FROM_BCD(s2440RTC->rBCDDAY&0x3f);

  lpst->wMonth=FROM_BCD(s240RTC->rBCDMON&0x1f);

  lpst->wYear=(2000+s240RTC->rBCDYEAR);

  }

  //禁止RTC

  s2440RTC->rRTCCON=0;

  returnTRUE;

  }

<上一页  1  2  3  4  下一页>  
声明: 本文由入驻维科号的作者撰写,观点仅代表作者本人,不代表OFweek立场。如有侵权或其他问题,请联系举报。

发表评论

0条评论,0人参与

请输入评论内容...

请输入评论/评论长度6~500个字

您提交的评论过于频繁,请输入验证码继续

暂无评论

暂无评论

文章纠错
x
*文字标题:
*纠错内容:
联系邮箱:
*验 证 码:

粤公网安备 44030502002758号