Hi Hoang Vu, I am not really writing serial port driver, at least not kernel module. I'm using C for user space to program UART4 for beaglebone black. I have posted my question in following:
https://groups.google.com/forum/#!category-topic/beaglebone/beagleboardorg-beaglebone-black/wfvfAUsu7fo If you happen to know the solution, do let me know. Thanks! Regina On Monday, July 18, 2016 at 12:53:52 PM UTC+8, Lê Hoàng Vũ wrote: > > Hi Regina, > > Can I help you? > Are you writing serial port driver with C? > > Best regard, > > Le Hoang Vu > > Vào 18-07-2016 10:59, "Regina Choi" <[email protected] <javascript:>> > đã viết: > >> Hello Andrey, >> >> I am having almost similar problem as yours, just wondering have you >> found the reason behind it? I have searching through the web but couldn't >> find related answer. >> >> >> Regards, >> Regina >> On Wednesday, May 7, 2014 at 2:42:34 AM UTC+8, Andrey wrote: >>> >>> Hello, >>> >>> I need to use an UART to communicate between beaglebone and the device. >>> I have written the C code, but it has a few problems within it. I can't >>> identify the cause of the problem or to be more precise don't know how fix >>> it. >>> >>> The problem is of >>> reading in the information and displaying it on a shell. I can easily >>> write any information data set that I wish, but when I try to read in >>> response it either doesn't read in, with the perror being displayed as >>> (erno = EINTR [Interrupted function call]) meaning read () function >>> returned negative number. >>> >>> #include <iostream> >>> >>> #include <termios.h> >>> >>> #include <stdio.h> >>> >>> #include <unistd.h> >>> >>> #include <fcntl.h> >>> >>> #include <sys/signal.h> >>> >>> #include <stdlib.h> >>> >>> #include <sys/ioctl.h> >>> >>> #include <errno.h> >>> >>> #define BAUDRATE B19200 >>> >>> #define PORT "/dev/ttyO4" >>> >>> #define _POSIX_SOURCE 1 >>> >>> >>> >>> #define FALSE 0 >>> >>> #define TRUE 1 >>> >>> volatile int STOP=FALSE; >>> >>> >>> >>> void signal_handler_IO(int status); >>> >>> int wait_flag = TRUE; >>> >>> >>> >>> int main () >>> >>> { >>> >>> int fd=0, res=0; >>> >>> int check=0; >>> >>> >>> >>> char SYNC [] = {0x55}; >>> >>> char PID [] = {0x6A}; >>> >>> >>> >>> struct termios oldtio, newtio; >>> >>> struct sigaction saio; >>> >>> char buff[255]; >>> >>> >>> >>> fd = open(PORT, O_RDWR | O_NOCTTY | O_NONBLOCK); >>> >>> if (fd<0) {perror(PORT); exit(-1);} >>> >>> >>> >>> saio.sa_handler=signal_handler_IO; >>> >>> saio.sa_flags=0; >>> >>> saio.sa_restorer = NULL; >>> >>> sigaction(SIGIO, &saio,NULL); >>> >>> fcntl(fd, F_SETFL, FASYNC); >>> >>> check = tcgetattr(fd, &oldtio); >>> >>> if (check<0){perror("tcgetattr");} >>> >>> >>> >>> check = newtio.c_cflag = BAUDRATE | CS8 | CLOCAL | CREAD ; if (check >>> <0){perror("c_cflag");} >>> >>> check = newtio.c_iflag = IGNPAR | IXON; if (check<0){perror( >>> "c_iflag");} >>> >>> check = newtio.c_oflag = 0; if (check<0){perror("c_oflag");} >>> >>> //check = newtio.c_lflag = ICANON | ISIG; >>> >>> check = newtio.c_lflag = 0; if (check<0){perror("c_lflag ");} >>> /* c_cc is responsible for an erno error */ >>> >>> check = newtio.c_cc[VMIN]=1; if (check<0){perror("c_cc[VMIN]");} >>> >>> check = newtio.c_cc[VTIME]=0; if (check<0){perror("c_cc[VTIME]");} >>> >>> tcflush(fd, TCIFLUSH); >>> >>> >>> check = tcsetattr(fd, TCSANOW, &newtio); if (check<0){perror( >>> "tcsetattr");} >>> >>> >>> >>> for(;;) >>> >>> { >>> ioctl(fd, TIOCSBRK); >>> >>> usleep(1300); >>> >>> ioctl(fd,TIOCCBRK); >>> >>> usleep(200); >>> >>> >>> /* send request to actuator to receive the current setting and setup */ >>> check = write(fd, SYNC, sizeof(SYNC)); if (check<0){perror("SYNC" >>> );} >>> >>> check = write(fd,PID, sizeof(PID)); if (check<0){perror("PID");} >>> >>> /* read response*/ >>> res = read(fd, buff,255); >>> if (res < 0) >>> >>> { >>> >>> perror("read"); >>> //if(errno ==EINTR) continue; >>> } >>> >>> printf(": :%d :%d\n", res,buff); >>> >>> >>> >>> usleep(10000); >>> >>> } >>> >>> close (fd); >>> >>> } >>> >>> >>> >>> void signal_handler_IO(int status) >>> >>> { >>> >>> wait_flag=FALSE; >>> >>> >>> e} >>> >>> erno EINTR error is displayed only when i'm setting any non-zero values >>> to c_cc[VTIME] or c_cc[VMIN]. but still even if i set the both to zero, I >>> cannot read anything from the port, it's just blank. >>> >>> >>> I'm confident that i'm receiving response from the device, I have >>> checked it with oscilloscope. >>> >>> Any assistance would be appreciated. if possible with the code examples >>> for me to see what should I modify. >>> >>> Thank you very much for the help. >>> >> -- >> For more options, visit http://beagleboard.org/discuss >> --- >> You received this message because you are subscribed to a topic in the >> Google Groups "BeagleBoard" group. >> To unsubscribe from this topic, visit >> https://groups.google.com/d/topic/beagleboard/vbRrGiqZyfs/unsubscribe. >> To unsubscribe from this group and all its topics, send an email to >> [email protected] <javascript:>. >> To view this discussion on the web visit >> https://groups.google.com/d/msgid/beagleboard/61ab7f12-c3c4-407b-a14a-82f2a0a3e2e3%40googlegroups.com >> >> <https://groups.google.com/d/msgid/beagleboard/61ab7f12-c3c4-407b-a14a-82f2a0a3e2e3%40googlegroups.com?utm_medium=email&utm_source=footer> >> . >> For more options, visit https://groups.google.com/d/optout. >> > -- For more options, visit http://beagleboard.org/discuss --- You received this message because you are subscribed to the Google Groups "BeagleBoard" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To view this discussion on the web visit https://groups.google.com/d/msgid/beagleboard/4f146bf7-68cd-4cc0-bcfb-ec36e226f904%40googlegroups.com. For more options, visit https://groups.google.com/d/optout.
