wisejun
驱动牛犊
驱动牛犊
  • 注册日期2003-06-16
  • 最后登录2004-01-06
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:916回复:1

怎么改善isa板卡驱动的效率?

楼主#
更多 发布于:2004-01-05 11:02
我用的ISA总线数据采集卡为12位16路带硬件锁相环(PLL)的同步数据采集卡,采用4片AD公司的四通道12位同步数据采集芯片AD7874,全部四通道的采样频率为29kHz,占用两个中断号,用跳线设置为IRQ10和IRQ11,占用的I/O端口地址为0x280至0x29f。
驱动程序开发用的WinDriver5.04,已经可以使用了,但是就是效率存在很大的问题:仅仅打开板卡和启动采集就占去了60%的CPU!这还不包括读数(其实加上读数也差不多),所以怀疑是不是中断服务程序编制的问题。原来我在11号中断服务程序中加了数据的转换程序,后来把这个删去了,占用资源居然上去了,占到了95%以上!!!
我把WinDriver生成的代码封装成了一个dll,其主要部分包括:
①打开WinDriver设备(即ISA总线数据采集卡)
②对数据采集卡上芯片及中断初始化
③改写中断线程函数,加入端口操作
借助数据采集卡上的硬件电路,使数据采集卡在每两个工频周波所(由于硬件设计的原因,也可以设计为每个工频周波产生一次中断)产生一次IRQ10中断,两次中断的间隔由数据采集卡上的8254计数测得时间间隔,即可得到工频频率。要求对采集信号进行FFT分析,在每个周波内等间隔(锁相环实现)采样32点,产生32次IRQ11中断信号。改写了的两个中断线程功能为:IRQ10中断线程的功能为,清中断标志位,读8254计数器的值,清8254计数器,中断返回;IRQ11中断线程的功能为,将所有AD通道的采样值读入。
④关闭WinDriver设备
我想实现的是6路信号的采集,每一路的采样率为1600S/s,通过中断方式来采集应该不会占用太多CPU资源啊?我的机子是P3 667,392M,Win2K+sp1。
请各位大虾牛人出手相助,共同探讨,江湖救急啊~~~


用WinDriver开发过ISA卡的朋友,请加我为好友,大家一起进步,共同提高!QQ:10138347 email:wujunboy@sina.com
wisejun
驱动牛犊
驱动牛犊
  • 注册日期2003-06-16
  • 最后登录2004-01-06
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2004-01-05 11:02
觉得太奇怪了!昨晚通过做实验确定了是dll的问题,现在觉得这个推论也不见得正确。
理由是:
昨晚用最小系统的vi测试dll时,发觉即使vi不数取数据,也有60%,所以怀疑到dll的效率问题。同时,这个结论也受到vc程序的支持。因为vc的程序读数显示也占到了60%。
但是今天进一步实验的时候发觉,把中断服务程序里的数据转换部分去掉以后,同样的测试vi,竟然到95%了。然后做更极端的实验,把中断服务程序变成一个空程序,就是没有任何内容,vi调用占到了60%;但,用vc程序调用一个此类的dll时,几乎不占用CPU。
用WinDriver开发过ISA卡的朋友,请加我为好友,大家一起进步,共同提高!QQ:10138347 email:wujunboy@sina.com
游客

返回顶部