Linux-Xenomai Serial Communication using xeno_16550A module

334 Views Asked by At

I'm starter of RTOS and I'm using Xenomai v2.6.3.

I'm trying to get some data using Serial communication.

I did my best on the task following the xenomai's guide and open sources, but it doesn't work well.

the link of the guide --> (https://xenomai.org//serial-16550a-driver/)

I just followed the sequence to use the module xeno_16550A. (with port io = 0x2f8 and irq=3)

I followed open source http://www.acadis.org/pages/captain.at/serial-port-example

It works well in write task, but read task doesn't work well. It gave me the error sentence with error while RTSER_RTIOC_WAIT_EVENT, code -110 (it means connection timed out)

Moreover I checked the irq number3 by typing command 'cat /proc/xenomai/irq', but the interrupt number doesn't increase. In my case, I don't need to write data, so I erase the write task code.

The read task proc is follow

void read_task_proc(void *arg) {
  int ret;
  ssize_t red = 0;
  struct rtser_event rx_event;

  while (1) {
    /* waiting for event */
    ret = rt_dev_ioctl(my_fd, RTSER_RTIOC_WAIT_EVENT, &rx_event );
    if (ret) {
      printf(RTASK_PREFIX "error while RTSER_RTIOC_WAIT_EVENT, code %d\n",ret);
      if (ret == -ETIMEDOUT)
              continue;
      break;
    }

    unsigned char buf[1];
    red = rt_dev_read(my_fd, &buf, 1);
      if (red < 0 ) {
        printf(RTASK_PREFIX "error while rt_dev_read, code %d\n",red);
      } else {
        printf(RTASK_PREFIX "only %d byte received , char : %c\n",red,buf[0]);
      }
  }
exit_read_task:
  if (my_state & STATE_FILE_OPENED) {
    if (!close_file( my_fd, READ_FILE " (rtser)")) {
      my_state &= ~STATE_FILE_OPENED;
    }
  }
  printf(RTASK_PREFIX "exit\n");
}

I could guess the causes of the problem.

  1. buffer size or buffer is already full when new data is received.

  2. rx_interrupt doesn't work....

I want to check whether the two things are wrong or not, but How can I check?

Furthermore, does anybody know the cause of the problem? Please give me comments.

0

There are 0 best solutions below