色偷偷偷久久伊人大杳蕉,色爽交视频免费观看,欧美扒开腿做爽爽爽a片,欧美孕交alscan巨交xxx,日日碰狠狠躁久久躁蜜桃

x
x

基于ARM+Linux的異步串行通信設(shè)計

發(fā)布時間:2010-4-9 20:58    發(fā)布者:我芯依舊
關(guān)鍵詞: arm , linux , 串行 , 通信 , 異步
1 引言

嵌入式系統(tǒng)是繼IT網(wǎng)絡(luò)技術(shù)之后。又一個新的技術(shù)發(fā)展方向。隨著嵌入式技術(shù)及網(wǎng)絡(luò)技術(shù)的發(fā)展,工業(yè)控制設(shè)備的網(wǎng)絡(luò)功能要求越來越高,系統(tǒng)要求工業(yè)控制設(shè)備能夠支持TCP/IP,以及其他Intenet協(xié)議,用戶能方便的查看設(shè)備狀態(tài)、設(shè)置設(shè)備參數(shù)、設(shè)備采集到的數(shù)據(jù)通過網(wǎng)絡(luò)能及時的傳送到windows或Unix/Linux服務(wù)器的數(shù)據(jù)庫中。隨著集成電路的發(fā)展.32位RISC處理器更是受到青睞,ARM是業(yè)界領(lǐng)先的16/32位嵌入式RISC處理器技術(shù)提供商,占領(lǐng)了全球75%的市場。它可為一個完整系統(tǒng)的開發(fā)提供全面的技術(shù)支持,其技術(shù)具有性能高、成本低和能耗省的特點。

本系統(tǒng)采用的是韓國三星公司生產(chǎn)的一款基于ARM920T內(nèi)核的S3C2410x處理器,它采用五級流水線和哈佛結(jié)構(gòu),提供1.1MIPS/MHz的性能,內(nèi)部有3個獨立的UART控制器,每個控制器都可以工作在Interrupt(中斷)模式或DMA(直接內(nèi)存訪問)模式,從而實現(xiàn)CPU和UART之間傳送數(shù)據(jù),并且每個UART均具有16字節(jié)的FIFO(先入先出寄存器),支持的最高波特率可達230.4Kbps。

2 系統(tǒng)的軟硬件設(shè)計

在串行通信中,要保證數(shù)據(jù)傳輸?shù)目煽啃院头(wěn)定性,硬件設(shè)計是必不可少的,本系統(tǒng)選用S3C2410X作為核心器件,要完成最基本的串行通信功能,只需要RXD、TXD和GND即可,但由于RS232C標(biāo)準(zhǔn)所定義的高低電平信號與S3C2410X系統(tǒng)的LVTTL電路所定義的高低電平信號完全不同,LVTTL的標(biāo)準(zhǔn)邏輯“1”對應(yīng)2-2.3v電平,標(biāo)準(zhǔn)邏輯'0’對應(yīng)0-0.4V電平,而RS232C標(biāo)準(zhǔn)采用負邏輯方式,標(biāo)準(zhǔn)邏輯“1”對應(yīng)-5~-15V電平,標(biāo)準(zhǔn)邏輯"0"對應(yīng)+5~+15V,兩者間通信必須經(jīng)過信號電平的轉(zhuǎn)換,目前常使用的電平轉(zhuǎn)換電路為MAX232。該系統(tǒng)只設(shè)計了一路與URAT0相連的RS232C接口電路,通過9芯的D型插頭,與外設(shè)可方便的連接,同時設(shè)計了數(shù)據(jù)發(fā)送與接收的狀態(tài)指示燈LED,當(dāng)有數(shù)據(jù)通過串口傳輸時,LED閃爍,便于用戶掌握其工作狀態(tài),以進行軟硬件調(diào)試。宿主機即計算機系統(tǒng),在Linux操作系統(tǒng)下編寫好串口通信程序,通過JTAG接口模塊下載到目標(biāo)機中,在相應(yīng)的軟件命令的控制下,通過串行接口線即可實現(xiàn)宿主機與目標(biāo)機間數(shù)據(jù)的發(fā)送和接收。目標(biāo)機中的電源模塊提供了開發(fā)板所需的正常電壓,各種數(shù)據(jù)信息可以通過液晶顯示器顯示出來,還可以通過鍵盤模塊來實現(xiàn)對目標(biāo)機的操作,外擴存儲器模塊可以由FLASH或SDRAM構(gòu)成,其與S3C2410X的連接如圖1所示


圖1串口電路原理圖

在軟件系統(tǒng)方面,嵌入式Linux操作系統(tǒng)是整個嵌入式系統(tǒng)的核心,由于嵌入式系統(tǒng)存在內(nèi)存容量和存儲容量不足等問題,必須對Linux進行移植裁剪設(shè)計,主要涉及以下幾個方面:

