终端串口PXA270有3个串口,都可以作为终端,如果根据需要修改,可以修改主板主文件,在其中通过default_serial_console()函数设置即可。 struct serial_device *default_serial_console (void) 上述就是将原来的终端从全功能串口FFUART设置为蓝牙串口BTUART。 修正了416MHz下输入大量数据时候串口丢失数据的问题,原来是因为串口接收程序内嵌了喂狗操作,一旦喂狗操作时间加长,就会导致串口丢失数据,去掉了串口读取数据时候的喂狗才做,现象消失。 【cpu/pxa/serial.c】文件中,串口接收数据的实现代码: 218 int pxa_getc_dev (unsigned int uart_index) 219 { 220 switch (uart_index) { 221 case FFUART_INDEX: 222 while (!(FFLSR & LSR_DR)); 223 // WATCHDOG_RESET (); /* Reset HW Watchdog, if needed */ 224 return (char) FFRBR & 0xff; 225 226 case BTUART_INDEX: 227 while (!(BTLSR & LSR_DR)); 228 // WATCHDOG_RESET (); /* Reset HW Watchdog, if needed */ 229 return (char) BTRBR & 0xff; 230 case STUART_INDEX: 231 while (!(STLSR & LSR_DR)); 232 // WATCHDOG_RESET (); /* Reset HW Watchdog, if needed */ 233 return (char) STRBR & 0xff; 234 } 235 return -1; 236 } 红色代码原本为: while (!(STLSR & LSR_DR)) WATCHDOG_RESET (); /* Reset HW Watchdog, if needed */ 现在改为忽略喂狗操作。 喂狗操作在【board/trizepsiv/conxs.c】文件中实现: 242 #ifdef CONFIG_HW_WATCHDOG 243 void hw_watchdog_reset(void) 244 { 245 int temp; 246 GPSR0 = 1 << 14; 247 248 temp = GPLR0; 249 if (temp & (1<<9)) { 250 GPCR0 = 1<<9; 251 GPSR0 = 1<<10; 252 } else { 253 GPSR0 = 1<<9; 254 GPCR0 = 1<<10; 255 } 256 // for (i=100; i>0; i--); 257 // udelay(100); 258 GPCR0 = 1 << 14; 259 } 260 #endif 由于加入了对LED的闪烁控制,导致喂狗时间加长,从而引发了串口出错。所以干脆在串口读取数据的时候去掉了喂狗操作。 还是存在丢失的情况,只是没有以前严重! |