PCI串口芯片954中的超时中断探讨
PCI串口芯片954中的超时中断探讨
1、何为超时中断权威的定义我暂时没有找到,下面以串口的超时中断为例,简单说明一下。现假设串口的硬件FIFO大小为128 bytes,当接收的数据达到32bytes时会产生串口接收中断,现在外部给该串口发送50bytes的数据,当FIFO接收到32bytes时,就会产生中断,接收中断服务程序就会把FIFO的32bytes给读出去,典型的是读到驱动自己定义的缓冲区,那么剩下的18byte就不会产生中断,如果没有超时中断而且后面再没有发送数据的话,这18bytes是读不出来的。超时中断是用于解决这个问题的。当FIFO里面有数据,而且一段时间内硬件检测到没有接收到任何数据的时候,就会产生超时中断,让ISR把这18bytes读出去。
2、954中的超时中断的TIMEOUT计算既然是超时中断,那么就会有一个TIMEOUT,该TIMEOUT一般跟波特率有关系。954对TIMEOUT的定义是这样的:4个字符周期,也就是发送4个字符所用的时间。如果这段时间内FIFO非空,而且没有收到任何数据,就会产生超时中断了。现假设串口波特率为BAUD, 8 data bits, 1 stop bit,那么TIMEOUT的计算公式如下:
TIMEOUT = 4 * 1000 * 10 / BAUD
3、从何时开始计时?当接收到最后一个字符时,从这个字符的stop bits的中间开始计时,达到TIMEOUT之后就会产生中断。在未达到TIMEOUT之前,若有数据发送过来,硬件会自动清除计时器。
4、怎么清除超时中断的标志当中断产生后,我们一般的做法都是先在中断服务程序里面清除中断标志,然后再读取数据。但是这个超时中断有点特殊,它在954中有个标志位,不过还好,954不需要我们程序员来管理这个标志位。当超时中断产生后,ISR会读取FIFO里面的数据,读取FIFO会自动清除超时中断标志。
5、954芯片的超时中断附录Receiver time-out interrupt
A receiver time-out event, which may cause an interrupt,
will occur when all of the following conditions are true:
■The UART is in a FIFO mode
■There is data in the RHR.
■There has been no read of the RHR for a period of
time greater than the time-out period.
■There has been no new data written into the RHR for
a period of time greater than the time-out period. The
time-out period is four times the character period
(including start and stop bits) measured from the
centre of the first stop bit of the last data item
received.
Reading the first data item in RHR clears this interrupt.
不知道大家明白没?呵呵,不明白的可以参考954的芯片手册,个人觉得这手册没有INTEL公司写的好。我也看的好费力。