vxworks串列埠的初始化和讀寫

2021-06-22 01:34:57 字數 2899 閱讀 1454

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串列埠

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

串列埠的初始化和使用

新增全域性變數 handle hcomport 函式oninitdialog中的 bool cmycomdlg oninitdialog else msdn msdn library mobile and embedded development windows embedded windows e...

VxWorks各部分初始化流程

一 configall.h中定義所有定置系統配置的巨集 included software facilities 定義了基本元件 excluded facilities 定義了擴充元件,預設不包括 kernel software configuration 核心執行的基本引數定義,包括檔案個數 任務...

串列埠驅動分析 初始化

串列埠驅動分析 初始化 1.串列埠驅動程式結構 linux tq2440 drivers serial samsung.c 2.串口驅動中的重要資料結構 在之前一篇中的tty write,位於 static const struct file operations tty fops tty ldis...