(1)建立開發(fā)環(huán)境,操作系統(tǒng)一般使用Redhat Linux,通過網(wǎng)絡(luò)下載相應(yīng)的GCC交叉編譯器進行安裝,或用廠家提供的相關(guān)交叉編譯器。

(2)配置開發(fā)主機,配置MINICOM,一般的參數(shù)為波特率115200Baud/s,數(shù)據(jù)位8位,停止位1位,尤奇偶效驗,軟件硬件流控設(shè)為無。

(3)建立引導(dǎo)裝載程序BOOTLOADER,該系統(tǒng)使用的是韓國Mizi公司開發(fā)的vivi,該引導(dǎo)程序目前只支持串口傳輸,將編譯好的vivi通過Jflash軟件燒錄到開發(fā)板的FLASH中。

(4)內(nèi)核的裁剪與移植。由于標(biāo)準(zhǔn)的Linux是面向PC的,它集成了許多PC所需要而嵌入式系統(tǒng)并不需要的,因此,在編譯內(nèi)核時可以卸載不必要的模塊,這樣可以使內(nèi)核顯著減少, 從而盡可能小的占用內(nèi)存及存儲宅間,使軟硬件系統(tǒng)得到精簡。

(5)虛擬內(nèi)存機制的屏蔽,虛擬內(nèi)存是導(dǎo)致現(xiàn)有Linux實時性不強的原因,可以通過屏蔽內(nèi)核的虛擬內(nèi)存管理機制米增強Linux實時性,更好的滿足工業(yè)控制的要求,更改的途徑有兩種:一是通過POSIX,二是通過底層編程。

(6)設(shè)備驅(qū)動的編寫。

(7)開發(fā)基于閃存的文件系統(tǒng),應(yīng)用程序和重要數(shù)據(jù)通常都是以文件的形式存放在閃存文件系統(tǒng)中。

(8)上層應(yīng)用程序的編寫。針對特定的系統(tǒng)應(yīng)用環(huán)境,實現(xiàn)上層應(yīng)用程序的功能并編寫。基于篇幅的限制,這里只介紹驅(qū)動和應(yīng)用程序的開發(fā)。

在Linux中幾乎所有的設(shè)備都是文件,對設(shè)備驅(qū)動的訪問也是以文件操作實現(xiàn)的,無論是字符設(shè)備還是塊設(shè)備,用戶對設(shè)備的操作都是通過虛擬文件系統(tǒng)轉(zhuǎn)換為設(shè)備驅(qū)動與硬件操作例程的交互,虛擬文件系統(tǒng)為用戶提供了一個統(tǒng)一的設(shè)備訪問接口,使用戶可以透明的訪問設(shè)備驅(qū)動程序從而簡化硬件的編寫。所以對設(shè)備進行操作的調(diào)用格式與對文件的操作類似,主要包括open()、read()、write()、ioctl()、close()等。

串口驅(qū)動中最主要的就是中斷函數(shù)的編寫,該函數(shù)最主要的就是完成接收中斷,發(fā)送中斷和流控中斷,由于S3C2410X中集成的UART控制芯片中帶有FIFO,為了保證及時接收,接收中斷必須循環(huán)處理接收字符直到接收FIFO為空。同時為了防止接收方被發(fā)送方淹沒,接收緩沖區(qū)剩余空間不足時應(yīng)立刻啟動流控,設(shè)置RTS為0,等上層提取了緩沖區(qū)的數(shù)據(jù),騰出足夠的空間后在取消硬件流控,恢復(fù)接收。對于發(fā)送。為了減少發(fā)送中斷的產(chǎn)生次數(shù),也采用在一次中斷服務(wù)中,循環(huán)發(fā)送字符直到軟件緩沖區(qū)為空的方法。但是在提取發(fā)送緩沖區(qū)的數(shù)據(jù)時需要注意判斷軟件信號量nSemaTxGet的值,以防止緩沖區(qū)征用。流控中斷處理中,首先要判斷流控類型是停止發(fā)送還是允許發(fā)送,只需簡單的將軟件標(biāo)志nTxStop設(shè)置為1即呵;若為允許發(fā)送,除了要將nTxStop設(shè)置為0,還要主動從發(fā)送緩沖區(qū)中取出一個字符發(fā)送,以觸發(fā)發(fā)送空中斷,使硬件立刻恢復(fù)發(fā)送。其主要流程圖如下所示:


圖2串口中斷服務(wù)流程圖

將編寫好的中斷函數(shù)用request_irq()函數(shù)注冊到驅(qū)動程序中,然后將驅(qū)動程序serial.c編譯進內(nèi)核。其方法為:

