APP下载

ACME2.0采集前端软件升级改进研究

2014-04-23樊琦余卫东陈文辉程刚

测井技术 2014年2期
关键词:采集卡寄存器中断

樊琦,余卫东,陈文辉,程刚

(中国石油集团测井有限公司,陕西 西安 710077)

0 引 言

EILog测井系统的采集箱体硬件采用基于cPCI(Compact PCI)总线的体系结构,前端软件是基于Vx Works实时操作系统的应用,在采集箱体中的单板计算机上运行,是数据采集卡和测井采集控制管 理平 台 ACME[1](Acquisition Control Management Expert)的中间桥梁,承担着命令下发和数据上传的任务。伴随着EILog系统大规模推广应用,作为核心组成部分的采集箱体也在不断升级,以满足不断提升的测井作业要求。前端软件在单板计算机和数据采集卡得到更新后,自身也需要升级来匹配硬件运行。由此,引出了在软硬件升级过程中遇到的精确延时和中断管理等2个关键性问题。采集时序正确和运行稳定是保证数据采集的准确性的重要因素,只有解决了这2个问题,采集前端软件才能稳定地通用于新旧硬件之上,采集到正确的井下数据。本文分析了问题产生的原因,阐述了对应的解决方案并给出了具体的实现方法。改进后的软件在实际应用中取得了良好的效果。

1 Vx Works精确延时

EILog系统采集箱体首批使用的是SBS公司的CT7型号单板计算机,它采用Pentium III单核处理器,运行Wind River公司的Vx Works5.4操作系统。EILog系统在高速AD采集等情况下需要微秒级的准确定时,而系统提供的延时函数在精确性方面不能满足要求。在EILog推广应用初期采用简单有效的处理方法是执行空循环完成需要的延时,即根据系统时钟频率和需要的延时计算出要执行的空循环次数。但该方法在单板计算机更换为Advantech公司MIC3392型号以后就不再适用,处理器频率的提升和核心的增加以及其他因素使得计算空循环的次数变得复杂,并且这个次数在每次系统运行时是在一个范围内波动而不是一个固定的数值。因此,采用固定次数的空循环完成延时不再是一个可靠的解决方案。

1.1 Vx Works系统提供的延时方法分析

(1)task Delay()使调用该函数的任务延时n个tick(内核时钟周期)。该方法缺点是task Delay(n)表示任务延时至第n个系统时钟到来的时刻,task-Delay有接近1个tick的误差存在。

(2)WatchDog看门狗[2]在经过指定的延时后,实现在系统时钟ISR的上下文中运行指定的程序。如果利用看门狗定时器实现延时,则存在与task-Delay()一样的精度上的缺陷,并且与中断服务程序的约束一样,看门狗定时挂接的程序编写有一定的限制。

(3)sleep()和nanosleep()是系统提供的延时函数接口。sleep()以秒为单位,nanosleep()参数可精确到纳秒,但传参是时钟的结构体,实际上只能做到大于或等于这个时间。因为sleep()或nanosleep()函数延时的时间基准仍是tick,调用此函数的任务处于任务延时状态,这点与task Delay()一致。

(4)sys Timestamp()通过读取该定时器当前计数值获取高精度定时。使用sys Timestamp Freq()函数可以得到系统时间的频率,它反映的是CPU定时器的基准频率。但该法依靠查询方式实现,频繁使用非常影响系统执行效率。

(5)辅助时钟利用目标板上CPU的另一个定时器(除了系统时钟之外)中断实现,容易实现毫秒级甚至微秒级定时。但是使用上存在缺陷,不能实现多个任务同时调用,且需占用CPU的1个时钟资源。

1.2 自刻度计算的硬延时函数方案

以上的方案有的是精度不够,有的是应用场合不适用,因此使用空循环实现精确的“硬”延时成为了一个理想的选择。

1.2.1 硬延时函数的设计

