嵌入式串口通信設(shè)計_第1頁
嵌入式串口通信設(shè)計_第2頁
嵌入式串口通信設(shè)計_第3頁
嵌入式串口通信設(shè)計_第4頁
嵌入式串口通信設(shè)計_第5頁
已閱讀5頁,還剩24頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、湖南文理學(xué)院課程設(shè)計報告課程名稱: 嵌入式系統(tǒng)課程設(shè)計 專業(yè)班級: 通信工程11101班 學(xué)號(2位)學(xué)生姓名: 石春波 指導(dǎo)教師: 王麗娟 完成時間: 2014年6月5日 報告成績: 評閱意見: 評閱教師 日期 湖南文理學(xué)院制嵌入式Linux系統(tǒng)的串口通信研究摘 要 嵌入式是以應(yīng)用為中心,以計算機(jī)技術(shù)為基礎(chǔ),軟件硬件可剪裁,適應(yīng)應(yīng)用系統(tǒng)對功能、可靠性、成本、體積、功耗嚴(yán)格要求的專用計算機(jī)系統(tǒng)。隨著嵌入式系統(tǒng)的發(fā)展和大規(guī)模應(yīng)用,為了提升系統(tǒng)的整體性能,必須實現(xiàn)PC機(jī)和嵌入式計算機(jī)之間的通信。在實際開發(fā)應(yīng)用中,串口通信是不可缺少的部分。 目前嵌入式系統(tǒng)與PC機(jī)之間一種非常重要而且普遍應(yīng)用的通信方

2、式。本文通過基于2410F 的嵌入式串口通信的實現(xiàn),按照嵌入式系統(tǒng)的軟、硬件結(jié)構(gòu)組成,較為詳細(xì)地介紹了串口通信的硬件電路和軟件實現(xiàn)方法。通過與計算機(jī)串口間的接,實現(xiàn)在ARM 平臺上,傳輸速率115200bps,接收來自串口(通過超級終端)的字符并將接收到的字符發(fā)送到超級終端,實現(xiàn)監(jiān)測。與外部設(shè)備通信的基本功能。關(guān)鍵字:嵌入式系統(tǒng), 串口通信,Linux系統(tǒng) 0目 錄前 言- 3-一、串口通信概述- 4 -1.1 串口通信的原理- 4 -1.2 串口通信的開發(fā)工具- 4 - 1.2.1 2410F硬件平臺簡介- 5 - 1.2.2 ARM簡介- - 5 - 1.2.3 Linux系統(tǒng)簡介- -

3、6 -1.3 串口通信的基本任務(wù)- 7 -二、系統(tǒng)分析- 8- 2.1 RS-232C標(biāo)準(zhǔn) - - 8 - 2.2 系統(tǒng)硬件結(jié)構(gòu)原理- - 15 -三、串口驅(qū)動程序設(shè)計- 16 -3.1 串口操作需要的頭文件- 16 -3.2 打開串口- 16 -3.3 串口設(shè)置- 17 -3.4 串口讀寫- 19 -3.5 關(guān)閉串口- 21 -四、總結(jié)- 22 -參考文獻(xiàn)- 23 -附 錄- 24 -前 言 串口通信是指外設(shè)和計算機(jī)間,通過數(shù)據(jù)信號線 、地線、控制線等,按位進(jìn)行傳輸數(shù)據(jù)的一種通訊方式。這種通信方式使用的數(shù)據(jù)線少,在遠(yuǎn)距離通信中可以節(jié)約通信成本,但其傳輸速度比并行傳輸?shù)汀?嵌入式系統(tǒng)的硬件平臺

4、構(gòu)架、實時嵌入式操作系統(tǒng)的移植,為今后嵌入式系統(tǒng)的后繼開發(fā)提供了一個嵌入式平臺。基于嵌入式系統(tǒng)設(shè)計原理的嵌入式開發(fā)平臺的設(shè)計的總體方案,從硬件和軟件兩個方面講述了嵌入式系統(tǒng)的設(shè)計思想和方法,及其可行性的論證。嵌入式系統(tǒng)硬件平臺的設(shè)計與調(diào)試,著重敘述了硬件平臺的整體設(shè)計方案,包括各個設(shè)計模塊的選型與接口電路的設(shè)計。隨著世界科技水平的發(fā)展,嵌入式系統(tǒng)以其小型、專用、易攜帶、可靠性高的特點(diǎn),已經(jīng)在各個領(lǐng)域得到了廣泛的應(yīng)用,如軍事國防、消費(fèi)電子、通信設(shè)備、工業(yè)控制等。隨著嵌入式系統(tǒng)軟硬件技術(shù)的飛速發(fā)展,其應(yīng)用領(lǐng)域必將更為廣闊,嵌入式系統(tǒng)的研究將會有非常廣泛的前景。本課題既可以使電子專業(yè)學(xué)生對ARM92

5、0T的嵌入式串口通信系統(tǒng)的實際應(yīng)用有深入的了解,更重要的是培養(yǎng)了我們的軟硬件動手能力,是我們所學(xué)專業(yè)知識、理論、技能和培養(yǎng)學(xué)生獨(dú)立完成基本科研任務(wù)能力的一個綜合檢驗,具有一定的效果和意義。一、串口通信概述 所謂串口通信,是指外設(shè)和計算機(jī)間使用一根數(shù)據(jù)信號線(另外需要地線),數(shù)據(jù)在一根數(shù)據(jù)信號線上一位一位進(jìn)行傳輸,每一位數(shù)據(jù)都占據(jù)一個固定的時間長度。 串口傳輸是二進(jìn)制代碼序列在一條信道上以位(元碼)為單位,按時間順序且按位傳輸?shù)耐ㄐ欧绞健4袀鬏敃r,發(fā)送端按位發(fā)送,接收端按位接受,同時還要對所傳輸?shù)奈患右源_認(rèn),所以收發(fā)雙方要采取同步措施,否則接受端將不能正確區(qū)分出所傳輸?shù)臄?shù)據(jù)。 串口通信不但能實

