色婷婷AⅤ一区二区三区|亚洲精品第一国产综合亚AV|久久精品官方网视频|日本28视频香蕉

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 文件I/O編程之: 嵌入式Linux串口應(yīng)用編程

          文件I/O編程之: 嵌入式Linux串口應(yīng)用編程

          作者: 時間:2013-09-13 來源:網(wǎng)絡(luò) 收藏

          本文引用地址:http://cafeforensic.com/article/257136.htm

          6.4嵌入式應(yīng)用編程

          6.4.1概述

          常見的數(shù)據(jù)通信的基本方式可分為并行通信與串行通信兩種。

          n 并行通信是指利用多條數(shù)據(jù)傳輸線將一個字數(shù)據(jù)的各比特位同時傳送。它的特點是傳輸速度快,適用于傳輸距離短且傳輸速度較高的通信。

          n 串行通信是指利用一條傳輸線將數(shù)據(jù)以比特位為單位順序傳送。特點是通信線路簡單,利用簡單的線纜就可實現(xiàn)通信,降低成本,適用于傳輸距離長且傳輸速度較慢的通信。

          是計算機一種常用的接口,常用的串口有RS-232-C接口。它是于1970年由美國電子工業(yè)協(xié)會(EIA)聯(lián)合貝爾系統(tǒng)、調(diào)制解調(diào)器廠家及計算機終端生產(chǎn)廠家共同制定的用于串行通信的標準,它的全稱是“數(shù)據(jù)終端設(shè)備(DTE)和數(shù)據(jù)通信設(shè)備(DCE)之間串行二進制數(shù)據(jù)交換接口技術(shù)標準”。該標準規(guī)定采用一個DB25芯引腳的連接器或9芯引腳的連接器,其中25芯引腳的連接器如圖6.3所示。

          圖6.325引腳串行接口圖

          S3C2410X內(nèi)部具有兩個獨立的UART控制器,每個控制器都可以工作在Interrupt(中斷)模式或者DMA(直接存儲訪問)模式。同時,每個UART均具有16字節(jié)的FIFO(先入先出寄存器),支持的最高波特率可達到230.4Kbps。UART的操作主要可分為以下幾個部分:數(shù)據(jù)發(fā)送、數(shù)據(jù)接收、產(chǎn)生中斷、設(shè)置波特率、Loopback模式、紅外模式以及硬軟流控模式。

          串口參數(shù)的配置讀者在配置超級終端和minicom時也已經(jīng)接觸過,一般包括波特率、起始位比特數(shù)、數(shù)據(jù)位比特數(shù)、停止位比特數(shù)和流控模式。在此,可以將其配置為波特率115200、起始位1b、數(shù)據(jù)位8b、停止位1b和無流控模式。

          中,所有的設(shè)備文件一般都位于“/dev”下,其中串口1和串口2對應(yīng)的設(shè)備名依次為“/dev/ttyS0”和“/dev/ttyS1”,而且USB轉(zhuǎn)串口的設(shè)備名通常為“/dev/ttyUSB0”和“/dev/ttyUSB1”(因版本不同該設(shè)備名會有所不同),可以查看在“/dev”下的文件以確認。在本章中已經(jīng)提到過,在下對設(shè)備的操作方法與對文件的操作方法是一樣的,因此,對串口的讀寫就可以使用簡單的read()、write()函數(shù)來完成,所不同的只是需要對串口的其他參數(shù)另做配置,下面就來詳細講解串口應(yīng)用開發(fā)的步驟。

          6.4.2串口設(shè)置詳解

          串口的設(shè)置主要是設(shè)置structtermios結(jié)構(gòu)體的各成員值,如下所示:

          #includetermios.h>

          structtermios

          {

          unsignedshortc_iflag;/*輸入模式標志*/

          unsignedshortc_oflag;/*輸出模式標志*/

          unsignedshortc_cflag;/*控制模式標志*/

          unsignedshortc_lflag;/*本地模式標志*/

          unsignedcharc_line;/*線路規(guī)程*/

          unsignedcharc_cc[NCC];/*控制特性*/

          speed_tc_ispeed;/*輸入速度*/

          speed_tc_ospeed;/*輸出速度*/

          };

          termios是在POSIX規(guī)范中定義的標準接口,表示終端設(shè)備(包括虛擬終端、串口等)??谑且环N終端設(shè)備,一般通過終端編程接口對其進行配置和控制。在具體講解串口相關(guān)編程之前,先了解一下終端相關(guān)知識。

          終端有3種工作模式,分別為規(guī)范模式(canonicalmode)、非規(guī)范模式(non-canonicalmode)和原始模式(rawmode)。

          通過在termios結(jié)構(gòu)的c_lflag中設(shè)置ICANNON標志來定義終端是以規(guī)范模式(設(shè)置ICANNON標志)還是以非規(guī)范模式(清除ICANNON標志)工作,默認情況為規(guī)范模式。

          在規(guī)范模式下,所有的輸入是基于行進行處理。在用戶輸入一個行結(jié)束符(回車符、EOF等)之前,系統(tǒng)調(diào)用read()函數(shù)讀不到用戶輸入的任何字符。除了EOF之外的行結(jié)束符(回車符等)與普通字符一樣會被read()函數(shù)讀取到緩沖區(qū)之中。在規(guī)范模式中,行編輯是可行的,而且一次調(diào)用read()函數(shù)最多只能讀取一行數(shù)據(jù)。如果在read()函數(shù)中被請求讀取的數(shù)據(jù)字節(jié)數(shù)小于當前行可讀取的字節(jié)數(shù),則read()函數(shù)只會讀取被請求的字節(jié)數(shù),剩下的字節(jié)下次再被讀取。

          在非規(guī)范模式下,所有的輸入是即時有效的,不需要用戶另外輸入行結(jié)束符,而且不可進行行編輯。在非規(guī)范模式下,對參數(shù)MIN(c_cc[VMIN])和TIME(c_cc[VTIME])的設(shè)置決定read()函數(shù)的調(diào)用方式。設(shè)置可以有4種不同的情況。

          n MIN=0和TIME=0:read()函數(shù)立即返回。若有可讀數(shù)據(jù),則讀取數(shù)據(jù)并返回被讀取的字節(jié)數(shù),否則讀取失敗并返回0。

          n MIN>0和TIME=0:read()函數(shù)會被阻塞直到MIN個字節(jié)數(shù)據(jù)可被讀取。

          n MIN=0和TIME>0:只要有數(shù)據(jù)可讀或者經(jīng)過TIME個十分之一秒的時間,read()函數(shù)則立即返回,返回值為被讀取的字節(jié)數(shù)。如果超時并且未讀到數(shù)據(jù),則read()函數(shù)返回0。

          n MIN>0和TIME>0:當有MIN個字節(jié)可讀或者兩個輸入字符之間的時間間隔超過TIME個十分之一秒時,read()函數(shù)才返回。因為在輸入第一個字符之后系統(tǒng)才會啟動定時器,所以在這種情況下,read()函數(shù)至少讀取一個字節(jié)之后才返回。

          按照嚴格意義來講,原始模式是一種特殊的非規(guī)范模式。在原始模式下,所有的輸入數(shù)據(jù)以字節(jié)為單位被處理。在這個模式下,終端是不可回顯的,而且所有特定的終端輸入/輸出控制處理不可用。通過調(diào)用cfmakeraw()函數(shù)可以將終端設(shè)置為原始模式,而且該函數(shù)通過以下代碼可以得到實現(xiàn)。

          termios_p->c_iflag=~(IGNBRK|BRKINT|PARMRK|ISTRIP

          |INLCR|IGNCR|ICRNL|IXON);

          termios_p->c_oflag=~OPOST;

          termios_p->c_lflag=~(ECHO|ECHONL|ICANON|ISIG|IEXTEN);

          termios_p->c_cflag=~(CSIZE|PARENB);

          termios_p->c_cflag|=CS8;

          下面講解設(shè)置串口的基本方法。設(shè)置串口中最基本的包括波特率設(shè)置,校驗位和停止位設(shè)置。在這個結(jié)構(gòu)中最為重要的是c_cflag,通過對它的賦值,用戶可以設(shè)置波特率、字符大小、數(shù)據(jù)位、停止位、奇偶校驗位和硬軟流控等。另外c_iflag和c_cc也是比較常用的標志。在此主要對這3個成員進行詳細說明。c_cflag支持的常量名稱如表6.11所示。其中設(shè)置波特率宏名為相應(yīng)的波特率數(shù)值前加上‘B’,由于數(shù)值較多,本表沒有全部列出。

          linux操作系統(tǒng)文章專題:linux操作系統(tǒng)詳解(linux不再難懂)

          linux相關(guān)文章:linux教程



          上一頁 1 2 3 4 5 下一頁

          評論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