英创信息技术主板EM9280 IRIG-B码校时方案简介

描述

在工控行业很多领域中,需要控制系统具有高精度的时间同步功能,IRIG就是美国靶场司令委员会制定的一种时间标准。自EM9X60后,英创EM928x嵌入式主板也实现了IRIG-B码校时功能。之前的相关文章见链接http://www.emtronix.com/article/article2011414.html。

IRIG是美国靶场司令委员会制定的一种时间标准,其中的串行时钟编码共有6种格式,即A、B、D、E、G、H。它们的主要差别是时间码的帧速率不同,广泛应用的IRIG-B即其中的B型编码,B型码的时帧速率为1帧/s,可传递100位信息。图1是IGIG-B码示意图,其时帧周期是1s,每秒100个码元,使用脉宽编码方式,每个码元脉宽10ms,共三种码元,其中高电平5ms和2ms分别表示二进制 “1”,“0”,高电平8ms为位置标识,分别为P0,P1,…P9。连续两个8ms宽度脉冲的第二个8ms脉冲的前沿为秒准点标志,也是一个时间格式的帧参考标志。一个时间格式帧包含了秒,时,分,天数,年份,控制位等丰富的信息。

嵌入式主板

图1:IRIG-B码标准

EM9280拥有4路IRQ,其中IRQ3也可用于IRIG-B码校时。使用IRIG-B码校功能时,需要设置注册表,关闭IRQ3功能 
        [HKEY_LOCAL_MACHINE\Drivers\BuiltIn\IRQ3] 
        'TrueInstall'=dword:0

同时打开IRIQB对时功能 
        [HKEY_LOCAL_MACHINE\Drivers\BuiltIn\IGB1] 
        'TrueInstall'=dword:1

此时IRIGB功能打开,IRQ3不能继续做IRQ使用(其它3路IRQ可正常使用)。

在与IRIG-B码时钟源时间同步时,用户并不需要关心IRIG-B码的具体含义,实现方法,仅需要将B码送到EM9280的IRQ3接口(对应英创EM9280评估底板CN10,11针脚)就行了,EM9360的驱动程序将完成B码解码,同步等工作。

应用层面使用EM9280的IRIG-B校时功能方法如下。

1、通过标准的文件操作方式来打开系统的校时功能。 
        HANDLE hIrigb; 
                hIrigb = CreateFile(L'IGB1:', // name of device 
                GENERIC_READ|GENERIC_WRITE, // desired access 
                FILE_SHARE_READ|FILE_SHARE_WRITE, // sharing mode 
                NULL, // security attributes (ignored) 
                OPEN_EXISTING, // creation disposition 
                FILE_FLAG_RANDOM_ACCESS, // flags/attributes 
                NULL); // template file (ignored)

2、关闭由CreateFile打开的HANDLE,即关闭系统校时功能。

CloseHandle(hIrigb);

3、用户可以调用DeviceIoControl来查看系统最近一次同步的时间,调用方法如下:

#define IOCTL_IRIG_B_GET_TIME CTL_CODE(FILE_DEVICE_UNKNOWN, 0xC10, METHOD_BUFFERED, FILE_ANY_ACCESS) 
        bRet = DeviceIoControl(hIrigb, // file handle to the driver 
                IOCTL_IRIG_B_GET_TIME, // I/O control code 
                NULL, // in buffer 
                0, // in buffer size 
                &systime, // out buffer 
                sizeof(SYSTEMTIME), // out buffer size 
                NULL, // pointer to number of bytes returned 
                NULL); // ignored (=NULL)

4、用户可以通过修改系统注册表来配置灵活的校时方案,通过注册表的设置,可实现时间秒同步、分钟同步、小时同步或日同步,对应的注册表项如下:(下面的注册表键值为系统默认值)

[HKEY_LOCAL_MACHINE\Drivers\BuiltIn\IGB1] 
        'DeviceArrayIndex'=dword:1 
        'Prefix'='IGB' 
        'Dll'='irig_b.dll' 
        'DeviceID'=dword: fe 
        'Priority256'=dword:88 
        ; AutoSync =0: 禁止校时功能; =1: 秒同步; =2: 分同步; = 3: 小时同步; = 4: 日同步 
        'AutoSync'=dword:2 ; minute sync 
        ; SyncMinute:当AutoSync为小时同步时,在SyncMinute分钟进行同步 
        'SyncMinute'=dword:3b ; 0x3b = 59 -> minute on sync 
        ; SyncHour: 当AutoSync为日同步时,在SyncHour小时进行同步 
        'SyncHour'=dword:17 ; 0x17= 23 -> hour on sync

传统的工控板卡在对IRIG-B码处理时,通常需要增加额外的硬件(如单片机,FPGA)对B码进行解码,然后再通过串口、总线或其它形式将数据交给主控板卡处理,增加了系统成本和操作难度,英创EM9280及EM9X60可直接对B码进行解码,不需要增加任何硬件就能实现毫秒级精度的时间同步,大大降低了系统复杂程度,节约了成本,提高了系统稳定性。

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

全部0条评论

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

×
20
完善资料,
赚取积分