Распечатка 5.4 Функции приёма |
Предыдущая Содержание Следующая |
Распечатка 5.4.
void my_uart_char_rx(struct uart_port *port) { struct tty_struct *tty = port->info->tty; struct uart_count *icount = &port->icount; unsigned int i=0;
while(CHAR_READY()) { unsigned char c; unsigned char flag = TTY_NORMAL; unsigned char st = READ_RX_STATUS();
if(tty->flip.count >= TTY_FLIPBUF_SIZE) break;
c = READ_CHAR();
icount->rx++;
if(st & (PARITY_ERROR | FRAME_ERROR | OVERRUN _ERROR) ) { if(st & PARITY_ERROR) icount->parity ++; if(st & FRAME_ERROR) icount->frame ++; if(st & OVERRUN_ERROR) icount->overrun ++;
/* * Если нас просили игнорировать ошибки, то делаем следующее */ if(st & port->ignore_status_mask) { if(++i > IGNORE_ERROR_NUM) break; goto ignore; }
/* * Сообщаем об ошибках, которые нас не просили игнорировать */ st &= port->read_status_mask; if(st & PARITY_ERROR) flag = TTY_PARITY; if(st & FRAME_ERROR) flag = TTY_FRAME; /* * Переполнение это специальный случай; оно не влияет на * чтение символа */ if(st & OVERRUN_ERROR) { tty_insert_flip_char(tty, c, flag); c = 0; flag = TTY_OVERRUN; } } tty_insert_flip_char(tty,c,flag);
ignore: } tty_flip_buffer_push(tty); }
static void my_uart_stop_rx(struct uart_port *port) { STOP_RX(); }
|
Предыдущая Содержание Следующая |