对于即插即用型设备,系统都是动态分配系统资源的,如何获取系统分配给这些内存单元的地址是VxD驱动程序需要解决的首要问题。在PCI的配制周期机制中,主桥路提供了两个寄存器用于对配置空间的操作,第一个是配置空间基地址寄存器CANFIG-ADDRESS,双字地址是CF8H,第二个是配置空间数据缓冲寄存器CONFIG-DATA,地址是CFCH,对配置空间的操作是通过输入一个值到设备的CONFIG-DATA寄存器,在此之后如果对 CONFIG-DATA寄存器进行读写操作,PCI控制器就会将CONFIG-ADDRESS寄存器中的值转换成PCI总线上所需要的配置周期。
5.2 VxD与应用程序的通讯
VxD运行在系统Ring0级,处理系统底层设备,应用程序利用其提供的接口服务来处理硬件,Windows允许VxD和应用程序之间进行双向通信。
在Windows中,Win23应用程序对VxD的通讯方法只有一种,利用设备输入输出控制函数DeviceIoControl()来实现,利用 CreateFile()函数加载VxD获得VxD设备句柄,如果调用成功,Win32应用程序就可以调用DeviceIoControl()程序与 VxD进行通讯。
VxD的命令代码需要根据其固定格式进行定义,程序中共定义了2个命令代码,分别用于对双口静态RAM的读写操作和VxD对Win32应用程序异步过程调用时回调函数地址传输。
在VxD中与DeviceIocontrol()函数相对应的是OnW32DeviceIocontrol()函数,他 W32_DeviceIoControl控制信息,当Win32应用程序动态加载Vxd,动态卸载VxD以及调用DeviceIoControl函数时, OnW32DeviceI0control()函数被触发,
在这个函数的参数中,也包括应用程序调用VxD的命令代码,VxD根据他们的值进行相应的处理。
另外,由于采用中断方式对DSP处理的数据进行读取,所以中断事件发生时, 需要VxD异步通知Win32应用程序,设计时在应用程序中创建了两个线程,一个用于等待中断事件,当中断事件发生时,读取DSP送到双口RAM中数据,另一个用于显示数据。
5.3 访问I/O以及内存
在S599的串行存储器中,将PCI配置基础地址寄存器BADR1配置为4k,16位寄存器空间,BADR2设置为8个自己的I/O空间,基地址寄存器BADRO对应S5933内部16个双字节PCI总线操作寄存器,当利用查找方式获得配置空间数据时,即可得到存储器空间基地址和I/O端口基地址。
5.4 处理中断
当DSP处理数据写满2k的存储器空间时PCI将产生中断,中断信号从配置空间寄存器中读出,PCI设备分配的硬件中断信号是共享中断,必须使用类VsharedHardwareInt的中断通知事件处理函数OnSharedHardwareInt()。
6 应用程序的编写
6.1 人机接口模块
使用VC编写基于PCI总线动态控制器板卡的应用程序,主要利用设备输入输出控制函数DeviceIoControl(),将界面上对数控机床的各个参数转换数据送到底层的VxD进行通信。
6.2 解决程序模块
对从应用程序中人机界面模块中传入的参数进行解释,完成将上位机输入信息解释成下位机DSP能够执行的语言,程序解释模块固化到PCI板卡的DSP片内ROM中。
6.3 PLC接口模块
实现PCI控制卡与现场总线上的PLC模块之间的通讯,由于CAN总线的特点是可以将对PLC模块的控制作为一个应用模块做在PCI控制卡上,从而实现了模块化控制。
6.4 插补模块
在加工信息解释的基础上,调用运动学算法模块,将运动平台在操作空间的运动转变为空间的伺服运动,实时生成刀具的运动轨迹,并将各伺服轴的移动指令送给伺服模块。
6.5 运动算法模块
主要为伺服驱动提供逆解、速度映射算法,为加工状态的实时仿真及精度补偿提供正解算法。
7 结语
采用PC+动态控制卡模式,实现数控系统的放开式设计方法开发周期短,系统可靠性高,便于机床功能扩展,由于软件采用了模块化,同时基于组件技术,界面友好,操作方便,进行软件升级以及用户进行二次开发都比较方便。
本文关键字:动态 DSP/FPGA技术,单片机-工控设备 - DSP/FPGA技术