arm92xx的中断问题
当前通过gpio实现一个中断,用来驱动一个LED状态灯,嵌入式Linux正常启动后,测试中断是否成功,灯状态表明中断请求可行,但会输出一些寄存信息(如下),且输出这些信息时系统其它进程应该是停止一下(用两根线短接的方法来实现中断,两根线短接的时候就会出现这些信息,而我在目标板上有一另一个LED灯阵列在做规则变化,短接时就会停顿一下.但经过多次短接中断后,此种情况就会消失),所以请教各位.帮忙分析一下.谢谢.
- LR is at default_idle+0x40/0x54/0x14c) from [<c001e0
- pc : [<c002055c>] lr : [<c0020550>] Not tainteddo_simple_IRQ+0x0/0x70) from [<c0029374>] (gpio_irq_h
- sp : c01a9f9c ip : c01a9fac fp : c01a9fa8
- r10: 2001a5bc r9 : 41069265 r8 : 2001a5ecr5 : c01a8000 r4 : c0020510:9fa8
- r7 : c0204c48 r6 : c01f3868 r5 : c01a8000 r4 : c0020510[<c002056
- x90)cpu_
- r6 = 00000001 r5 = C
- r3 : 60000013 r2 : 0005217f r1 : 0005317f r0 : 00000000
- PC is at defau
- Flags: nZCv IRQs on FIQs on Mode SVC_32 Segment kernel
- 0)
- r5 = 00000069 r4 = C01EB138
- [<c001f9ac>] (do_simple_IRQ+0x0/0x70) from [<c0029374>] (gpio_irq_handler+0x68/0
- [<c0020510>] (default_idle+0x0/0x54)
- x90) [<c
- r6 = 00000001 r5 = C01EB138 r4 = 0000006A
- [<c002930c>] (gpio_irq_handler+0x0/0x90) from [<c001fc54>] (asm_do_IRQ+0x50/0x140) r4 = 000000
- [<c001f85
- [
- c)02
- [<c001fc04>] (asm_do_IRQ+0x0/0x14c) from [<c001e
- r5 = C01E979C r4 = 00000000
- [<c001e000>] (__init_end+0x0/0x2c) from [<c000896c>] (start_kernel+0x174/0x1bc)
- pc : [<c002055c>] lr : [<c002
- [<c00087f8>] (start_kernel+0x0/0x1bc) from [<20008094>] (0x20008094) from
- [<c0023a84>] (dump_stack+0x0/0x14) from [<c001f8c8>] (report_bad_irq+0x70/0xcc)01a9fa8 Table: 236BC000 DAC: 00000017= 00000001
- [<c001f858>] (report_bad_irq+0x0/0xcc) from [<c001fa14>] (do_simple_IRQ+0x68/0x75 r8 : 2001a5ec0>] (show_regs+0x0/0x4c) from [<c001f
- 0)
- r5 = 00000069 r4 = C0
- [<c002930c>] (gpio_irq_handler+0x0/0x90) from [<c001fc54>] (asm_do_IRQ+0x50/0x14
- c)
- [<c001fc04>] (asm_do_IRQ+0x0/0x14c) from [<c001e9a4>] (__irq_svc+0x24/0x60)le_IRQ+0x68/0x7ba
- [<c0020510>] (default_idle+0x0/0x54) from [<c00205ac>] (cpu_idle+0x48/0x64)om [<c001e9a4>] (__irq_svc+0x
- [<c0020564>] (cpu_idle+0x0/0x64) from [<c001e024>] (__init_end+0x24/0x2c)_irq+0x70/0xcc)
- r5 = C01E979C r4 = 00000000
- [<c001e000>] (__init_end+0x0/0x2c) from [<c000
- handlers:_IRQ+0x68
- [<c00295e0>] (led_int+0x0/0xc0)
- irq105: bogus retval mask fee01830
- Pid: 0, comm: swapper0)end+
- r6 = 00000001 r5
- CPU: 0138 r
- PC is at default_idle+0x4c/0x54x24/0x2c)14>] (do_simple
- LR is at default_idle+0x40/0x54
- pc : [<c002055c>] lr : [<c0020550>] Not tainted0x90) from [<c001fc54>] (asm_do_IRQ+0 r4 = 00000000
- sp : c01a9f9c ip : c01a9fac fp : c01a9fa8
- r10: 2001a5bc r9 : 41069265 r8 : 2001a5ecandlers:9fa8055c>
- [<c0
- r7 : c0204c48 r6 : c01f3868 r5 : c01a8000 r4 : c0020510u_idle+0x4
- r3 : 60000013 r2 : 0005217f r1 : 0005317f r0 : 000
复制代码
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
你用的可能是2.6.x的内核.
2.6.x下的中断处理程序需要将返回值设为:irqreturn_t
具体可以参考《Linux设备驱动程序-第三版》(中国电力出版社,2006年1月第一版)