在實際應用中,有時候英創工控主板自帶的時鐘精度不能滿足項目需求,客戶需要自行擴展更高精度的時鐘,本文舉例介紹一種在英創工控主板(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);
文中提到的例程,可以通過聯系英創工程師獲得。
-
嵌入式主板
+關注
關注
7文章
6086瀏覽量
35615
發布評論請先 登錄
相關推薦
評論