6、現(xiàn)計算機(jī)與嵌入式開發(fā)板之間的數(shù)據(jù)傳輸,而且還能實現(xiàn)計算機(jī)對嵌入式開發(fā)板的控制。若采用普通單片機(jī),對外部設(shè)備的訪問就需要利用復(fù)雜的匯編語言進(jìn)行編程或者使用C 51 自己編寫設(shè)備的初始化以及讀寫訪問程序,這樣的過程不僅復(fù)雜,而且不利于大規(guī)模的開發(fā)和設(shè)計。ARM 與8051 等普通單片機(jī)相比,具有開發(fā)簡單、靈活,而且性能穩(wěn)定、功能易于擴(kuò)展等一系列優(yōu)勢,因而在汽車電子、手持設(shè)備、無線領(lǐng)域和航空航天等嵌入式系統(tǒng)中得到廣泛的應(yīng)用。將Linux 移植到ARM 嵌入式處理器后,可以利用操作系統(tǒng)中提供的系統(tǒng)調(diào)用把串口及其他外設(shè)當(dāng)成普通文件進(jìn)行操作,讀寫方便,因此進(jìn)行相應(yīng)開發(fā)可以提高系統(tǒng)編程效率,而且還可以簡化調(diào)

7、試的復(fù)雜程度。1.1 串口通信的原理串行端口的本質(zhì)功能是作為CPU和串行設(shè)備間的編碼轉(zhuǎn)換器。當(dāng)數(shù)從CPU經(jīng)過串行端口發(fā)送出去時,字節(jié)數(shù)據(jù)轉(zhuǎn)換為串行的位。在接收數(shù)據(jù)時,串行的位被轉(zhuǎn)換為字節(jié)數(shù)據(jù)。串口是系統(tǒng)資源的一部分,應(yīng)用程序要使用串口進(jìn)行通信,必須在使用之前向操作系統(tǒng)提出申請要求(打開串口),通信完成后必須釋放資源(關(guān)閉串口)。1.2 串口通信的開發(fā)工具 本次開發(fā)采用的硬件平臺是ARM920T處理器的2410F,開發(fā)系統(tǒng)平臺是Lin ux系統(tǒng)。1.2.1 2410F硬件平臺簡介2410F 是基于三星ARM9 嵌入式處理器 S3C2410 處理器的一款開發(fā)平臺,“F”指基于2410 的第六代開發(fā)

8、套件。系統(tǒng)運(yùn)行在 202M 的主2410F 是基于三星ARM9 嵌入式處理器 S3C2410 處理器頻下發(fā)揮出色的性能。可以完成MP3,MPG,VOIP 等工作。2410 資源豐富適合 ARM 處理器的初學(xué)者學(xué)習(xí)使用。2410F 上面使用的核心模塊體積小資源豐富,IO 充足還可以應(yīng)用在二次開發(fā)的產(chǎn)品當(dāng)中。這款設(shè)備主要包括核心板與底板兩個部分,核心板采用6 層PCB 設(shè)計、底板采用2 層PCB 板設(shè)計,核心器件是基于目前業(yè)內(nèi)主流使用的SAMSUNG ARM9S3C2410 處理器,主頻202MHz,配套的存儲器,網(wǎng)卡等設(shè)備;底板主要是各類型的接口。S3C2410處理器是Samsung公司基于AR

9、M公司的ARM920T處理器核,采用0.18um制造工藝的32位微控制器。該處理器擁有:獨(dú)立的16KB指令Cache和16KB數(shù)據(jù)Cache,MMU,支持TFT的LCD控制器,NAND閃存控制器,3路UART,4路DMA,4路帶PWM的Timer ,I/O口,RTC,8路10位ADC,Touch Screen接口,IIC-BUS 接口,IIS-BUS 接口,2個USB主機(jī),1個USB設(shè)備,SD主機(jī)和MMC接口,2路SPI。S3C2410處理器最高可運(yùn)行在203MHz。它是基于ARM920T 內(nèi)核的16/32 位RISC 處理器, 主要應(yīng)用于嵌入式系統(tǒng)中。S3C2410 擁有強(qiáng)大的數(shù)據(jù)處理能力,

10、又有著低成本,低功耗等優(yōu)點(diǎn),在各種手持及移動設(shè)備上的應(yīng)用越來越廣泛,基于其平臺的程序功能也越來越復(fù)雜。于是,在其平臺上架構(gòu)多線程的操作系統(tǒng)已成為越來越多系統(tǒng)設(shè)計者的訴求, 本文介紹多線程在S3C2410 上的具體實現(xiàn)過程。1.2.2 ARM簡介ARM(Advanced RISC Machines),既可以認(rèn)為是一個公司的名字,也可以認(rèn)為是對一類微處理器的通稱,還可以認(rèn)為是一種技術(shù)的名字。1991 年ARM 公司成立于英國劍橋,主要出售芯片設(shè)計技術(shù)的授權(quán)。目前,采用ARM 技術(shù)知識產(chǎn)權(quán)(IP)核的微處理器,即通常所說的ARM微處理器,已遍及工業(yè)控制、消費(fèi)類電子產(chǎn)品、通信系統(tǒng)、網(wǎng)絡(luò)系統(tǒng)、無線系統(tǒng)、

