• Home
  • pcDuino
  • WiKi
  • Store
  • Distributors
  • Home
  • pcDuino
  • WiKi
  • Store
  • Distributors
Home96 boardUART communication
Previous Next

UART communication

Posted by: Alvin Jin , December 23, 2015

[vc_row][vc_column width=”1/1″][vc_column_text]

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.

[/vc_column_text][vc_tour][vc_tab title=”Hardware list” tab_id=”1450920968-1-43″][vc_column_text]

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

[/vc_column_text][/vc_tab][vc_tab title=”Steps” tab_id=”1450920968-2-39″][vc_column_text]

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[/vc_column_text][/vc_tab][vc_tab title=”Program” tab_id=”1450921015187-2-7″][vc_column_text]

#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;    
}

[/vc_column_text][/vc_tab][vc_tab title=”Compile and run” tab_id=”1450921036273-3-8″][vc_column_text]gcc testuart.c -o testuart

sudo ./testuart

2

Read the message from 96board via UART.

2-1

 

 

 

[/vc_column_text][/vc_tab][/vc_tour][/vc_column][/vc_row][vc_row][vc_column width=”1/1″][/vc_column][/vc_row]

Share!
Tweet

Alvin Jin

About the author

Leave a Reply Cancel reply

You must be logged in to post a comment.

Category

  • Home
  • pcDuino
  • WiKi
  • Store
  • Distributors