当前位置: 代码迷 >> 驱动开发 >> 硬件可以事件通报方式与驱动程序通信吗
  详细解决方案

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

热度:29   发布时间:2016-04-28 10:22:03.0
硬件可以事件通知方式与驱动程序通信吗
    有要求说:硬件内发生某些事件时能通知驱动程序,比如缓冲区数据满的时候通知驱动程序取数据等等。敢问各路高手,这种要求是否可以实现?如何实现?据我目前所能做到的就是靠驱动程序轮询硬件“有什么事吗”这样的方式来解决,但是并非领导的本意啊,还请高手指点才行,万分感激!

------解决方案--------------------
硬件产生中断啊,然后再查询。
------解决方案--------------------
有中断了,驱动就会收到呀。
------解决方案--------------------
不知道楼主是什么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