11、軍用系統(tǒng)等各類產(chǎn)品市場,基于ARM 技術(shù)的微處理器應(yīng)用約占據(jù)了32 位RISC 微處理器70以上的市場份額,ARM 技術(shù)正在逐步滲入到我們生活的各個方面。ARM 公司是專門從事基于RISC 技術(shù)芯片設(shè)計開發(fā)的公司,作為知識產(chǎn)權(quán)供應(yīng)商,本身不直接從事芯片生產(chǎn),靠轉(zhuǎn)讓設(shè)計許可,由合作公司生產(chǎn)各具特色的芯片,世界各大半導(dǎo)體生產(chǎn)商從ARM 公司購買其ARM 微處理器核,根據(jù)各自不同的應(yīng)用領(lǐng)域,加入適當(dāng)?shù)耐鈬娐?,從而形成自己的ARM 微處理器芯片進(jìn)入市場。目前全世界有幾十家大的半導(dǎo)體公司都使用ARM 公司的授權(quán),因此既使得ARM 技術(shù)獲得更多的第三方工具、制造、軟件的支持,又使整個系統(tǒng)成本降低,使產(chǎn)品

12、更容易進(jìn)入市場并被消費(fèi)者所接受,更具有競爭力。ARM 微處理器一般具有如下特點(diǎn):􀂗 (1)體積小、低功耗、低成本、高性能;􀂗 (2)支持 Thumb(16 位)/ARM(32 位)雙指令集,能很好的兼容8/16 位器件;􀂗 (3)大量使用寄存器,指令執(zhí)行速度更快;􀂗 (4)大多數(shù)數(shù)據(jù)操作都在寄存器中完成;􀂗 (5)尋址方式靈活簡單,執(zhí)行效率高;􀂗 (6)指令長度固定。1.2.3 Linux系統(tǒng)簡介Linux是一類Unix計算機(jī)操作系統(tǒng)的統(tǒng)稱。Linux操作系統(tǒng)也是自由軟件和開放源代碼發(fā)展

13、中最著名的例子。Linux 一般有四個主要部分:內(nèi)核、Shell、文件結(jié)構(gòu)和實用工具。(1)Linux 內(nèi)核內(nèi)核是系統(tǒng)的心臟,是運(yùn)行程序和管理像磁盤和打印機(jī)等硬件設(shè)備的核心程序。它從用戶那里接受命令并把命令送給內(nèi)核去執(zhí)行。(2)Linux ShellShell 是系統(tǒng)的用戶界面,提供了用戶與內(nèi)核進(jìn)行交互操作的一種接口。它接收用戶輸入的命令并把它送入內(nèi)核去執(zhí)行。實際上Shell 是一個命令解釋器,它解釋由用戶輸入的命令并且把它們送到內(nèi)核。不僅如此,Shell 有自己的編程語言用于對命令的編輯,它允許用戶編寫由shell 命令組成的程序。Shell 編程語言具有普通編程語言的很多特點(diǎn),比如它也有循

14、環(huán)結(jié)構(gòu)和分支控制結(jié)構(gòu)等,用這種編程語言編寫的Shell 程序與其他應(yīng)用程序具有同樣的效果。(3)Linux 文件結(jié)構(gòu)文件結(jié)構(gòu)是文件存放在磁盤等存儲設(shè)備上的組織方法。主要體現(xiàn)在對文件和目錄的組織上。目錄提供了管理文件的一個方便而有效的途徑。我們能夠從一個目錄切換到另一個目錄,而且可以設(shè)置目錄和文件的權(quán)限,設(shè)置文件的共享程度。使用Linux,用戶可以設(shè)置目錄和文件的權(quán)限,以便允許或拒絕其他人對其進(jìn)行訪問。(4)Linux 實用工具標(biāo)準(zhǔn)的 Linux 系統(tǒng)都有一套叫做實用工具的程序,它們是專門的程序,例如編輯器、執(zhí)行標(biāo)準(zhǔn)的計算操作等。用戶也可以產(chǎn)生自己的工具。實用工具可分三類:􀂗

15、編輯器:用于編輯文件。􀂗 過濾器:用于接收數(shù)據(jù)并過濾數(shù)據(jù)。􀂗 交互程序:允許用戶發(fā)送信息或接收來自其他用戶的信息。1.3 串口通信的基本任務(wù)(1)實現(xiàn)數(shù)據(jù)格式化:因為來自CPU 的是普通的并行數(shù)據(jù),所以,接口電路應(yīng)具有實現(xiàn)不同串行通信方式下的數(shù)據(jù)格式化的任務(wù)。在異步通信方式下,接口自動生成起止式的幀數(shù)據(jù)格式。在面向字符的同步方式下,接口要在待傳送的數(shù)據(jù)塊前加上同步字符。(2)進(jìn)行串-并轉(zhuǎn)換:串行傳送,數(shù)據(jù)是一位一位串行傳送的,而計算機(jī)處理數(shù)據(jù)是并行數(shù)據(jù)。所以當(dāng)數(shù)據(jù)由計算機(jī)送至數(shù)據(jù)發(fā)送器時,首先把串行數(shù)據(jù)轉(zhuǎn)換為并行數(shù)才能送入計算機(jī)處理。因此串并轉(zhuǎn)換是串接口電路

16、和的重要任務(wù)。(3)控制數(shù)據(jù)傳輸速率:串行通信接口電路應(yīng)具有對數(shù)據(jù)傳輸速率-波特率進(jìn)行先擇和控制的能力。(4)進(jìn)行錯誤檢測:在發(fā)送接口電路對傳送的字符數(shù)據(jù)自動生成奇偶校驗位或其他校驗碼。在接收時,接口電路檢查字符的奇偶校驗或其他檢驗碼,確定是否發(fā)生傳送錯誤。(5)進(jìn)行TTL 與EIA 電平轉(zhuǎn)換:CPU 和終端均采用TTL 電平及正邏輯,它們與EIA 采用的電平及負(fù)邏輯不兼容,需在接口電路中進(jìn)行轉(zhuǎn)換。二、系統(tǒng)分析 串行端口的本質(zhì)功能是作為CPU 和串行設(shè)備間的編碼轉(zhuǎn)換器,一般微機(jī)內(nèi)都配有通信適配器,使計算機(jī)能夠與其他具有RS-232C 串口的計算機(jī)或設(shè)備進(jìn)行通信。本系統(tǒng)主要目的是實現(xiàn)宿主機(jī)與目標(biāo)

