入门求助:2440的EINT中断驱动

kit   2009-9-14 16:29 楼主
准备实现EINT中断驱动,所以参看了SMDK2440中Userkey驱动。

在Userkey.cpp文件中,有如下函数
BOOL InitInterruptThread()
{
    ...
    KeyEvent = CreateEvent(NULL, FALSE, FALSE, NULL);   
    if (!KeyEvent)
            return FALSE;
    bSuccess = InterruptInitialize(SYSINTR_USER_KEY, KeyEvent, NULL, 0);
    ...
}

请问InterruptInitialize函数中第一个参数SYSINTR_USER_KEY是怎么和硬件中断联系起来的?

回复评论 (4)

是一个宏定义,在intoal.h中的吧,具体的文件名忘了,代码很简单,一看就明白
点赞  2009-9-14 17:02
1.HC->hDMAREvent = CreateEvent(NULL, FALSE, FALSE, NULL);
定义一个事件
  
2.获得逻辑中断号   KernelIoControl( IOCTL_HAL_REQUEST_SYSINTR, &dwDMAIrq, sizeof(DWORD), &pHC->dwDMASysIntr, sizeof(DWORD), &dwRetSize )   
3.将中断与事件绑定InterruptInitialize(pHC->dwDMASysIntr,pHC->hDMAISTEvent,0,0)  
驱动中中断就这三个步骤
点赞  2009-9-14 17:51
SYSINTR_USER_KEY是逻辑中断号,是在PLATFORM\SMDK2440\INC\oalintr.h中定义的,在PLATFORM\SMDK2440\KERNEL\HAL\ARM\armint.c中与相应硬件中断关联。
点赞  2009-9-14 21:11
关于中断的问题 可以参考下这篇文章

http://blog.chinaunix.net/u2/83682/showart_1929359.html

里面分析的很不错.
点赞  2009-9-14 22:01
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复