uart1 读写程序

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <unistd.h>
#include <errno.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <termios.h>


int set_opt(int fd, int nSpeed, int nBits, char nEvent, int nStop)
{
 struct termios newtio,oldtio;
 
 if(tcgetattr(fd,&oldtio) != 0 )
 {
  perror("setup serial 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 9600:
   cfsetispeed(&newtio, B9600);
   cfsetospeed(&newtio, B9600);
   break;
  case 115200:
   cfsetispeed(&newtio, B115200);
   cfsetospeed(&newtio, B115200);
   break;
  default:
   cfsetispeed(&newtio, B115200);
   cfsetospeed(&newtio, B115200);
   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, int comport)
{

// char *dev[] = {"/dev/tq240_serial0","/dev/tq2440_serial1","/dev/tq2440_serial2"};
// long vdisable;
 
 if(comport == 1)
 {
  fd = open ("/dev/tq2440_serial0",O_RDWR|O_NOCTTY|O_NDELAY);
  if(-1 == fd )
  {
   perror("Can't Open Serial Port");
   return -1;
  }
 }
 else if(comport == 2)
 {

  //fd = open("/dev/tq2440_serial1",O_RDWR|O_NOCTTY|O_NDELAY);
  fd = open("/dev/tq2440_serial1",O_RDWR|O_NDELAY);
  if(-1 == fd)
  {
   perror("Can't Open Serial Port");
   return (-1);
  }
 }
 else if(comport == 3)
 {
  fd = open("/dev/tq2440_serial2",O_RDWR|O_NOCTTY|O_NDELAY);
  if (-1 == fd)
  {
   perror("Can't Open Serial Port");
   return (-1);
  }
 }

 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 termina device /n");
 else
  printf("isatty success! /n" );

 printf("fd-open=%d/n", fd );

 return fd;

}

/*
 *  Constructs a first which is a child of 'parent', with the
 *  name 'name' and widget flags set to 'f'
 */

 


int main()
{

 fd_set fds;
 int fd ;
 int retval;
 int nread,nwrite, i;
 char buff[]="hello/n";
 char revff[10];
 
 if((fd=open_port(fd,2)) < 0 )
 {
  perror("open_port error ");
  return ;
 }
  printf("fd=%d/n",fd);
 if((i = set_opt(fd, 115200, 8, 'N', 1)) < 0)
 {
  perror("set_opt error");
  return;
 }
 
 printf("fd=%d/n",fd);
  //fd = 3;
 nwrite=write(fd,buff,8);
 printf("nwrite=%d,%s/n",nwrite,buff);
   

  FD_ZERO(&fds);
 FD_SET(fd,&fds);
 
 retval=select(fd+1,&fds,NULL,NULL,NULL);
 
 if(FD_ISSET(fd, &fds))
 {
  nread=read(fd,revff,8);
  printf("nread=%d,%c/n",nread,revff[0]); 
 }
 
  
  fflush(NULL);
 close(fd);

 


}

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值