实现该延时函数的思想是在每次调用此函数时通过系统提供的sysClk ReteGet()函数和tick Get()函数刻度单位时间定时循环次数。因此在第1次调用时消耗的时间比请求的时间要长很多;当系统时钟频率变化时,需要重新刻度单位时间循环次数。

1.2.2 硬延时函数的实现

硬延时函数的主要实现步骤为

(1)得到要循环的定时参数u,判断是否已有计算过delay Loop值。

(2)如果已有delay Loop值,则直接根据送入参数u和delay Loop双重循环,之后结束返回。

(3)否则根据系统设定的每秒tick数首次递归计算delay Loop。

(4)根据递归结果调整一次循环条件。

(5)根据调整后的循环条件再次递归计算delay Loop,在递归结束后即得到每微秒对应的空循环次数。

其中,delay Loop是要计算和使用的每微秒对应的空循环次数;u为调用函数传递的延时参数(单位为μs);mpt为每秒系统的tick数。

下面给出实现代码。

从实现代码可以看出,如果延时函数是首次调用,那么将会通过递归计算delay Loop,完成刻度过程会消耗稍多的时间;如果不是首次调用,则函数直接通过传入的参数和delay Loop运行空循环完成延时。因此,在测井采集过程还没有开始以前调用一次延时函数时很有必要的,并且为了刻度准确,避免极端情况,在首次调用应传入一个较大的延时参数(如1 s)计算,使delay Loop更接近真实值。

2 相同中断号PCⅠ设备数据采集优化

计算机BIOS技术的发展也使部署在PCI总线上的数据采集卡中断分配有了变化。在使用CT7时,BIOS分配给板载设备(如网卡等)和PCI采集卡设备的中断号都是不同的,不存在中断冲突处理问题。在更新为MIC3392后,为了使PCI总线可以同时挂接更多的设备,BIOS允许不同的PCI设备使用相同的中断号,因此采集卡设备和网络设备有分配到相同中断号的可能性。

2.1 改进前数据采集中断控制

EILog之前采集数据是通过中断号判断数据来源于某块采集卡,并且采集是通过“使能中断-采集数据-关闭中断”流程完成。

根据上面的实现代码可以发现,这样做会导致2个问题:①在关闭中断时会将与该采集卡相同中断的其他设备中断关闭;②采集数据时会将相同中断号的设备发来的中断信号全部响应并且转到中断服务程序。

通过中断号控制采集设备的使能与关闭已不能适用于新硬件的场合。这种在系统层面粗放的控制在没有共享中断的情况下是不会出问题的,在有中断共享的情况下需要更精细的控制,将PCI设备的控制精确到每个独立设备。

2.2 PCⅠ设备配置空间简介

根据PCI规范[3],PCI有3个相互独立的物理地址空间:设备存储器地址空间、I/O地址空间和配置空间。配置空间是PCI所特有的1个物理空间。由于PCI支持设备即插即用,所以PCI设备不占用固定的内存地址空间或I/O地址空间,而是由操作系统决定其映射的基址。

PCI总线通过桥芯片级连。按与CPU总线所隔的桥数目和同一层总线的扫描顺序,从0开始依次编号,扩展最多到256,就是总线号;在指定的局部总线上,按硬件扫描顺序从0开始依次编号,扩展最多到32,就是设备号;在1个多功能PCI设备上,按设备上配置存储区的顺序从0开始依次编号,称为功能号,每个PCI设备最多可以实现8种功能,一般情况只有1个功能。这3个号组合起来就可确定唯一的1个PCI设备以及该设备上的某项功能。通过这3个参数(可组成PCI设备标识符)就可操作PCI设备。

2.2.1 PCⅠ配置空间

PCI总线规范定义的配置空间总长度为256 B,配置信息按一定的顺序和大小依次存放。前64 B的配置空间称为配置头,对于所有的设备都一样,配置头的主要功能是用来识别设备、定义主机访问PCI卡的方式(I/O访问或者存储器访问,还有中断信息)。其余的192 B称为本地配置空间,主要定义卡上局部总线的特性、本地空间基地址及范围等。

