vxworks串口的初始化和讀寫


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串口

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM