thanfur
驱动牛犊
驱动牛犊
  • 注册日期2007-10-27
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分36分
  • 威望268点
  • 贡献值0点
  • 好评度39点
  • 原创分0分
  • 专家分0分
阅读:1736回复:5

关于pci卡中断使用的疑惑

楼主#
更多 发布于:2007-10-27 20:50
  最近在做个PCI数据采集卡的驱动,数字量输入.卡上有个MCU,能够定时的检查输入的状态.如果输入的数字信号有改变就会产生一中断.
  现在我的ISR能检查到并响应因为输入改变引起的这个中断.我也能通过应用层随时发IOCONTRL下去读取输入状态.
  我现在想实现这样一个模型,通过ISR通知应用程序发IOCONTRL下去访问端口的输入状态,这样不用我在应用层不停的发包下去访问.
  谢谢,有懂的大虾们指点下.
thanfur
驱动牛犊
驱动牛犊
  • 注册日期2007-10-27
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分36分
  • 威望268点
  • 贡献值0点
  • 好评度39点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2007-10-27 20:53
补充一个问题,当我的设备初始化完毕,可以接受中断了.开中断的操作放在哪里比较好?
xp4105
论坛版主
论坛版主
  • 注册日期2006-04-02
  • 最后登录2014-03-29
  • 粉丝1
  • 关注0
  • 积分905分
  • 威望570点
  • 贡献值1点
  • 好评度162点
  • 原创分1分
  • 专家分0分
板凳#
发布于:2007-10-29 11:17
一般在初始化结束就可以了
时光如流水 抓紧时间实现自我价值
thanfur
驱动牛犊
驱动牛犊
  • 注册日期2007-10-27
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分36分
  • 威望268点
  • 贡献值0点
  • 好评度39点
  • 原创分0分
  • 专家分0分
地板#
发布于:2007-10-29 17:26
谢谢 啊 ,今天按你的说的地方试了下,效果不错
还有第一个问题,哪位朋友指点下
xp4105
论坛版主
论坛版主
  • 注册日期2006-04-02
  • 最后登录2014-03-29
  • 粉丝1
  • 关注0
  • 积分905分
  • 威望570点
  • 贡献值1点
  • 好评度162点
  • 原创分1分
  • 专家分0分
地下室#
发布于:2007-10-31 09:19
你说的第一个问题没明白。
中断来了,你就读中断状态寄存器就oK了啊,
再判断是啥中断,
然后应用程序挂上。
时光如流水 抓紧时间实现自我价值
thanfur
驱动牛犊
驱动牛犊
  • 注册日期2007-10-27
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分36分
  • 威望268点
  • 贡献值0点
  • 好评度39点
  • 原创分0分
  • 专家分0分
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完成期间被阻塞了,不能响应其他要求
造成资源浪费
所以我想换个更好的方法
能提示我下吗,最好把关键的代码写下
游客

返回顶部