LPC3250 ttyS1,在应用程序中使用了usleep或者使用了线程等待操作,发送数据会出现只能发送一次,后续帧无法发送的问题,必须在超级终端按回车或者通过串口软件发送一个字符后才能发出后来的帧,问题解决如下:
将8250.c的__stop_tx函数改为如下代码:
1216 static inline void __stop_tx(struct uart_8250_port *p) 1217 { 1218 struct uart_8250_port *up = (struct uart_8250_port *)p; 1219 1220 if (p->ier & UART_IER_THRI) { 1221 p->ier &= ~UART_IER_THRI; 1222 serial_out(p, UART_IER, p->ier); 1223 if (up->port.line==1){ 1224 serial_out(p, UART_IER, 0xFF);//ABING Fix ttyS1 send BUG 1225 } 1226 } 1227 }
为ttyS1进行特别处理,发送完成后,设置U2IER,将IER设置为0xFF即可。