The website "dmilvdv.narod.ru." is not registered with uCoz.
If you are absolutely sure your website must be here,
please contact our Support Team.
If you were searching for something on the Internet and ended up here, try again:

About uCoz web-service

Community

Legal information

Распечатка 5.4 Функции приёма

Распечатка 5.4 Функции приёма

Предыдущая  Содержание  Следующая V*D*V

Распечатка 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();

}

 

Предыдущая  Содержание  Следующая