vip-weiwei 发表于 2012-07-05 10:58

atmel 串口驱动

/*
* Interrupt handler
*/
static irqreturn_t atmel_interrupt(int irq, void *dev_id)
{
        struct uart_port *port = dev_id;
        unsigned int status, pending, pass_counter = 0;

        do {
                status = UART_GET_CSR(port);
                pending = status & UART_GET_IMR(port);
                if (!pending)
                        break;

                atmel_handle_receive(port, pending);
                atmel_handle_status(port, pending, status);
                atmel_handle_transmit(port, pending);
        } while (pass_counter++ < ATMEL_ISR_PASS_LIMIT);//256

        return pass_counter ? IRQ_HANDLED : IRQ_NONE;
}

请问循环 ATMEL_ISR_PASS_LIMIT次是干什么用的?我理解的话串口中断处理一次不就行了吗?谢谢!

fanronghua 发表于 2012-07-05 16:34

这个中断,是系统中断吧,我理解的意思是 串口在接收数据的时候,可能被其他事情打断需要去处理,
所有返回一个 IRQ到中断列表里面去,等带下次处理,

如果没有其他中断 ,就一直处理到 ATMEL_ISR_PASS_LIMIT 次。

vip-weiwei 发表于 2012-07-06 10:15

回复 2# fanronghua

我感觉是在重复读状态寄存器,如果没有其他的串口中断,就退出中断。还请高手解释一下。
if (!pending)
                        break


   
页: [1]
查看完整版本: atmel 串口驱动