英创信息技术工控主板扩展高精度时钟方案(WinCE)简介

描述

在实际应用中,有时候英创工控主板自带的时钟精度不能满足项目需求,客户需要自行扩展更高精度的时钟,本文举例介绍一种在英创工控主板(WinCE)上扩展高精度时钟的一个方案。

硬件参考

高精度实时钟扩展方案,采用RX8025T,它是一颗内部集成了高精度32768Hz晶体,且带温度补偿的时实钟芯片,最高精度相当于1个月误差5秒。

RX8025T的应用电路图非常简单,采用I2C总线与ESMARC工控主板连接,GPIO26是I2C_SDA,GPIO27是I2C_SCL, 基本应用电路图如下所示:

嵌入式主板

RX8025T时钟芯片没有独立的后备电池供电端口,因此,在供电端,采用双二极管对它供电:当系统供电正常,3.3V电压高于3V电池电压,由系统电源供电;当系统断电后,无3.3V电压,3V电池电压高于3.3V供电端,转为3V电池供电。

根据RX8025T的电流消耗参数:3uA/DC3V,如果使用CR2032钮扣电池,其电能容量约为220mAH,再按照0.7的耗电率(电池自放电及电能利用效率),理论上可以使用5万小时左右。

为了方便客户高效地将RX8025T集成到应用系统中,英创公司基于EM928x平台,提供了对RX8025T的参考程序,主要有几个函数以供用户使用:

RTC初始化程序:

首先初始化I2C引脚,再判断时针是否起振。

输入:

Force 为1,则强制设置初始化时间

返回:

如时钟已经起振,则返回0

如时钟没有起振,则设置起振位并初始化时间为:2009-12-21 15:20:30  星期一,再返回1

BOOL RTC_Init( BOOL Force );

RTC 时间读取:

输出:

SYSTEMTIME 数据

返回:

设置成功 1

设置失败 0

BOOL GetRTCTime ( SYSTEMTIME *RTCTime );

RTC时间设置:

输出:

SYSTEMTIME 数据

返回:

设置成功 1

设置失败 0

BOOL SetRTCTime ( SYSTEMTIME *RTCTime );

读取高精度时钟时间到系统中

SYSTEMTIME RTCTime;

RTC_Init(1);

GetRTCTime (&RTCTime);

SetLocalTime(&RTCTime);

设置系统时间后如何同步设置到高精度时钟中

扩展高精度时钟后,通常希望在系统中设置时间时,或是使用SetLocalTime等API函数设置时间时能同步的将时间设置到高精度时钟中。可以利用API函数CeRunAppAtEvent侦听设置时间的消息,然后在消息响应函数中进行高精度时钟的时间设置。

通过CeRunAppAtEvent绑定启动相应exe

#include "Notify.h"

#define EXE_PATH     L"\\FlashDisk\\test.exe"

CeRunAppAtEvent(EXE_PATH, NOTIFICATION_EVENT_TIME_CHANGE);

通过CeRunAppAtEvent绑定触发相应的消息

以”MyEvent”命名事件为例。

#include "Notify.h"

m_hEvent = CreateEvent(NULL, FALSE, FALSE, L"MyEvent"); 

CeRunAppAtEvent(L"\\\\.\\Notifications\\NamedEvents\\MyEvent", NOTIFICATION_EVENT_TIME_CHANGE); 

//在线程中等待MyEvent事件

DWORD dwRet;

dwRet = WaitForSingleObject(m_hEvent, 500);

if (dwRet == 0)

{

//处理消息,将系统时间写入高精度时钟中");

}

读取系统时间,同时设置高精度时钟

SYSTEMTIME systime;

GetLocalTime(&systime);

SetRTCTime (&systime);

文中提到的例程,可以通过联系英创工程师获得。

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分