17、機(jī)之間的近距離串行通信, 采用的宿主機(jī)是Intel Centrino架構(gòu)的Red Hat Linux 9.03 環(huán)境PC機(jī), 而目標(biāo)機(jī)是ARM 架構(gòu)的開發(fā)板。本系統(tǒng)中目標(biāo)機(jī)開發(fā)板的內(nèi)核采用的是三星的S3C2410 ,該開發(fā)板采用核心板加底板的模式, 核心板接口采用DIMM200 標(biāo)準(zhǔn)連接器,工作非常可靠,可穩(wěn)定運(yùn)行在203 MHz 的時鐘頻率下。其外設(shè)非常豐富,功能強(qiáng)大,完全可以滿足設(shè)計需要。串口線采用常用的RS-232C 型接口模式,能實現(xiàn)計算機(jī)與開發(fā)板間的數(shù)據(jù)傳輸與控制。嵌入式串口通信采用EIA RS-232C標(biāo)準(zhǔn)。2.1 RS-232C標(biāo)準(zhǔn)RS-232C是1969年由電子工業(yè)協(xié)會(EIA

18、)公布的標(biāo)準(zhǔn)。該標(biāo)準(zhǔn)的用途是定義數(shù)據(jù)終端設(shè)備DTE(Data Terminal Equipment)與數(shù)據(jù)通信設(shè)備DCE(Data Communication Equioment)的接口特性。數(shù)據(jù)終端設(shè)備就是連接通信兩端設(shè)備的連線(如空MODEM)或其他設(shè)備。RS-232C標(biāo)準(zhǔn)的構(gòu)架如圖2.1所示。(數(shù)據(jù)終端設(shè)備DTE)(數(shù)據(jù)通信設(shè)備DCE)(數(shù)據(jù)通信設(shè)備DCE)(數(shù)據(jù)終端設(shè)備DTE)計算機(jī)BMODEMMODEM計算機(jī)ARS-232C通信線路RS-232C圖2.1 RS-232C標(biāo)準(zhǔn)的構(gòu)架(RS-232C標(biāo)準(zhǔn)的一些主要規(guī)范如下。(1) 電氣特性RS-232C采用非歸零、雙極性編碼,且使用負(fù)邏輯

19、規(guī)定的邏輯電平:-15-5V規(guī)定為邏輯“1”。+5+15V規(guī)定為邏輯“0”。信號電平與TTL電平不兼容,所以需要電平轉(zhuǎn)換電路(通常使用MAX3232轉(zhuǎn)換)。電平轉(zhuǎn)換電路如圖2.2所示。RS-232C輸出TTL輸出RS-232C接口電路MAX3232RS-232C輸入TTL輸入圖2.2 RS-232C的電平轉(zhuǎn)換電路(2) 引腳定義目前廣泛的DB9引腳定義如圖2.3所示。信號引腳定義的說明見表2.1。9 RIGND 58 CTSDTR 47 RTSTXD 3RXD 26 DSRDCD 1圖2.3 DB9 引腳定義表2.1 DB9引腳說明9針串口DB9針號功能說明縮寫1輸入,數(shù)據(jù)載波檢測DCD2輸入

20、,接收數(shù)據(jù)RXD3輸出,發(fā)送數(shù)據(jù)TXD4輸出,DTE準(zhǔn)備就緒DTR5信號地GND6輸入,MODEM準(zhǔn)備就緒DSR7輸出,請求發(fā)送RTS8輸入,允許發(fā)送CTS9輸入,振鈴指示DELL(3) 字符(幀)格式RS-232C采用起止式異步通信協(xié)議,其特點(diǎn)是一個字符接著一個字符進(jìn)行傳輸,并且傳輸一個字符總是以起始位開始,以停止位結(jié)束,字符之間沒有固定的時間間隔要求。其傳輸格式如圖2.4所示,每一個字符的前面都有一位起始位(低電平,邏輯“0”),字符本身有58位數(shù)據(jù)位,接著字符后面是一位校驗碼(也可以沒有校驗碼),最后是停止位。停止位后面是不定長度的空閑位。停止位和空閑位都規(guī)定為高電平(邏輯值“1”),這

21、樣就能保證起始位開始處一定有一個下跳沿,便于接受方識別。校驗位(可以沒有)起始位數(shù)據(jù)停止位接收方發(fā)送方1 x 1 1 1 1 1 0 1 1 0數(shù)據(jù)流方向1 1 1 1 1 1 0 1 1 01 1 11 0 1 0數(shù)據(jù)單元之間的間隔圖2.4 串行傳輸?shù)墓ぷ髟硎疽鈭D從圖2.4 中可以看出,這種格式是靠起始位和停止位來實現(xiàn)字符的界定或同步的,故稱為起止式協(xié)議。沒有統(tǒng)一的時鐘,沒有同步字符,依靠起始位和停止位標(biāo)識每一幀,傳輸時,數(shù)據(jù)的地位在前,高位在后。起始位實際上是作為同步信號附加進(jìn)來的,當(dāng)它變?yōu)榈碗娖綍r,告訴接受方傳輸開始,后面接著是數(shù)據(jù)位;而停止位則標(biāo)志一個字符的結(jié)束。這樣就為通信雙方提供

