Quantcast
Channel: LinkSprite Learning Center
Viewing all articles
Browse latest Browse all 562

UART communication

$
0
0

I am text block. Click edit button to change this text. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut elit tellus, luctus nec ullamcorper mattis, pulvinar dapibus leo.

  1. 96board
  2. Liner Base Mezzanine Card
  3. USB UART

Connection

Connect UART port on Linker Base Mezzanine Card to an USB UART as following:

UART port USB UART
TX RX
RX TX
GND GND

1 1-1 1-2

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/ioctl.h>
#include <sys/types.h>
#include <errno.h>
#include <termios.h>
#include <sys/time.h>
#include <signal.h>
#include <string.h>
#include <fcntl.h>
#include <asm/param.h>
#include "pthread.h"
 
int set_opt(int fd,int nSpeed, int nBits, char nEvent, int nStop)
{
 struct termios newtio,oldtio;
 if ( tcgetattr( fd,&oldtio) != 0) 
 { 
  perror("SetupSerial 1");
  return -1;
 }

 bzero( &newtio, sizeof( newtio ) );
 newtio.c_cflag |= CLOCAL | CREAD; 
 newtio.c_cflag &= ~CSIZE;

 switch( nBits )
 {
  case 7:
   newtio.c_cflag |= CS7;
  break;
  case 8:
   newtio.c_cflag |= CS8;
  break;
 }

 switch( nEvent )
 {
  case 'O':
   newtio.c_cflag |= PARENB;
   newtio.c_cflag |= PARODD;
   newtio.c_iflag |= (INPCK | ISTRIP);
  break;
  case 'E': 
   newtio.c_iflag |= (INPCK | ISTRIP);
   newtio.c_cflag |= PARENB;
   newtio.c_cflag &= ~PARODD;
  break;
  case 'N': 
   newtio.c_cflag &= ~PARENB;
  break;
 }

 switch( nSpeed )
 {
  case 2400:
   cfsetispeed(&newtio, B2400);
   cfsetospeed(&newtio, B2400);
  break;
  case 4800:
   cfsetispeed(&newtio, B4800);
   cfsetospeed(&newtio, B4800);
  break;
  case 9600:
   cfsetispeed(&newtio, B9600);
   cfsetospeed(&newtio, B9600);
  break;
  case 115200:
   cfsetispeed(&newtio, B115200);
   cfsetospeed(&newtio, B115200);
  break;
  default:
   cfsetispeed(&newtio, B9600);
   cfsetospeed(&newtio, B9600);
  break;
 }

 if( nStop == 1 )
  newtio.c_cflag &= ~CSTOPB;
 else if ( nStop == 2 )
  newtio.c_cflag |= CSTOPB;
 newtio.c_cc[VTIME] = 0;
 newtio.c_cc[VMIN] = 0;
 tcflush(fd,TCIFLUSH);
 if((tcsetattr(fd,TCSANOW,&newtio))!=0)
 {
  perror("com set error");
  return -1;
 }
 printf("set done!\n");
 return 0;
}

int open_port(int fd)
{
 long vdisable;
  fd = open("/dev/ttyMSM1",O_RDWR|O_NOCTTY|O_NDELAY);
  if (-1 == fd)
  {
   perror("Can't Open ttyMSM1");
   return(-1);
  }
  else 
   printf("open ttyUSB0 .....\n");

 if(fcntl(fd, F_SETFL, 0) < 0)
 printf("fcntl failed!\n");
 else
 printf("fcntl=%d\n",fcntl(fd, F_SETFL,0));

 if(isatty(STDIN_FILENO)==0)
  printf("standard input is not a terminal device\n");
 else
  printf("isatty success!\n");
  
 printf("fd-open=%d\n",fd);
 return fd;
}
unsigned int val=0;

int main(int argc, char **argv)
{
 long ret=0;
 int receNum=0,receFlag=0;
 unsigned char ReceBuf[512],SendBuf[512];
 int fd,fdd;
 int nread,i;
 unsigned char buff[512];
 struct timeval timeout;
 bzero(buff, 512);

 if((fdd=open_port(fdd)) < 0)
 {
  printf("open_port error\n");
  return -1;
 }
 if((i=set_opt(fdd,9600,8,'N',1)) < 0)
 {
  printf("set_opt error\n");
  return -1;
 }
 printf("fd=%d\n",fdd);

 timeout.tv_sec=1;
 timeout.tv_usec=0;

   write(fdd,"test",4);
   timeout.tv_sec=0;
   timeout.tv_usec=20000;
   ret=select(0,NULL,NULL,NULL,&timeout);
  close(fdd);
  return 0;    
}

gcc testuart.c -o testuart

sudo ./testuart

2

Read the message from 96board via UART.

2-1

 

 

 


Viewing all articles
Browse latest Browse all 562

Trending Articles