UART Q&A
Q1:如何关掉串口打印?
有如下两种方法
1、在串口(在telant敲是没用的)敲11111,正常敲到第5个1时就会提示disable uart,再敲11111可以恢复回来。
2、在串口(在telant敲是没用的)敲22222,无法恢复,需要断电重启才能恢复。
Q2:uart关串口可以改个方式吗?或者把数字改长一点。
可以,在kernel\drivers\sstar\serial\ms_uart.c 文件 ms_getchar 函数中,如下位置进行修改。
static void ms_getchar(struct uart_port *p) { ... ... /* while data ready, start to read data from UART FIFO */ do{ flag = TTY_NORMAL; /* read data from UART IP */ ch = INREG8(REG_DLL_THR_RBR(p)); p->icount.rx++; if (isConsole) { //when receive '11111', disable UART RX to use TV tool if(ch == '1') rx_disable++; else rx_disable=0; if(rx_disable == 5) { silent_state = 1 - silent_state; if (silent_state) { printk("disable uart\n"); ch = 0; } else { printk("enable uart\n"); } //CLRREG16(0x1F001C24, 0x1<<11); rx_disable=0; } //when receive '22222', disable UART PAD to use TV tool if(ch == '2') pad_disable++; else pad_disable=0; if(pad_disable == 5) { #if defined(CONFIG_ARCH_INFINITY2) CLRREG16(0x1F001C24, 0x1<<11); #else CLRREG16(0x1F203D4C, 0x000F); #endif pad_disable=0; } } } ... ... }
Q3:uart串口每次只能读取到1个字节,例如:就是PC发送10个字节数据,sigma串口read 32字节,实际每次只能读到1个字节。
目前默认档位是L0,每次只能读取一个字节。如果一次需要读写多个字节,需要调整 tty 挡位,同时需要关掉urdma模式(urdma的timeout有问题可能还是每次读一个byte )。
代码如下:
kernel\drivers\sstar\serial\ms_uart.c => ms_uart_set_termios static void ms_uart_set_termios(struct uart_port *p, struct ktermios *pTermios_st, struct ktermios *pOld_st) { ... ... OUTREG8(REG_IIR_FCR(p), UART_FCR_FIFO_ENABLE | UART_FCR_TRIGGER_TX_L1 | UART_FCR_TRIGGER_RX_L0); INREG8(REG_DLL_THR_RBR(p)); ... ... }
目前有如下4个挡位可以设置: