阅读:1202回复:9
求教关于OEMInterruptxxx函数(wxl_50685330请进)
我用的板子是x86架构的,我现在正在写单片驱动,有几个问题想请教大侠:
(1)如果我想在OEMInterruptxxx函数中实现对我的设备开/关中断的话,那么我是不是应该在这个c文件(好像是cfwpc.c)中定义一个全局变量来保存我设备的地址啊?(这个地址应该可由InterruptInitialize函数传递) 这几个函数是: OEMInterruptEnable, OEMInterruptDisable,OEMInterruptDone (2)如果我不想在我的驱动中通过调用LoadIntChainHandler来安装ISR, 而是想在OEMinit函数中利用HookInterrupt来安装我的ISR,那么这时我的ISR函数是不是可以直接定义在cfwpc.c文件里面?(或者定义在另一个文件中)。 (3)续问题(2),如果这样的话,那么我的ISR和我的驱动之间怎么进行数据通信啊?(我知道在ISR中最好不要进行数据处理,我说的是如果需要的话) 我的问题是不是很多?很罗嗦?? :mad: [编辑 - 12/3/04 by wwei_wang] |
|
|
沙发#
发布于:2004-12-06 09:19
如果只是实现在ISR中设备的开关的话,只是设置GPIO的电平高低就行了吧,就不用写IST了,直接在ISR中就解决了,OemInterruptEnable这样的函数也不用了,只是处理个GPIO中断
|
|
板凳#
发布于:2004-12-06 09:33
谢谢楼上兄弟,不过你可能误会了。
其实我的IST中有很多事情要做的。我的问题的出发点是如何使用和实现OEMInterruptxxx以及用HookInterrupt这些函数,因为我想用这种方法来做,顺便练练手。 |
|
|
地板#
发布于:2004-12-06 09:33
谢谢楼上兄弟,不过你可能误会了。
其实我的IST中有很多事情要做的。我的问题的出发点是如何使用和实现OEMInterruptxxx以及用HookInterrupt这些函数,因为我想用这种方法来做,顺便练练手。 还请多多指教! :D |
|
|
论坛版主
|
地下室#
发布于:2004-12-06 13:17
1.设备地址保不保存要看你的实际需要了,如果你清楚每个设备的地址,可以直接用。
2.是 3.要交换数据可以通过一个全局的缓冲区,比如drvier_global 4.不是很 |
|
5楼#
发布于:2004-12-07 09:10
哈哈,谢谢wxl_50685330大哥的解答,问一个很菜的问题:
前面你说,我的ISR和我的驱动之间要交换数据可以通过一个全局的缓冲区,比如drvier_global,那么这个全局的缓冲区怎么定义啊?在我的驱动和ISR中分别怎么使用啊? :P |
|
|
论坛版主
|
6楼#
发布于:2004-12-07 13:24
:)
可以在你的CONFIG.bib里面预留一块出来作为公共缓冲区。比如 xxx 8C020000 00001000 RESERVED 记住这个地址,在驱动中和isr中可以访问它来交换数据。不过注意访问时需要先映射(如果isr是写在kernel的可以不映射) |
|
7楼#
发布于:2004-12-07 13:56
谢谢wxl_50685330大哥,不过我还得罗嗦一下,呵呵。
你看全局共享缓冲区是不是可以这么实现? 假设我的CONFIG.bib里面是这样设置的: NK 80220000 009E0000 RAMIMAGE RAM 80C00000 01000000 RAM xxx 8C020000 00001000 RESERVED ;假设该区域没有被占用 在我驱动的yyy_Init()中 LPVOID lpAddress = 0x8C020000; LPVOID pp = VirtualAlloc( lpAddress, 0x1000, MEM_COMMIT, PAGE_READWRITE); 如果成功的话,那么我就可以利用pp直接读写那个区域中的数据。 而在OAL层的ISR里面我可以直接利用0x8C020000读写其中的数据,如 PUCHAR p=0x8C020000; UCHAR a = *p; 大哥,我这么做对吗?请你指教, :P |
|
|
论坛版主
|
8楼#
发布于:2004-12-07 14:01
对头,对头!!!!!!!!!!!!!!:)
|
|
9楼#
发布于:2004-12-07 14:29
非常感谢wxl_50685330大哥以及chang_nicolas兄弟的无私援助,分已给出,请两位笑纳! :P
|
|
|