linux 内核版本2.6.10
其中串口中断注册语句如下
if(request_irq(LNXINTNUM(AVALANCHE_UART0_INT), uart_isr, 0, "uart", NULL) != 0)
{
LOG_ERR("request IRQ %d failed.", LNXINTNUM(AVALANCHE_UART0_INT));
return -1;
}
中断处理函数如下图, 只是简单的读取寄存器值,然后丢弃:
static irqreturn_t uart_isr(int isr,void *data, struct pt_regs *reg)
{
int uart_isr_id = p_uart_obj->uart_regs->c_u.int_id;
int uart_line_stat = p_uart_obj->uart_regs->line_stat;
int int_type = (uart_isr_id & 0x0E) >> 1;
int int_pend = uart_isr_id & INT_PEND;
unsigned char ch = p_uart_obj->uart_regs->b_u.rx_buf;
return 0;
}
当通过uart_isr()函数接收字符达到一定次数后,发生了以下错误
irq 15: nobody cared!
Call Trace:
[] uart_isr+0x68/0xa4 [uart]
[] __report_bad_irq+0x40/0xc0
[] try_to_wake_up+0x1d8/0x1e0
[] note_interrupt+0xdc/0x110
[] __do_IRQ+0x1ec/0x22c
[] do_IRQ+0x68/0x88
[] mipsIRQ+0x128/0x160
[] need_resched+0x40/0x48
[] r4k_wait+0x0/0xc
[] schedule+0x58/0x158
[] cpu_idle+0x7c/0xe8
[] r4k_wait+0x4/0xc
[] rest_init+0x28/0x48
[] printk+0x1c/0x28
[] start_kernel+0x1d0/0x278
[] unknown_bootoption+0x0/0x304
handlers:
Disabling IRQ #15
上百度、谷歌未能找到解决办法, 所以在这里向各位大神求助, 这是我的第一次完整的驱动程序。 先谢谢大家了。
内核的中断处理函数认为你没有正确的处理中断,
如果你的中断正常处理好了,应该return IRQ_HANDLED
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。