how to use BeagBone uart4? you need build the uart driver and then insert kernel.i need file uart driver.
2014-05-18 1:08 GMT+07:00 Simon Platten <[email protected]>: > Sorry, I know nothing about the insmod kernel, can you tell me more? > > > On 17/05/2014 12:22, Lê Hoàng Vũ wrote: > >> I need uart driver for insmod kernel,can you help me! >> >> 2014-05-17 17:53 GMT+07:00, Simon Platten <[email protected]>: >> >>> This is a snippet of code from my JNI C libary which works: >>> [code] >>> JNIEXPORT jint JNICALL Java_cantley_co_uk_clsMain_openDevice >>> (JNIEnv *pEnv, jclass obj, jstring strDevice, jboolean blnRx, jboolean >>> blnDebug) { >>> const char *pstrDevice = (*pEnv)->GetStringUTFChars(pEnv, >>> strDevice, >>> >>> NULL); >>> // Try to open the port >>> int intFD = open(pstrDevice, O_RDWR | O_NOCTTY | O_NDELAY); >>> >>> if ( intFD >= 0 ) { >>> struct termios options; >>> // Get the current options for the port... >>> tcgetattr(intFD, &options); >>> // Set the baud rates to 115200... >>> cfsetispeed(&options, B115200); >>> cfsetospeed(&options, B115200); >>> // options.c_cflag |= (CLOCAL | CREAD); >>> options.c_iflag &= ~(IGNBRK | BRKINT | PARMRK | ISTRIP | INLCR | >>> IGNCR | ICRNL | IXON); >>> options.c_oflag &= ~OPOST; >>> options.c_lflag &= ~(ECHO | ECHONL | ICANON | ISIG | IEXTEN); >>> options.c_cflag &= ~(CSIZE | PARENB); >>> options.c_cflag |= CS8; >>> >>> if ( blnRx == JNI_TRUE ) { >>> options.c_cc[VMIN] = 0; >>> options.c_cc[VTIME] = 2; >>> } else { >>> // non-blocking, we aren't reading >>> options.c_cc[VMIN] = options.c_cc[VTIME] = 0; >>> } >>> tcsetattr(intFD, TCSANOW, &options); >>> >>> if ( blnRx == JNI_TRUE ) { >>> tcflush(intFD, TCIFLUSH); >>> } >>> fcntl(intFD, F_SETFL, FNDELAY); >>> >>> if ( blnDebug == JNI_TRUE ) { >>> printf("%s opened and ready for use%s", pstrDevice, >>> pstrEOL); >>> } >>> } else if ( blnDebug == JNI_TRUE ) { >>> printf("%s, port not ready%s", pstrDevice, pstrEOL); >>> } >>> (*pEnv)->ReleaseStringUTFChars(pEnv, strDevice, pstrDevice); >>> return intFD; >>> } >>> [/code] >>> >>> On Tuesday, 6 May 2014 19:42:34 UTC+1, 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]. >>> For more options, visit https://groups.google.com/d/optout. >>> >>> > > --- > This email is free from viruses and malware because avast! Antivirus > protection is active. > http://www.avast.com > > > -- > 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]. > 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]. For more options, visit https://groups.google.com/d/optout.