22、了何時開始收發(fā)、何時結(jié)束的標(biāo)志。傳輸開始前,收發(fā)雙方把所采用的字符格式(包括字符的數(shù)據(jù)位長度、停止位位數(shù)、有無校驗位以及是奇校驗還是偶校驗等)和數(shù)據(jù)的傳輸速率進(jìn)行統(tǒng)一規(guī)定。傳輸開始后,接收設(shè)備不斷地檢測線路,看是否有起始位到來。當(dāng)收到一系列的“1”(停止位或空閑位)之后,檢測到一個下跳沿(由“1”變?yōu)椤?”),說明起始位出現(xiàn),起始位經(jīng)確認(rèn)后,就開始接收所規(guī)定的數(shù)據(jù)位和奇偶校驗位以及停止位。然后去掉停止位,對數(shù)據(jù)位進(jìn)行串并轉(zhuǎn)換,并且經(jīng)奇偶校驗無誤后,才算正確地接收到一個字符。一個字符接收完畢,接收設(shè)備又繼續(xù)測試線路,監(jiān)視“0”電平的到來和下一位字符的開始,直到全部數(shù)據(jù)傳輸完畢。(4)握手協(xié)議RS

23、-232C標(biāo)準(zhǔn)除了規(guī)定的字符格式和通信波特率以外,還在數(shù)據(jù)終端設(shè)備DTE和數(shù)據(jù)通信設(shè)備DCE之間定義了一套握手協(xié)議。握手協(xié)議的過程如圖2.5所示。數(shù)據(jù)終端設(shè)備DTE 本地MODEM 遠(yuǎn)程MODEM 遠(yuǎn)程DTEDTRDSRRTS呼叫載波信號DCD 載波確認(rèn)CTSTXD圖2.5 DTE與DCE的握手協(xié)議過程DTR:數(shù)據(jù)終端設(shè)備DTE準(zhǔn)備就緒。DTE加電并能正確實現(xiàn)通信時,向DCE發(fā)出DTR信號。DSR:數(shù)據(jù)通信設(shè)備DCE準(zhǔn)備就緒。MODEM加電并能正確執(zhí)行通信功能時,DTE發(fā)出DSR信號。RTS:請求發(fā)送。當(dāng)DTE有數(shù)據(jù)需要向另一遠(yuǎn)程DTE傳輸時,DTE在檢測DSR有效時向本地MODEM發(fā)出RTS

24、信號。本地MODEM檢測到RTS有效,然后根據(jù)目的電話號碼向遠(yuǎn)程MODEM發(fā)出呼叫。遠(yuǎn)程MODEM收到該呼叫,發(fā)出回答載波信號。本地MODEM接受到此載波信號,然后向遠(yuǎn)程MODEM發(fā)出原載波信號進(jìn)行確認(rèn),同時向DTE發(fā)出數(shù)據(jù)載波信號DCD。DCD:數(shù)據(jù)載波信號檢測。由MODEM發(fā)向數(shù)據(jù)終端設(shè)備DTE,表示已檢測到對方載波信號。 CTS:允許發(fā)送,當(dāng)一個MODEM辨認(rèn)出對方MODEM已經(jīng)準(zhǔn)備接收時,使用CTS信號通知自己的DTE,表示這個通信通路已經(jīng)做好數(shù)據(jù)傳輸?shù)臏?zhǔn)備,允許DTE進(jìn)行數(shù)據(jù)發(fā)送。至此,通信鏈路建立,可以通信。RI:振鈴指示。如果MODEM具有自動應(yīng)答能力,當(dāng)對方呼叫傳來時,MODE

25、M向DTE發(fā)出該信號,指示此呼叫。在電話呼叫振鈴結(jié)束后,MODEM在DTE已準(zhǔn)備好的情況下(即DTR有效),立即向?qū)Ψ阶詣討?yīng)答。(5) 雙機(jī)互連方式雙機(jī)可以利用RS-232C通信接口進(jìn)行直接互連(數(shù)據(jù)終端設(shè)備DTE到DTE),即空MODEM連接。這種形式在嵌入式系統(tǒng)中應(yīng)用極為廣泛。由于RS-232C標(biāo)準(zhǔn)中有兩對硬件握手協(xié)議的引線:DTR和DSR、RTS和CTS,根據(jù)應(yīng)用握手協(xié)議的機(jī)制不同,可分為3種情況:無硬件握手、DTR和DSR握手、RTS和CTS握手。 無硬件握手情況無硬件握手的雙機(jī)互連如圖2.6所示。DTE TXD RXD GND DTETXDRXDGND計算機(jī)B計算機(jī)A圖2.6 無握手

26、的雙機(jī)互連無硬件握手的連線最簡單,只需要3根線,應(yīng)用比較多。但通信不可靠,接收緩沖區(qū)容易溢出。 DTR和DSR握手情況DTR和DSR握手的雙機(jī)互連如圖2.7所示。DTE TXD RXD GND DTRDSR DTETXDRXDGNDDTRDSR計算機(jī)B計算機(jī)A圖2.7 DTR和DSR握手的雙機(jī)互連采用DTR和DSR握手進(jìn)行發(fā)送和接收數(shù)據(jù)的過程如下(設(shè)計算機(jī)A接收,計算機(jī)B發(fā)送): 若計算機(jī)A已經(jīng)準(zhǔn)備就緒,則使DTR有效。計算機(jī)B通過采集DSR,得知計算機(jī)A已經(jīng)做好接收數(shù)據(jù)的準(zhǔn)備,可以發(fā)送數(shù)據(jù)。若計算機(jī)A為準(zhǔn)備好,則DTR無效,計算機(jī)B通過采集DSR,得知計算機(jī)A尚未做好接收數(shù)據(jù)的準(zhǔn)備,停止發(fā)送