(1)改動serial.c源代碼,新建函數(shù)int init_serial(void),將設(shè)備注冊到此處:result=register_chrdev(92.“serial", &serial_fops);

(2)將serial.c復(fù)制到../drivers/char目錄下,并且在../drivers/char下的men.c的intchr_dev_init()函數(shù)中增加如下代碼:

#ifdef CONFIG_TESTDRIVE
init__serial();
#endif

(3)在~/drivers/char目錄下的Makefile中增加以下代碼:

ifeq($(CONFIG_TESTDRIVE).y)
L_OBJS+=serial.o
endif

(4)在../arch/m68knommu目錄下config.in字符設(shè)備里增加如下代碼:

Bool‘support for testdrive’CONFIG_TESTDRIVE Y

(6)在../dev/目錄下創(chuàng)建串口設(shè)備:mknod/dev/serial1 c 92 0c表示是字符設(shè)備,92是設(shè)備號,0是次設(shè)備號。到此已將串口的驅(qū)動程序添加到Linux的內(nèi)核中,將編譯好的內(nèi)核鶯新下載到開發(fā)板上就可以使用串口驅(qū)動程序了。

3 目標(biāo)板與宿主機間通信的實現(xiàn)

(1)打開串口

打開串口和打開普通文件一樣,使用的函數(shù)同打開普通文件一樣,都是open函數(shù)fd=open ("/dev/ttyS0”,O_RDWR | O_NOCTTY | O_NDELAY),接下來可恢復(fù)串口的狀態(tài)為阻塞狀態(tài),用于等待串口數(shù)據(jù)的讀入,可用fcntl函數(shù)實現(xiàn)[1],如下所示:

fcntl(fd,F(xiàn)_SETFL,0);

再接著可以測試打開文件捕述符是否引用一個終端設(shè)備,以進一步確認串口是否打開,如下所示:isatty(STDIN_FILEN0);該函數(shù)調(diào)用成功則返回0,若失敗則返回-1。

(2)讀寫串口

讀寫串口操作和讀寫普通文件一樣,使用read(),write()函數(shù)即可。其流程網(wǎng)如下所示:


圖3串口讀寫流程圖

將讀串口程序在PC機上編譯,寫串口程序交叉編譯,分別得到宿主機與目標(biāo)機的可執(zhí)行文件,將寫串El程序通過Linux下的串口通信軟件Minicom下載到S3C241x0開發(fā)板上或?qū)⑵渲谱鞒晌募到y(tǒng)燒寫到目標(biāo)板上,先運行讀串口程序,再運行寫串口程序。最后成功的實現(xiàn)了目標(biāo)板與宿主機之間的通信。

4 結(jié)束語

如今,把嵌入式Linux內(nèi)核嵌入到32位MCU中,通過構(gòu)造TCP/IP多種網(wǎng)路協(xié)議和基本的通信協(xié)議,在利用嵌入式操作系統(tǒng)對底層硬件和網(wǎng)絡(luò)協(xié)議的支持,以及對內(nèi)核和虛擬內(nèi)存機制進行改造,可以保證系統(tǒng)的可靠性和實時性.具有廣闊的應(yīng)用前景,而且具有開發(fā)周期短,系統(tǒng)性能穩(wěn)定可靠,適應(yīng)性強等特點。

本文作者創(chuàng)新觀點:本文采用的基于ARM+Linux的系統(tǒng),可以方便的移植操作系統(tǒng),實現(xiàn)實時高速數(shù)據(jù)互訪,擴展應(yīng)用程序,所有數(shù)據(jù)町以便捷,可靠的傳輸?shù)竭h端。



作者:陳佳男,李欣,張海燕      來源:《微計算機信息》(嵌入式與SOC)2009年第3-2期
本文地址:http://www.54549.cn/thread-10298-1-1.html     【打印本頁】

本站部分文章為轉(zhuǎn)載或網(wǎng)友發(fā)布,目的在于傳遞和分享信息,并不代表本網(wǎng)贊同其觀點和對其真實性負責(zé);文章版權(quán)歸原作者及原出處所有,如涉及作品內(nèi)容、版權(quán)和其它問題,我們將根據(jù)著作權(quán)人的要求,第一時間更正或刪除。
您需要登錄后才可以發(fā)表評論 登錄 | 立即注冊

相關(guān)視頻

關(guān)于我們  -  服務(wù)條款  -  使用指南  -  站點地圖  -  友情鏈接  -  聯(lián)系我們
電子工程網(wǎng) © 版權(quán)所有   京ICP備16069177號 | 京公網(wǎng)安備11010502021702
快速回復(fù) 返回頂部 返回列表