设为首页 加入收藏

TOP

Linux串口驱动测试(二)
2015-07-16 12:56:15 来源: 作者: 【 】 浏览:7
Tags:Linux 串口 驱动 测试
= ~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");//打印com set error及出错原因
? ? ? ? return -1;
? ? }
? ? printf("set done!\n");
? ? return 0;
}



int open_port(int fd,int comport)
{
? ? //char *dev[]={"/dev/ttyS0","/dev/ttyS1","/dev/ttyS2"};
? ? long vdisable;//没用
? ? //打开串口
? ? if (comport==1)
? ? {?
? ? ? ? //fd = open("/dev/ttySAC0",O_RDWR|O_NOCTTY|O_NDELAY);
? ? ? ? fd = open("/dev/s3c2410_serial0",O_RDWR|O_NOCTTY|O_NDELAY);
? ? ? ? if (-1 == fd)
? ? ? ? {
? ? ? ? ? ? perror("Can't Open s3c2410_serial0");
? ? ? ? ? ? return(-1);
? ? ? ? }
? ? ? ? else
? ? ? ? ? ? printf("open s3c2410_serial0 .....\n");
? ? }
? ? else if(comport==2)
? ? {?
? ? ? ? fd = open("/dev/s3c2410_serial1",O_RDWR|O_NOCTTY|O_NDELAY);
? ? ? ? if (-1 == fd)
? ? ? ? {
? ? ? ? ? ? perror("Can't Open s3c2410_serial1");
? ? ? ? ? ? return(-1);
? ? ? ? }
? ? ? ? else
? ? ? ? {
? ? ? ? ? ? printf("open s3c2410_serial1 .....\n");
? ? ? ? }
? ? }
? ? else if (comport==3)
? ? {
? ? ? ? fd = open("/dev/s3c2410_serial2",O_RDWR|O_NOCTTY|O_NDELAY);
? ? ? ? if (-1 == fd)
? ? ? ? {
? ? ? ? ? ? perror("Can't Open s3c2410_serial2");
? ? ? ? ? ? return(-1);
? ? ? ? }
? ? ? ? else
? ? ? ? {
? ? ? ? ? ? printf("open s3c2410_serial2 .....\n");
? ? ? ? }
? ? }
? ? else if (comport==4)
? ? {
? ? ? ? fd = open("/dev/s3c2410_serial3",O_RDWR|O_NOCTTY|O_NDELAY);
? ? ? ? if (-1 == fd)
? ? ? ? {
? ? ? ? ? ? perror("Can't Open s3c2410_serial3");
? ? ? ? ? ? return(-1);
? ? ? ? }
? ? else
? ? ? ? printf("open s3c2410_serial3 .....\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 i;
? ? int fd,fdd;
? ? unsigned char buff[512];
? ? ? ?
? ? bzero(buff, 512);


? ? //串口4
? ? if((fd=open_port(fd,4)) < 0)//打开串口 2
? ? {
? ? ? ? printf("open_port error3\n");
? ? ? ? return -1;
? ? }
? ? if((i=set_opt(fd,115200,8,'N',1)) < 0)//设置串口 9600 8 N 1
? ? {
? ? ? ? printf("set_opt error2\n");
? ? ? ? return -1;
? ? }
? ? printf("fd=%d\n",fd);


? ? strcpy(buff,"HelloWorld");


? ? while (1)
? ? {
? ? ? ? write(fd,buff,sizeof(buff));//写数据
? ? ? ? sleep(1);
? ? }


?close(fd);
?return 0;?
}


?



2


#include ?
#include ?
#include ?
#include ?
#include ?
#include //文件控制定义?
#include //终端控制定义?
#include ?
?
#define DEVICE "/dev/s3c2410_serial3"?
?
int serial_fd = 0;?
?
//打开串口并初始化设置?


首页 上一页 1 2 下一页 尾页 2/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇详解将驱动程序编译进Linux内核 下一篇制作Linux根文件系统关于链接库的..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: