阅读:1736回复:5
关于pci卡中断使用的疑惑
最近在做个PCI数据采集卡的驱动,数字量输入.卡上有个MCU,能够定时的检查输入的状态.如果输入的数字信号有改变就会产生一中断.
现在我的ISR能检查到并响应因为输入改变引起的这个中断.我也能通过应用层随时发IOCONTRL下去读取输入状态. 我现在想实现这样一个模型,通过ISR通知应用程序发IOCONTRL下去访问端口的输入状态,这样不用我在应用层不停的发包下去访问. 谢谢,有懂的大虾们指点下. |
|
沙发#
发布于:2007-10-27 20:53
补充一个问题,当我的设备初始化完毕,可以接受中断了.开中断的操作放在哪里比较好?
|
|
板凳#
发布于:2007-10-29 11:17
一般在初始化结束就可以了
|
|
|
地板#
发布于:2007-10-29 17:26
谢谢 啊 ,今天按你的说的地方试了下,效果不错
还有第一个问题,哪位朋友指点下 |
|
地下室#
发布于:2007-10-31 09:19
你说的第一个问题没明白。
中断来了,你就读中断状态寄存器就oK了啊, 再判断是啥中断, 然后应用程序挂上。 |
|
|
5楼#
发布于:2007-11-01 20:39
关于第一个问题,我可能没讲清楚.我把代码贴出来
我需要在中断发生后读硬件 我是这样实现的 DLL wait(`,timeout,``) // { DeviceIoControl(IOCTL_XXX``inputbuffer,4,outputbuffer,4,``); `}`` ```````` SYS switch (irpStack->Parameters.DeviceIoControl.IoControlCode) { caseIOCTL_XXX: KeWaitForSingleObject //阻塞直到DPC激活 读寄存器值到outputbuffer } isr() {``` calldpc ```` } dpc() { KeSetEvent } 不过调用者线程在等待I/O完成期间被阻塞了,不能响应其他要求 造成资源浪费 所以我想换个更好的方法 能提示我下吗,最好把关键的代码写下 |
|