读书人

S3C2440串口mark跟space校验

发布时间: 2012-11-03 10:57:43 作者: rapoo

S3C2440串口mark和space校验

先看datasheet:

S3C2440串口mark跟space校验

硬件是支持的,再看驱动:linux-2.6.32.2\drivers\serial\samsung.c中


经过搜索发现是有的,这个可以用了,看看驱动中有没有办法直接判断它!

159 #define CMSPAR    010000000000          /* mark or space (stick) parity */
http://lxr.free-electrons.com/source/arch/arm/include/asm/termbits.h?v=2.6.32;a=arm#L159

②:

#include     <stdio.h>#include     <stdlib.h>#include     <unistd.h>#include     <sys/types.h>#include     <sys/stat.h>#include     <fcntl.h>#include     <termios.h>#include     <errno.h>#include     <string.h>main(){    int fd;    int i;    int len;    int n = 0;    char b[1]={0x03};    char read_buf[256];    char write_buf[256];    struct termios opt;    fd = open("/dev/ttySAC1", O_RDWR | O_NOCTTY);    //默认为阻塞读方式    if(fd == -1)    {        perror("open serial 0\n");        exit(0);    }    tcgetattr(fd, &opt);    cfsetispeed(&opt, B9600);    cfsetospeed(&opt, B9600);    if(tcsetattr(fd, TCSANOW, &opt) != 0 )    {       perror("tcsetattr error");       return -1;    }    opt.c_cflag &= ~CSIZE;    opt.c_cflag |= CS8;    opt.c_cflag &= ~CSTOPB;    opt.c_cflag &= ~PARENB;    opt.c_cflag &= ~INPCK;    opt.c_cflag |= (CLOCAL | CREAD);    opt.c_lflag &= ~(ICANON | ECHO | ECHOE | ISIG);    opt.c_oflag &= ~OPOST;    opt.c_oflag &= ~(ONLCR | OCRNL);    //添加的    opt.c_iflag &= ~(ICRNL | INLCR);    opt.c_iflag &= ~(IXON | IXOFF | IXANY);    //添加的//    //=====================================//    //space//    opt.c_cflag |=  PARENB | CS8 | CMSPAR ;//    //=====================================    //=====================================    //mark    opt.c_cflag |= PARENB | CS8 | CMSPAR ;    opt.c_cflag &= ~PARODD;    //=====================================    opt.c_cc[VTIME] = 0;    opt.c_cc[VMIN] = 0;    tcflush(fd, TCIOFLUSH);    printf("configure complete\n");    if(tcsetattr(fd, TCSANOW, &opt) != 0)    {        perror("serial error");        return -1;    }    printf("start send and receive data\n");    while(1)    {        n = 0;        len = 0;        printf("hw\n");        bzero(read_buf, sizeof(read_buf));    //类似于memset        bzero(write_buf, sizeof(write_buf));        write(fd,b,sizeof b);        usleep(50000);    }}


读书人网 >移动开发

热点推荐