博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
vxworks串口的初始化和读写
阅读量:7099 次
发布时间:2019-06-28

本文共 2258 字,大约阅读时间需要 7 分钟。

VXWORKS串口设置说明:

一般有这么几步:

打开串口

设置串口raw模式,清空输入输出的缓冲区

设置波特率,数据位,停止位,校验方式

便可以开始读和写

 

打开串口:

fd = open("/tyCo/0", O_RDWR, 0);

"/tyCo/0" 串口1的设备名,O_RDWR:open for reading and writing

 

 

设置串口raw模式,清空输入输出的缓冲区

ioctl(fd,FIOSETOPTIONS,OPT_RAW);

ioctl(fd,FIOFLUSH,0);

ioctl(int fd,int function,int arg);这个函数解释如下:

function这个参数有如下:(tty)

FIOBAUDRATE

设置波特率,arg为一整数,表示要设定的波特率

FIOGETOPTIONS

取得设备控制字,arg表示读出的内容存放的位置

FIOSETOPTIONS

设置设备控制字,arg表示要设置的选项

FIOGETNAME

取得文件描述符对应的文件名,arg存放文件名的缓冲区

FIOREAD

取得输入缓冲区内未读取的字符数,arg用于接收结果的整型指针

FIOWRITE

取得输出缓冲区内的字符个数,arg用于接收结果的整型指针

FIOFLUSH

清空输入输出缓冲区的字符

FIOCANCEL

取消读和写

 

FIOSETOPTIONS对应的arg有 OPT_LINE,OPT_RAW,OPT_ECHO等等

关于这些的定义,可以在sioLib.h,ioLib.h里寻找。

 

设置波特率,数据位,停止位,校验方式

STOPB:两位停止位,默认是1位停止位。PARENB使能校验,PARODD奇校验,使能后默认是偶校验,未使能则是无校验

CS5,CS6,CS7,CS8:5,6,7,8位数据位

如:CS8|PARENB :8位数据位,1位停止位,偶校验;

    CS8|PARENB|PARODD:8位数据位,1位停止位,奇校验;

    CS8 :8位数据位,1位停止位,无校验;

    CS8|STOPB:8位数据位,2位停止位,无校验;

int SerialOps = 0;

ioctl(fd,FIOBAUDRATE,9600); //9600波特率

SerialOps |= CS8;//8数据位,1位停止位,无校验

ioctl(fd,SIO_HW_OPTS_SET,SerialOps);//设置

SIO_HW_OPTS_SET(设置硬件选项)是在XXDrv里的function

SIO_HW_OPTS_SET对应的arg:

CLOCAL

忽略modem控制信号

CREAD

启动接收器

CSIZE

指定数据位:CS5~CS8

HUPCL

最后关闭时挂断modem连接

STOPB

被设置时指定2位停止位,否则1位停止位

PARENB

被设置时启用奇偶校验,否则不进行奇偶校验

PARODD

被设置时启用奇校验,否则偶校验

(PARENB被设置时才有效)

 

可以开始读写

 int read

    (

    int    fd,                /* file descriptor from which to read */

    char * buffer,            /* pointer to buffer to receive bytes */

    size_t maxbytes           /* max no. of bytes to read into buffer */

    )

int write

    (

    int    fd,                /* file descriptor on which to write */

    char * buffer,            /* buffer containing bytes to be written */

    size_t nbytes             /* number of bytes to write */

    )

 

 

关于串口的设置,需要参考tty和xxDrv。详细的还是需要看书的。

下面举个例子:在有些的设置需要如下:

fd=open(tyco,2,0);

logMsg("/n%s;fd=%d/n",tyco,fd,0,0,0,0);

 

ioctl(fd, FIOOPTIONS, OPT_RAW);

ioctl(fd,FIOBAUDRATE,115200); //设置串口波特率为9600bps

ioctl(fd,FIOFLUSH,0);//清空输入输出缓冲

 

//ioctl(fd,SIO_HW_OPTS_SET,CS8|PARENB|PARODD|CLOCAL|CREAD); //设置 8 位数据位,1位停止位,带校验位,奇校验,没有流控制CLOCAL,使能读CREAD

//ioctl(fd,SIO_HW_OPTS_SET,CS8|PARENB|CLOCAL|CREAD); //设置 8 位数据位,1位停止位,带校验位,偶校验,没有流控制CLOCAL,使能读CREAD

ioctl(fd,SIO_HW_OPTS_SET,CS8|CLOCAL|CREAD); //设置 8 位数据位,1位停止位,带校验位,无校验,没有流控制CLOCAL,使能读CREAD

write(fd,str,48);//需放在清缓存后,mpc8280不用。和SIO_HW_OPTS_SET之后,因为会reset串口

上面粗字体,需要注意。有些需要,有些不需要的。

转载于:https://www.cnblogs.com/cyruswang/p/5916697.html

你可能感兴趣的文章
出差第三天
查看>>
度小满获南京银行三年100亿元授信额度,双方并合作共同发力消费金融
查看>>
自动化运维工具Ansible的简单使用
查看>>
at,crontab定时程序
查看>>
zabbix添加端口监控
查看>>
放假前的“例行安检”
查看>>
基本形态学算法
查看>>
PostgreSQL 11 1Kw TPCC , 1亿 TPCB 7*24 强压耐久测试
查看>>
修改toolbar自适应报表宽度
查看>>
Linux基础命令---chkconfig
查看>>
Arista Networks推出400千兆以太网交换机
查看>>
企业网站需要什么样内容才能满足和吸引到用户?
查看>>
关于 Java NIO Buffer 使用的详细解读
查看>>
以太坊系列之十三: evm指令集
查看>>
9、MySQL函数
查看>>
powerdesigner使用sql文件生成uml图
查看>>
Scala的类层级讲解
查看>>
微信api 源码分享
查看>>
泰坦尼克乘客存活状况(决策树案例)
查看>>
博客计划【推荐系统】
查看>>