在这里不得不说一下,真是万事开头难啊,简单的流驱动,以及中断弄了这么久,真是折磨人啊
在总结之前,先写一下自己在wince6.0上实现按键外部中断的过程:
1.新建一个流驱动,下载到板子,验证是否加载成功
2.
a.查找出空闲的物理中断号,并宏定义。
b.实现OEM层的一些函数,例如:
BspIntrEnableIrq函数:初始化配置并使能一个外部中断引脚,并绑定一个自己任意用的空闲的引脚到一个指定的物理中断号(OalGpioRegisterIntr就实现了该功能)
还有BspIntrDisableIrq,和BspIntrDoneIrq函数、
3,定义逻辑中断号,并绑定到物理中断号,通过BspIntrInit()函数(在intr.c里)。()静态指定
4.定义两个线程函数,一个初始化中断线程函数,一个中断处理函数,初始化启动中断线程函数在xxx_init中调用。
初始化中断线程函数:
a,创建事件
b,获得逻辑中断号
c.将前面两者关联起来
d,调用InterruptDone函数
e.创建并启动中断线程
总结:
中间碰到的问题:
1,,将驱动加载到系统后,引脚配置初始化一直不成功
原因:物理中断号被系统其他地方用过了,要重新指定空闲的物理中断号(师傅指导下)
2,改过来后,加载试验,发现按键只有按一次才有效,第一次才能进中断,第二,三次都没反应
原因:InterruptDone函数的参数弄错了,应该是逻辑中断号,结果被弄成了物理中断号。该死。
这样在执行一次中断后,系统没有打开中断引脚,让他进入下一次中断。