- 论坛徽章:
- 0
|
小弟前一阵子参考资料移植了一个armlinux到我的板子上,芯片是ep7312。利用设备驱动程序原理做了一个走马灯的应用程序加到romfs的文件系统下,启动之后也能正常运行。接下来就希望利用fiq实现linux下的快速中断,结果就出现了这样的异常:
Bad mode in data abort handler detected: mode FIQ_32
Vectors:
Stubs:
Internal error: Oops: 0
CPU: 0
pc : [<ffff040c>] lr : [<c0042230>] Not tainted
sp : c0e83c30 ip : c0e83ccc fp : c0e83cc8
r10: c01740e3 r9 : c0e82000 r8 : bffffe6c
r7 : c01610b4 r6 : c0e83d1c r5 : 60000093 r4 : c01740dc
r3 : c01357a2 r2 : 00000020 r1 : 00000020 r0 : c01740dc
Flags: Nzcv IRQs off FIQs off Mode FIQ_32 Segment user
Control: 217F Table: C0E7C015 DAC: 00000015
Process HorseTest (pid: 25, stackpage=c0e83000)
Stack:
c0e83c60: c0042230 ffff040c 800000d1 ffffffff c0e83c84 c004a2c4
可以确认的是,尝试FIQ的时候,cpsr里面的FIQ位是打开的,mask也是打开的。
自己也在entry-armv.S中的中断向量表中修改了vector_FIQ,加入了自己想要实现的汇编代码(里面没有涉及到对OS的函数调用和操作,只是直接控制LED进行全亮和全灭的指示)。接下来就发生了上面的一幕,而LED也并没有按照FIQ程序运行而是直接死了。
请教各位大虾,哪位在arm linux下面作过FIQ的,帮帮忙指点一下,小弟无限感激! |
|