2.2.2 PCⅠ配置空间的功能

配置空间中配置头里的寄存器实现了很多功能,这里介绍重要的3类。

(1)设备识别

Vendor ID:厂商ID。

Device ID:设备ID。

Class Code:类代码。共3字节,分别是类代码、子类代码、编程接口。

Header Type:指示Header中从地址10 H到3FH区域的内容格式,同时指示该设备是否为多功能设备。

(2)设备控制

Status:状态寄存器。不同的位代表不同出错状态。

Command:指令寄存器。不同的位代表不同的含义。

(3)基地址配置

Base Address:基地址寄存器。它报告设备寄存器或设备RAM在I/O端口地址空间(或物理地址空间)的地址。

2.3 基于Command寄存器的PCⅠ设备使用优化方案

2.3.1 Command寄存器

Command寄存器在PCI配置头偏移04h的位置,长度为2 B。图1是Command寄存器每一位的说明。

图1 Command寄存器位说明

除第11~15位被保留外,Command寄存器的第0~10位均有对应的功能,表1是对每一位功能说明。

表1 Command寄存器对应各位功能简要说明

2.3.2 改进的采集方案和实现

根据PCI配置空间和表1可以发现,欲单独控制某一PCI设备使能与否,只要将该设备的Command寄存器的第10位进行设置即可,而不需对这一PCI设备对应的中断号使能或者禁止。因此,使用Vx Works系统的PCI寄存器配置函数[4]即可完成采集数据时设备的禁止和使能操作。

(1)Vx Works PCI头配置函数简介

①写PCI配置参数:

pciConfigOut Word(p BusNo,p DeviceNo,p Func No,address,value);

说明:将值value写入到由总线号、设备号和功能号决定的PCI设备address地址的寄存器。

②读PCI配置参数:

pciConfigIn Word(pBus No,pDeviceNo,p Func No,address,(int*)&value);

说明:将由总线号、设备号和功能号决定的PCI设备address地址的寄存器读出到value。

类似地,Vx Works系统还提供有pciConfig Out Long()、pciConfigIn Long()、pciConfigOutByte()、pciConfigInByte()等函数,它们的区别只是读写时的字节多少不同,用法均一样,不再赘述。

(2)PCI设备中断控制代码实现

应用上面的代码即可以实现在使能和禁止采集卡中断的发生而不会影响到与其中断号相同的其他PCI设备,解决了前文提出的在中断共享时使能和禁止PCI设备带来的问题。

3 结 论

(1)通过对采集流程的延时算法升级和PCI采集卡精细控制的改进,升级后的EILog采集前端软件能够很好地运行在新旧采集硬件上,提升了对硬件的兼容性。

(2)硬延时算法和PCI设备控制方法具有通用性。经过测试,改进的软件目前已在ACME2.0测井采集控制平台上正式应用并取得了良好的效果。

[1] 陈江浩,陈文辉,余卫东,等.ACME测井采集控制管理平台开发与应用 [J].石油仪器,2010,24(5):77-79.

[2] 程敬原.Vx Works软件开发项目实例完全解析 [M].北京:中国电力出版社,2005:88-90.

[3] PCI-SIG.PCI Local Bus Specification Revision 3.0 [Z].2002:186-218.

[4] 李贵山,戚德虎.PCI局部总线开发者指南 [M].西安:西安电子科技大学出版社,1997:110-116.

猜你喜欢

采集卡寄存器中断
高精度AD采集卡性能测试及评价方法研究
STM32和51单片机寄存器映射原理异同分析
Lite寄存器模型的设计与实现
血液采集卡存储装置的设计与应用
基于FPGA的中断控制器设计*
面向数控机床的多通道传感数据采集卡设计
跟踪导练(二)(5)
千里移防,卫勤保障不中断
并行高速采样在地震物理模拟采集中的应用
FPGA内嵌PowerPC的中断响应分析