27、數(shù)據(jù)。 RTS和CTS握手情況RTS和CTS握手的雙機(jī)互連如圖2.8所示。DTE TXD RXD GND RTS CTS DTETXDRXDGNDRTSCTS計算機(jī)A計算機(jī)B圖2.8 RTS和CTS握手的雙機(jī)互連利用RTS和CTS握手進(jìn)行發(fā)送和接收數(shù)據(jù)的過程如下(設(shè)計算機(jī)A接收、計算機(jī)B發(fā)送):若計算機(jī)A已經(jīng)準(zhǔn)備就緒,則使RTS有效。計算機(jī)B通過采集CTS,得知計算機(jī)A已經(jīng)做好接收數(shù)據(jù)的準(zhǔn)備,可以發(fā)送數(shù)據(jù)。若計算機(jī)A未準(zhǔn)備好,則RTS無效,計算機(jī)B通過采集CTS,得知計算機(jī)A尚未做好接收數(shù)據(jù)的準(zhǔn)備,停止發(fā)送數(shù)據(jù)。2.2 系統(tǒng)硬件結(jié)構(gòu)原理在串口通信的實現(xiàn)過程中,要保證數(shù)據(jù)傳輸?shù)目煽啃院头€(wěn)定性,

28、其硬件設(shè)計是必不可少的, 本文中選用S3C2410 芯片作為核心器件。S3C2410 芯片是SAMGSUNG公司16/ 32 位的RISC 處理器,采用ARM920 T 內(nèi)核,內(nèi)部具有2 個獨(dú)立的UART 控制器以及分開的16 kB的指令Cache 和16 kB 數(shù)據(jù)Cache ,每個控制器支持的最高波特率可達(dá)到230. 4 kb/ s 。S3C2410 芯片的這些特點(diǎn),為實現(xiàn)在Linux 操作系統(tǒng)下計算機(jī)與開發(fā)板間的串口通信提供了可靠的保證。基于S3C2410 的嵌入式串口通信的硬件結(jié)構(gòu)原理如圖2.9所示: 宿主機(jī)(計算機(jī)系統(tǒng)) 目標(biāo)機(jī)(開發(fā)板) JTAG接口模塊電源模塊計算機(jī)主機(jī)設(shè)備(帶R

29、S-232接口)顯示器液晶顯示模塊S3C2410 ARM芯片串行接口線DIMM200連接器接口模塊鍵盤控制模塊鍵盤外擴(kuò)存儲器模塊圖2.9 系統(tǒng)硬件結(jié)構(gòu)原理圖宿主機(jī)即計算機(jī)系統(tǒng)中,在Linux 操作系統(tǒng)下編寫好串口通信的程序,通過 網(wǎng)絡(luò)ftp下載至目標(biāo)機(jī)即開發(fā)板中,在相應(yīng)的軟件控制命令下,通過串行接口線即可實現(xiàn)宿主機(jī)與目標(biāo)機(jī)間數(shù)據(jù)的發(fā)送和接收。目標(biāo)機(jī)中電源模塊提供了開發(fā)板系統(tǒng)工作所需的正常電壓,各種數(shù)據(jù)信息可以通過液晶顯示模塊及時顯示出來,還可以通過鍵盤控制模塊來實現(xiàn)對目標(biāo)機(jī)操作的控制,外擴(kuò)存儲器模塊可以由FLASH 或SDRAM 構(gòu)成,當(dāng)然作為一個完整的系統(tǒng),還必須配有其他外圍電路,以保證系統(tǒng)

30、的正常工作。 三、串口驅(qū)動程序設(shè)計 由于嵌入式系統(tǒng)是一個受資源限制的系統(tǒng),因此不能直接在嵌入式系統(tǒng)硬件上進(jìn)行編程。作為一個完整的嵌入式系統(tǒng),其軟件設(shè)計也是一個很重要的方面。本系統(tǒng)軟件的實現(xiàn)是通過串口設(shè)置和讀寫串口等操作來完成宿主機(jī)與目標(biāo)機(jī)間的串口通信。3.1 串口操作需要的頭文件在開發(fā)嵌入式Linux串口驅(qū)動程序時,需要以下頭文件。#include <stdio.h> /*標(biāo)準(zhǔn)輸入輸出定義*/#include <stdlib.h> /*標(biāo)準(zhǔn)函數(shù)庫定義*/#include <unisted.h> /*UNIX標(biāo)準(zhǔn)函數(shù)定義*/#include <sys/t

31、ypes.h>#include <sys/stat.h>#include <fcntl.h> /*文件控制定義*/#include <termios.h> /*POSIX終端控制定義*/#include <errno.h> /*錯誤號定義*/3.2 打開串口在嵌入式Linux系統(tǒng)中,打開一個串口設(shè)備和打開普通文件一樣。嵌入式Linux系統(tǒng)下的串口文件通常位于/dev下:串口一為/dev/ttyS0;串口二為/dev/ttyS1。打開串口時通過使用標(biāo)準(zhǔn)的文件函數(shù)open( )來進(jìn)行操作的,下面假設(shè)以讀寫方式打開串口一。int fd;/文件描述

32、符fd=open(“/dev/ttyS0”,O_RDWR);/以讀寫方式打開串口if(fd=-1)/如果不能打開串口一 perror(“提示錯誤!”); 3.3 串口設(shè)置在Linux 系統(tǒng)中,設(shè)備都是以文件的形式表示的,串口參數(shù)一般包括波特率、起始位數(shù)量、停止位數(shù)量等。下面對這些串口參數(shù)進(jìn)行詳細(xì)說明。(1) 起始位通信線路上沒有數(shù)據(jù)被傳送時,處于邏輯“1”狀態(tài)。當(dāng)發(fā)送字符數(shù)數(shù)據(jù)是首先發(fā)送一個邏輯“0”信號,這個邏輯低電平就是起始位。起始位通過通信線路傳輸?shù)浇邮斩?,接收端檢測到這個低電平之后,就開始準(zhǔn)備接收數(shù)據(jù)位信號。起始位所起的作用就是使通信雙方同步。(2) 數(shù)據(jù)位當(dāng)接收端收到起始位后,開始接

