写中断Callout的时候遇到了一了问题,请教各位大虾了,先谢谢了!
QNX移植的目标是ep9315,它有两个中断寄存器,
在写中断callout的时候,查阅了一些网上的资料,好像有两种方法:
第一种
patch_intr:
stmdb sp!,{r4,lr}
add r4, r0, r2
mov r0, #size1
ldr r1, base1
bl callout_io_map
CALLOUT_PATCH r4, r0, r1, r2, ip
mov r0, #size2
ldr r1, base2
bl callout_io_map
CALLOUT_PATCH r4, r0, r1, r2, ip
ldmia sp!,{r4,pc}
…
CALLOUT_START(interrupt_id_ep9315 , 0, patch_intr)
/*
- Get the address of the interrupt registers (patched)
*/
mov ip, #0x000000ff
orr ip, ip, #0x0000ff00
orr ip, ip, #0x00ff0000
orr ip, ip, #0xff000000
mov r3, #0x000000ff
orr r3, r3, #0x0000ff00
orr r3, r3, #0x00ff0000
orr r3, r3, #0xff000000
…
第二种:
patch_intr1:
stmdb sp!,{r4,lr}
add r4, r0, r2
mov r0, #size1
ldr r1, base1
bl callout_io_map
CALLOUT_PATCH r4, r0, r1, r2, ip
ldmia sp!,{r4,pc}
patch_intr2:
stmdb sp!,{r4,lr}
add r4, r0, r2
mov r0, #size2
ldr r1, base2
bl callout_io_map
CALLOUT_PATCH r4, r0, r1, r2, ip
ldmia sp!,{r4,pc}
CALLOUT_START(interrupt1_id_ep9315, 0, patch_intr1)
mov r3, #0x000000ff
orr r3, r3, #0x0000ff00
orr r3, r3, #0x00ff0000
orr r3, r3, #0xff000000
…
CALLOUT_START(interrupt2_id_ep9315, 0, patch_intr2)
mov r3, #0x000000ff
orr r3, r3, #0x0000ff00
orr r3, r3, #0x00ff0000
orr r3, r3, #0xff000000
…
我不清楚该用哪一种方法
假如是用第一种方法的话,那interrupt_id_ep9315的ip中保存的地址是哪一个呢?(base2/base1)
现在手头没有相关的callout类似文件可以参考,所以不大清楚写类似的规则,
有哪位大虾有相关callout的文件,不管是针对何种目标板的,能不能给我传一份作一下参看
非常感谢!
附:我的邮箱jiyq2003@gmail.com