数据采集控制卡硬件I/O控制原理

时间:2008-11-12

  卡的运作均是通过寄存器的帮助而进行的,寄存器分成控制寄存器、状态寄存器两种,负责不同的功能,一个为Input,一个为Output。寄存器在卡上就是某一个芯片的控制中心所在,当利用程序下达询问的指令时,某一个寄存器就会将数据传回(实际是放在总线上供CPU读取);同样地,当程序欲控制芯片作某一个操作时(例如更改设置,或是输出信号),也是将指令写入某一个规定的寄存器,该寄存器的值一经改变,就反应到真实的硬件操作上。
 
  卡的寄存器的存取一般都是从之前提到的地址开始存储的,称为基地址,寄存器的存储通常也是以一个字节为单位,如果卡片上的寄存器较多的话,就会使用到比较多的字节,卡的功能越复杂,用到的寄存器就越多。因此同一台计算机上不同的卡片使用的基地址均不相同。所以实际的控制程序必须和寄存器打交道,要取得卡片的任何状态,必须读取寄存器中的数值;而要控制状态时,也是写人控制的数值到寄存器,因此程序的对象就是寄存器,一片卡可能会有很多寄存器,实际的数目由功能来决定,功能越多,则使用到的寄存器数量也必定越多。
 
  现在很多卡的厂商考虑到用户的方便雨将原本需要较复杂的寄存器读写过程包装起来,变成所谓的函数,工程师只知道呼叫某一个函数,就可以成功地控制或是读取信息,其他的细节就由厂商的DLL或是OCX代劳了。函数没有看到寄存器的指定,多也就只有地址和中断的设置,函数使用起来更精简。
 
  当然硬件寄存器读写要有一定的方法,读写的方法与操作系统有关。在传统DOS环境下(不包含Windows中DOS虚拟机),程序运行于CPU的Ring0级,对硬件拥有完全的控制权,可以很容易地实现对时间的准确控制。而Windows 95/98使用抢占式多任务机制,系统接管全部硬件资源,程序在CPU的Ring3级上运行,无法直接与硬件打交道。Windows 98下实现对硬件资源访问的方便有:
 
  (1)利用Windows提供的各个段选择符标号可直接访问内存
 
  (2)可用VC斗+提供的函数直接访问硬件上的内存和端口,如int outp(unsigned,int)。
 
  (3)嵌人汇编访问硬件上的内存和端口。
 
  但在较的系统中(如Windows NT,Windows2000)这样的做法也是不行的,这是由于Windows操作系统是一个受保护的系统,随便下达硬件控制指令的话,将会危害到整个系统的稳定性,硬仵的操作通常是利用微软的SDK(Software Development Kit)和DDK(Device Development Kit)来完成。
 
  在WindowsNT下,由于对I/O端口的直接操作被屏蔽,普通用户只能借助一定的驱动开发工具来开发设各的驱动程序,实现用户应用程序和硬件之间的通信。所以设各的驱动程序的作用函数供工程师使用来控制硬件,而不涉及操作系统底层编程。现在有各种设备驱动程序专用开发软件,如Windriver能在很短的时间内开发出高效的设备驱动。
 
  程序语言例如VisualBasic、Delphi、C++等等常用的语言,都可以开发应用程序,其中Visual Basic没有提供直接访问底层硬件的控件和方法本身的程序无法直接控制到适配卡,必须通过DLL或是额外OCX控件的协助才行,通过DLL或是OCX,控制程序码就经过层层的转译,一直到卡片上的寄存器,而检测程序代码则经相反的管道将状态传回到我们所写的程序里。但如果由基础的程序一直写到硬件卡片控制的话,将会使得工程师花费太多的时间而无法顺利完成任务。所以现在就出现了组态软件如WINCC,控制硬件通信不需要涉及底层,只需要设置相应的参数就可以了,大大减轻了工程师的负担,使工程师主要精力花在界面和工艺上,特别适合于工程应用。

  



  
上一篇:数据采集控制卡的接口的控制方式
下一篇:ADC数据转换

免责声明: 凡注明来源本网的所有作品,均为本网合法拥有版权或有权使用的作品,欢迎转载,注明出处。非本网作品均来自互联网,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。

相关技术资料