33、收數(shù)據(jù)位。數(shù)據(jù)位的個數(shù)可以是58位。在數(shù)據(jù)傳送過程中,數(shù)據(jù)位從最低有效位開始傳送,接收端收到數(shù)據(jù)后,依次將其轉(zhuǎn)換成并行數(shù)據(jù)。(3) 奇偶校驗位數(shù)據(jù)位發(fā)送完后,為了保證數(shù)據(jù)的可靠性,還要傳送一個奇偶校驗位。奇偶校驗用于差錯檢測。如果選擇偶檢驗,則數(shù)據(jù)位和奇偶位的邏輯“1”的個數(shù)必須為偶數(shù),相反,如果是奇檢驗,則數(shù)據(jù)位和奇偶位的邏輯“1”的個數(shù)為奇數(shù)。(4) 停止位在奇偶位或數(shù)據(jù)位(當(dāng)無奇偶校驗時)之后發(fā)送停止位。停止位表示一個數(shù)據(jù)的結(jié)束。它可以是12位的低電平。接收端收到停止位后,通信線路便恢復(fù)邏輯“1”的狀態(tài),直到下一個數(shù)據(jù)的起始位到來。(5) 波特率通信線路上傳輸?shù)奈唬ùa元)信號都必須保持一

34、致的信號持續(xù)時間,單位時間內(nèi)傳送碼元的數(shù)目稱為波特率。對大多數(shù)嵌入式設(shè)備來說,其波特率都設(shè)置為115200。訪問串行口通過對設(shè)備文件的訪問來實現(xiàn),僅需打開相應(yīng)的設(shè)備文件。串口的設(shè)置主要是設(shè)置struct termios 結(jié)構(gòu)體中的各成員值。#include<termios.h>struct termiounsigned short c_iflag; /*輸入模式標(biāo)志*/unsigned short c_oflag; /*輸出模式標(biāo)志*/unsigned short c_cflag; /*控制模式標(biāo)志*/unsigned short c_lflag; /*本地模式標(biāo)志*/unsign

35、ed char c_line; /*線路規(guī)范*/unsigned char c_ccNCC; /*控制特征值*/波特率設(shè)置:struct termios option;tcgetattr(fd,&option);cfsetispeed(&option,B115200);/*設(shè)置為115200Bps*/cfsetospeed(&option,B115200);tcsetattr(fd,TCANOW,&option);檢驗位設(shè)置:無校驗 8 位:options.c_cflag &=PARENBoptions.c_cflag &=CSTOPB;opti

36、ons.c_cflag &=CSIZE;options.c_cflag=CS8;奇效驗(Odd)7 位:options.c_cflag=PARENB;options.c_cflag &=PARODD;options.c_cflag &=CSTOPB;options.c_cflag &=CSIZE;options.c_cflag=CS7;偶校驗(Even)7 位:options.c_cflag &=PARENB;options.c_cflag=OARODD;options.c_cflag &= CSTOPB;options.c_cflag &

37、;=CSIZE;options.c_cflag=CS7;Space 校驗7 位:options.c_cflag &= PARENB;options.c_cflag &=CSTOPB;options.c_cflag &=&CSIZE;options.c_cflag=CS8;停止位設(shè)置:1位: options.c_cflag &=CSTOPB;2位: options.c_cflag=CSTOPB;模式設(shè)置:需要注意的是,如果不是開發(fā)終端之類的,只是串口傳輸數(shù)據(jù),而不需要串口來處理,那么使用原始模式(Raw Mode)方式來通訊。options.c_lflag

38、 &=(ICANONECHOECHOEISIG);/*Input*/options.c_oflag &=OPOST;/*Output*/3.4 串口讀寫在Linux 系統(tǒng)中,對設(shè)備和目錄的操作都等同于文件的操作,這樣大大簡化了系統(tǒng)對不同設(shè)備的處理,提高了效率。在程序中,設(shè)備和文件都是使用文件描述符來進(jìn)行操作的。文件描述符是一個非負(fù)的整數(shù),是一個索引值,并指向內(nèi)核中每個進(jìn)程打開文件的記錄表。當(dāng)打開一個現(xiàn)存的文件或者是創(chuàng)建一個新文件時,內(nèi)核就向進(jìn)程返回一個文件描述符;當(dāng)需要讀寫時也需要將文件描述符作為參數(shù)傳遞給相應(yīng)的函數(shù)。在Linux 系統(tǒng)中,所有的設(shè)備文件都位于“/ dev”下,

39、其中串口對應(yīng)的設(shè)備名為“/ dev/ ttyS0”,因此對串口的讀寫就可以像讀寫(“read”和“write”) 普通文件一樣來讀寫設(shè)備文件,所不同的是需要對串口的其他參數(shù)另做配置。打開串口之后,讀寫串口就很容易了,把串口當(dāng)作文件讀寫就可以了。(1)發(fā)送數(shù)據(jù)char butter1024;int Length=1024;int nByte;nByte=write(fd,buffer,Length);(2)讀取串口數(shù)據(jù)使用文件操作read 函數(shù)讀取,如果設(shè)置為原始模式(Raw Mode)傳輸數(shù)據(jù),那么read 函數(shù)返回的字符數(shù)是實際串口收到的字符數(shù)。讀取數(shù)據(jù)時比較需要技巧的。char buff1

40、024;int Len=1024;int rdadByte=read(fd,buff,Len);也可以使用操作文件的函數(shù)來實現(xiàn)異步讀取,如fcntl,或者selectt 等來操作。fd_set rfds;struct timeval tv;int retval;/*下面幾行設(shè)置要監(jiān)視進(jìn)行讀寫操作的文件集*/FD-ZERO(&rfds); /文件集清零FD_SET(portsportNo.handle,&rfds); /向集合中添加一個文件句柄tv.tv_sec=Timeout/1000; /設(shè)置等待的時間tv.tv_usec=(Timeeout%1000)*1000;retva

