Chinaunix
标题:
atmel 串口驱动
[打印本页]
作者:
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
欢迎光临 Chinaunix (http://bbs.chinaunix.net/)
Powered by Discuz! X3.2