我们正在使用以下架构。 root @ ti-omap3-am3517-evm:〜#cat / proc / cpuinfo 处理器:ARMv7处理器rev 7(v7l) BogoMIPS:597.64 特点:swp half thumb fastmult vfp edsp neon vfpv3 CPU实现者:0x41 CPU架构:7 CPU变体:0x1 CPU部分:0xc08 CPU修订版:7
硬件:OMAP3517 / AM3517 EVM 修订版:0020 序列号:0000000000000000
我们正在使用Linux内核版本2.6.32 root @ ti-omap3-am3517-evm:〜#uname -a Linux ti-omap3-am3517-evm 2.6.32.8#71 PREEMPT Mon Nov 5 15:37:19 EST 2012 armv7l unknown
我们面临的问题(硬件FIFO溢出流)是串行驱动程序(驱动程序/串行/ 8250.c)uart_rx_char()。串行端口具有64字节FIFO,并配置为在接收32字节时生成中断。
我们正以460800波特率从串口读/写数据。回归测试在7-8小时内运行,我们向串口发送数据和从串口接收数据。经过几个小时后,我们看到HWFIFO溢流发生,我们不知道为什么会发生这种情况。 我们假设发生以下两种情况之一。
1)跳过串行中断,因为系统中的其他中断(以太网/ i2c和MMC(在回归测试期间我们不使用MMC和i2c)花费的时间太长,以至于跳过串行中断并且当串行ISR有机会运行HW FIFO时已经满了。
2)另一个假设是我们必须在不到1毫秒(一毫秒)内处理ISR,因为每秒460800比特=> 460800/1000 ms~ = 460 bit / ms~ = 52bytes / ms由于我们已配置串口以每32个字节产生一次中断,因此它可以提供32/50 ms~ = 0.64 ms来完成ISR。如何确认上面提到的第1点和第2点?任何指针都将受到赞赏。
我们还假设8250.c(串行驱动程序)相当陈旧且强大,它不应该像我们那样表现。
如果您需要更多信息,请与我们联系。
可以在此网站链接找到8250.c驱动程序。 http://lxr.free-electrons.com/source/drivers/serial/8250.c?v=2.6.32;a=arm
我还有一个问题是目标板上使用的串口是基于ST16654的,具有以下配置。
[PORT_16654] = {
.name = "ST16654",
.fifo_size = 64,
.tx_loadsz = 32,
.fcr = UART_FCR_ENABLE_FIFO | UART_FCR_R_TRIG_01 |
UART_FCR_T_TRIG_10,
.flags = UART_CAP_FIFO | UART_CAP_EFR | UART_CAP_SLEEP
}
我检查了代码,对我来说看起来rx触发器设置为16个字节,因为tx触发器设置为32个字节(在http://lxr.free-electrons.com/source/include/linux/serial_reg.h?v=2.6.32;a=arm#L62定义)。
有没有人知道为什么会这样?