首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 嵌入开发 > 驱动开发 >

硬件可以事件通报方式与驱动程序通信吗

2013-09-11 
硬件可以事件通知方式与驱动程序通信吗有要求说:硬件内发生某些事件时能通知驱动程序,比如缓冲区数据满的

硬件可以事件通知方式与驱动程序通信吗
    有要求说:硬件内发生某些事件时能通知驱动程序,比如缓冲区数据满的时候通知驱动程序取数据等等。敢问各路高手,这种要求是否可以实现?如何实现?据我目前所能做到的就是靠驱动程序轮询硬件“有什么事吗”这样的方式来解决,但是并非领导的本意啊,还请高手指点才行,万分感激!
[解决办法]
硬件产生中断啊,然后再查询。
[解决办法]
有中断了,驱动就会收到呀。
[解决办法]
不知道楼主是什么OS,比如说Windows CE。

驱动在Init阶段,可以创建一个IST(中断服务线程), 在IST中完成使能中断,创建事件,获取系统中断号并关联先前创建的事件以及实际的中断处理等工作。

在IST中会有一个死循环,在循环中等待一个事件。如:


for (;;)
{
    WaitForSingleObject(ResetButtonIntrEvent, INFINITE);

    // 实际的中断处理(代码省略)
        
    // 通知系统中断处理已经完成,重新使能该中断
    InterruptDone(ResetButtonSysIntr);
}


在WinCE系统中,有一个异常向量表,相当于通常所说的中断向量表。这样当发生物理中断时,系统会自动跳转到相应的异常处理程序(ISR)如IRQHandler。
         
        IMPORT  UndefException
        IMPORT  SWIHandler
        IMPORT  PrefetchAbort
        IMPORT  DataAbortHandler
        IMPORT  IRQHandler
        IMPORT  FIQHandler
        EXPORT  VectorTable

VectorTable
        DCD     -1                              ; reset
        DCD     UndefException                  ; undefined instruction
        DCD     SWIHandler                      ; SVC


        DCD     PrefetchAbort                   ; Prefetch abort
        DCD     DataAbortHandler                ; data abort
        DCD     -1                              ; unused vector
        DCD     IRQHandler                      ; IRQ
        DCD     FIQHandler                      ; FIQ



在异常处理程序,如IRQHandler函数中通常是屏蔽中断,然后调用OEMInterruptHandler函数获取中断源(物理中断号IRQ),然后根据IRQ返回一个系统中断号,IRQHandler函数根据返回的系统中断号调用OEMNotifyIntrOccurs设置与该SYSINTR(系统中断号)相关联的事件为有效状态。

这个时候上面IST中的WaitForSingleObject(ResetButtonIntrEvent, INFINITE);事件有效,这个时候可以执行死循环中下面的代码。也就是实际处理,比如楼主的“缓冲区数据满”。处理完之后,继续Wait下一次事件。因为WaitForSingleObject的第二个参数是INFINITE,所以平时IST是不进行实际工作的,只在这里一直等待中断的通知。中断没有进行事件通知,IST就什么都不做。
[解决办法]
USB设备硬件这边如果缓冲区数据满的时候,通知驱动程序去取数据
他要求硬件设备主动通知驱动程序

这么说硬件会主动发出一些东西来告诉你缓冲区满吧?而不是被动的等你查询
[解决办法]
WINDOWS XP是没有的

热点排行