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次是干什么用的?我理解的话串口中断处理一次不就行了吗?谢谢! 这个中断,是系统中断吧,我理解的意思是 串口在接收数据的时候,可能被其他事情打断需要去处理,
所有返回一个 IRQ到中断列表里面去,等带下次处理,
如果没有其他中断 ,就一直处理到 ATMEL_ISR_PASS_LIMIT 次。 回复 2# fanronghua
我感觉是在重复读状态寄存器,如果没有其他的串口中断,就退出中断。还请高手解释一下。
if (!pending)
break
页:
[1]