分类: WINDOWS
2008-11-14 21:20:08
在初始化函数中
首先要 要进行地址映射 就是分配地址 然后映射好
VirtualAlloc VirtualCopy 就是由这两个函数来进行的。VirtualAlloc 这个是在用户空间分配一段地址,然后用VirtualCopy 把用户空间的地址和内核空间的地址连接上,可以直接用内核空间的逻辑地址 也可以用物理地址向右移动八位
比如
VirtualCopy((PVOID)v_pIOPregs, (PVOID)(IOP_PHY_BASE >> 8), sizeof(IOP_BASE), PAGE_PHYSICAL | PAGE_READWRITE | PAGE_NOCACHE)
然后就是中断的初始化 也就是开中断 以及设置中断触发的方式等
物理中断和逻辑中断相关联KernelIoControl (可以很多个物理中断对应一个逻辑中断,这个是5.0后的动态映射4.2是静态映射,动态映射代码要简单的多,静态是通过OEMOEMInterruptHandler)
逻辑中断和事件相关联 InterruptInitialize 这个地方使能中断
然后就是创建事件 CreateThread
(这个是在IST中的,也就是说在IST中等待,事件触发后就唤醒IST,再游IST做相应的工作,比如可以点亮信号灯,是别的等待线程触发,等)
然后就是等待事件被触发 (事件触发之后 如果一个物理中断对应一个逻辑中断 就可以进行相应的中断处理 如果一个逻辑中断对应多个物理中断就需要判断到底是哪个中断被触发 然后在进行相应的处理,这只是一般的按键驱动这样处理因为比较简单)
最后调用 InterruptDone完成