0 概述
PCI总线是一种独立于CPU的部分总线,完结PCI接口的计划一般有两种:选用可编程逻辑器材和专用总线接口器材。选用可编程逻辑器材完结PCI接口的长处是比较灵敏,但其规划难度很高,因为PCI总线对负载要求、传输数据的树立时刻的要求都比较严苛,一起还需求器材内部完结用于装备的各类寄存器,以及完结逻辑校验、地址译码等作业的寄存器。此外,还需参加FIFO、用户寄存器组和后端设备接口等部分。规划这种PCI总线接口会导致将很多的人力、物力投入到杂乱的逻辑验证和时序剖析的作业上,开发周期较长。选用专用接口器材尽管没有选用可编程逻辑器材那么灵敏,但能够有用地下降接口规划的难度,缩短开发时刻。专用接口器材具有较低的本钱和很高的通用性,能够优化数据传输,供给装备空间,具有用于突发传输功用的片内FIFO,供给扩展部分总线等长处,并且许多公司还供给配套的开发东西,运用很便利,开发周期短。 PCI9052是PLX公司开发的低价格PCI总线从方式接口芯片,低功耗,契合PCI2.1规范,供给的部分总线(Local Bus)可经过编程设置为8/16/32位的(非)复用总线。PCI9052供给的部分总线不光可编程,并且与PCI总线的时钟彼此独立运转,可完结异步操作,总线操作主动完结时序同步。两总线的异步运转便利了高、低速设备的兼容。
1 硬件规划
为了充分运用硬件的有用资源,该多功用适配卡不只要完结与CAN总线进行通讯,还具有A/D、D/A及I/O功用,完结对CAN通讯和数据收集等功用。PCI9052有5个地址映射空间,要完结这些功用,经过PCI9052来衔接是能够满足要求的。I/O选用IO映射空间,CAN、A/D和D/A选用Memory地址映射空间,也可都选用Memory方法,这些地址空间的装备是在EEPROM中进行装备的。依据采样精度要求,A/D芯片选用的是16位单通道并行通讯的AD976芯片,转化时刻10us,为了完结多通道输入,须在模仿输入端加一多路开关MAX308ESE。D/A芯片选用的是16位8通道芯片DAC7644E,转化时刻10us。CAN操控芯片选用PHLIPS的SJA1000,一起须接一CAN驱动芯片82C250。别的,PCI9052需求一片EEPROM芯片用来存储PCI9052的初始化装备参数。可与PCI9052匹配的芯片有Microchip Technology 1K 93AA46、93C46B、93LC46B,还有其他厂商的。在挑选EEPROM时必定可参阅PCI9052的引荐阐明,这儿选用的是1K的93LC46B。其原理结构如图1:
2 软件规划
软件规划包含WDM驱动程序、API接口函数和运用程序规划,这儿首要介绍驱动程序规划。关于WDM驱动程序,要取得正确的地址分配值,有必要正确地设置装备参数,9052内部的装备寄存器是经过外部串行E2PROM上电加载的。9052会主动依据该E2PROM的状况来决议其内部寄存器的值。假如E2PROM不存在(此刻E2PROM和9052衔接的数据引脚应加上拉电阻或其内部无有用值,9052会将其内部寄存器装备为缺省值。值得一提的是,假如E2PROM内部没有烧写为有用值时,应保证其开端48位为全“1”;不然,体系上电时可能会发生过错。9052有5个本地空间,用户可依据实际需求进行相应的装备。当将本地空间装备成I/O时,对该空间的读/写操作只能单次进行。装备成存储器空间,用户会有多种接入方式,可大大进步接入速度。
该多功用设配卡驱动程序的开发选用支撑Windows2000的WDM驱动程序。开发东西选用Visual C++6.0、Win2000 DDK及DriverStudio2.7。选用DriverStudio导游东西生成驱动程序结构和调试程序,在运用导游时需正确填写PCI Vendor ID和PCI Device ID,不然,在装置驱动程序时查找不到正确的硬件设备,导致无法装置驱动。
因为WDM驱动程序运转在体系的内核态,编写非常杂乱,在运用程序和硬件进行数据交换中,能够选用几种方法进行通讯:I/O操控方法、直接读写方法、中止方法和DMA方法。因为CAN总线的最高速率是1Mbps,所以咱们选用IO操控操作完结数据的传送,在驱动程序差遣例程中完结这些操作,在API函数中供给这些操作的接口,运用程序可运用规范Win32 API函数DeviceIoControl来数据读写,也能够选用DriverStudio导游东西发生的DeviceControl来操作,在这儿咱们将它集成到对应的API函数里,生成相应的静态库或许动态衔接库的方式供给给运用程序。
界说了7个IO操控代码:
IOCTL_HIL100_READ_IO_DATA(用于读I/O口数据)
IOCTL_HIL100_READ_AD_DATA(用于读AD数据)
IOCTL_HIL100_READ_DA_DATA (用于读DA数据)
IOCTL_HIL100_READ_CAN_DATA(用于读CAN数据)
IOCTL_HIL100_WRITE_IO_DATA(用于写I/O口数据)
IOCTL_HIL100_WRITE_DA_DATA(用于写DA数据)
IOCTL_HIL100_WRITE_CAN_DATA(用于写CAN数据)
这些操控代码在驱动程序的DeviceControl(KIrp I)函数中调用,如下程序所示:
NTSTATUS PCIDriverDevice::DeviceControl(KIrp I)
{
NTSTATUS status;
switch (I.IoctlCode())
{
………………………………………
case IOCTL_HIL100_READ_IO_DATA:
status = IOCTL_HIL100_READ_IO_DATA _Handler(I);
case IOCTL_HIL100_WRITE_IO_DATA:
status = IOCTL_HIL100_WRITE_IO_DATA _Handler(I);
case IOCTL_HIL100_WRITE_DA_DATA:
status = IOCTL_HIL100_WRITE_DA_DATA _Handler(I);
case IOCTL_HIL100_READ_AD_DATA:
status = IOCTL_HIL100_READ_AD_DATA _Handler(I);
default:
status = STATUS_INVALID_PARAMETER;
break;
}
………………………….
}
在该函数进行驱动中相应的数据处理与传递,包含从内存中读上层运用程序发送下来的数据或将AD、CAN等外设传递上来的数据送到上层运用程序。
API函数首要供给了PCI卡的开关,A/D、D/A、I/O的读写函数,CAN的设置、读写,中止事情音讯函数等。API函数与以上操控代码相关联,传递数据和操控参数。如下程序所示:
bool WriteDataToIO(unsigned char data)//写数据到IO口
{
……
ULONG BytesReturned;
if (!DeviceIoControl(hHIL100, IOCTL_HIL100_WRITE_IO_DATA, &data, 1,
NULL, 0, &BytesReturned, NULL))
……
}
bool ReadDataFromIO(unsigned char *data) //从IO口读数据
{
……
ULONG BytesReturned;
if (!DeviceIoControl(hHIL100, IOCTL_HIL100_READ_IO_DATA, &data, 1,
data, 1, &BytesReturned, NULL))
……
}
bool WriteDataToDA(unsigned short control,unsigned short freq[4])//写数据到AD
{
……
ULONG BytesReturned;
unsigned short pData[16];
pData[0]=control;
pData[1]=freq[0];
pData[2]=freq[1];
pData[3]=freq[2];
pData[4]=freq[3];
if (!DeviceIoControl(hHIL100, IOCTL_HIL100_WRITE_DA_DATA, pData, 10,
NULL, 0, &BytesReturned, NULL))
……
}
bool ReadDataFromAD(unsigned short address[8],unsigned short data[8])
{ //从AD读数据
……
ULONG BytesReturned;
if (!DeviceIoControl(hHIL100, IOCTL_HIL100_READ_AD_DATA,address,16,
&data,16, &BytesReturned, NULL))
……
}
bool ReadDataFromDA (unsigned char address,unsigned short *data)//从DA读数据
{
……
ULONG BytesReturned;
if (!DeviceIoControl(hHIL100, IOCTL_HIL100_READ_DA1_DATA,&address,1,
data, 2, &BytesReturned, NULL))
……
}
将这些接口函数生成动态链接库的方式,供上层运用程序调用。
3 结束语
因为PCI总线的高速特性,使其被广泛运用于高速数据收集体系和数据传输通讯体系中,有用地处理了实时收集、实时传输和实时存储等问题。而PCI总线操控器专用芯片的呈现则缩短了PCI总线硬件设备的开发周期,使得硬件设备的可靠性和稳定性都有了较大的进步。在开发过程中,特别关于高速采样及实时严厉的体系,咱们完结了对该体系高效率的操作特性,该研讨有用的处理了高速实时收集、实时传输和实时存储等的驱动问题。一起该PCI多功用CAN适配卡既完结了CAN总线通讯功用,一起也完结了多路通道的数据收集和相应操控。