41、l=select(16,&rfds,NULL,NULL,&tv;) /文件所監(jiān)視的文件集準(zhǔn)備好.if(rdtvel) /文件集中有文件在等待時間內(nèi)準(zhǔn)備好了.actuaIRead=read(portsportNo.handle,buf,maxCnt); /讀取數(shù)據(jù)下面兩個實例給出了串口讀和寫兩個程序部分代碼。寫串口的程序?qū)⒃谒拗鳈C(jī)上運(yùn)行,讀串口程序?qū)⒃谀繕?biāo)板上運(yùn)行。寫串口部分程序:doprintf(“Input some words(enter quit to exit):”);memset(buff, 0,BUFFER_SIZE);if(fgets(buff,BUFFER_SI

42、ZE,stdin)=NULL)perror(“fgets”);break;write(fd,buff,strlen(buff);whie(strncmp(buff,”quit”,4);讀串口部分程序:domemset(buff,0,BUFFER_SIZE);if(read(fd,buff,BUFFER_SIZE)>0)printf(“The received words are:%s”,buff);while(strncmp(buff,”quit”,4);close(fd);3.5 關(guān)閉串口在Linux 系統(tǒng)中,對設(shè)備和目錄的操作都等同于文件的操作, 關(guān)閉串口就是關(guān)閉文件,而設(shè)備和文件都

43、是使用文件描述符來進(jìn)行操作的。文件描述符是一個索引值,指向內(nèi)核中每個進(jìn)程打開文件的記錄表,因此關(guān)閉文件就只要關(guān)閉文件描述符就可以了。4、 總結(jié) 本文介紹了一種基于嵌入式的串口通信系統(tǒng),采用S3C2410 芯片作為串口 通信的控制核心器件,實現(xiàn)了在Linux 操作系統(tǒng)下宿主機(jī)與目標(biāo)機(jī)間串口通信 的基本功能。基于嵌入式系統(tǒng)設(shè)計原理的嵌入式開發(fā)平臺的設(shè)計的總體方案,從硬件和軟件兩個方面講述了嵌入式系統(tǒng)的設(shè)計思想和方法,及其可行性的論證。嵌入式系統(tǒng)硬件平臺的設(shè)計與調(diào)試,著重敘述了硬件平臺的整體設(shè)計方案,包括各個設(shè)計模塊的選型與接口電路的設(shè)計。隨著世界科技水平的發(fā)展,嵌入式系統(tǒng)以其小型、專用、易攜帶、可

44、靠性高的特點(diǎn),已經(jīng)在各個領(lǐng)域得到了廣泛的應(yīng)用,如軍事國防、消費(fèi)電子、通信設(shè)備、工業(yè)控制等。隨著嵌入式系統(tǒng)軟硬件技術(shù)的飛速發(fā)展,其應(yīng)用領(lǐng)域必將更為廣闊,嵌入式系統(tǒng)的研究將會有非常廣泛的前景。通過這兩個周的學(xué)習(xí),還是學(xué)到了不少的知識!不僅糾正了課程學(xué)習(xí)過程中出現(xiàn)的許多錯誤,還在試驗中驗證了自己的一些猜想。在學(xué)習(xí)的過程中有失敗,當(dāng)然也有困惑,有成功,當(dāng)然就有喜悅。雖然只是課程設(shè)計,我還是認(rèn)真對待,能認(rèn)識到自己的過錯和不足不也是一件幸事嗎!做學(xué)問也是做人,再作學(xué)問的過程中體味做人的道理不也是一種收獲嗎?記得古語中說:“學(xué),然后知不足”!爭取在以后的學(xué)習(xí)中改正自己。參考文獻(xiàn)1張思民編著.嵌入式系統(tǒng)設(shè)計與

45、應(yīng)用M. 北京:清華大學(xué)出版社, 2008.2ARM Limited. ARM Developer Suiter (Version 1.2) , Assemble Guide, ARM DUI 0068A, 2000.3熊茂華、楊震倫主編. ARM9嵌入式系統(tǒng)設(shè)計與開發(fā)應(yīng)用M.北京:清華大學(xué)出版社,2008.4劉彥文主編.基于ARM TDMI的S3C44BOX嵌入式微處理器技術(shù)M.北京:清華大學(xué)出版社,2009.5徐磊編著.Linux系統(tǒng)下C程序開發(fā)詳解M. 北京:電子工業(yè)出版社,2008.6華清遠(yuǎn)見嵌入式培訓(xùn)中心編著. 嵌入式Linux系統(tǒng)開發(fā)標(biāo)準(zhǔn)教程(第2版)M. 北京:人民郵電出版社,2

46、009.7羅苑棠編著.嵌入式Linux驅(qū)動程序和系統(tǒng)開發(fā)實例精講M.北京:電子工業(yè)出版社,2009.8羅蕾主編. 嵌入式實時操作系統(tǒng)及應(yīng)用開發(fā)(第2版)M. 北京:北京航空航天大學(xué)出版社,2007.9華清遠(yuǎn)見嵌入式培訓(xùn)中心編著. Linux設(shè)備開發(fā)詳解(第2版)M. 北京:人民郵電出版社,2010.10 Advanced Programming in the UNIX EnvironmentMW.Richard Stevens,2000. 附 錄串口通信程序serial_com.c源代碼:/*serial_com.c*/#include <string.h>#include <

47、;unistd.h>#include <fcntl.h>#include <errno.h>#include <termios.h>#include <sys/types.h>#include <sys/stat.h>#include <stdlib.h>#define MODEMDEVICE "/dev/ttyS0"#define _POSIX_SOURCE 1#define FALSE 0#define TRUE 1volatile int STOP=FALSE;main() int fd,n=0,c,BAUDRATE,i,BUFNUMBER=32,READNUMBER=32; char receivebufBUFNUMBER; struct termios oldtio,newtio; struct stat st; errno=0; fd=open(MO

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論