張 臻碩士研究生
南京資訊工程大學601信箱,南京210044
0 引言
隨 著開放源**運動的飛速發展,linux作業系統越來越受到人們的重視。其良好的可裁減性與可移植性,卓越的效率和穩定性,以及支援多種處理器體系架構的 特點,使得linux越來越廣泛的應用於嵌入式領域。同時,arm9處理器高主頻的處理速度、大容量的快閃儲存器晶元和mmu控制單元的支援,使得執行嵌入式 linux變得穩定而高效。本文設計與實現的列印終端系統,正是基於這兩個軟硬體平台搭建起來的。
1 嵌入式列印終端系統的設計原理
圖1 列印終端原理圖
嵌 入式列印終端原理連線圖如圖1所示。主要由開發板、主機、印表機和掃瞄器四部分組成。主機是一台pc機。開發板採用的是三星公司s3c2410開發 板,arm9的核,跑的是2.4核心版本的嵌入式linux作業系統。掃瞄器為超市等用的手持掃瞄器。再加一台微型印表機接在開發板的gpio口上。
工作流程為:開發板將掃瞄器的資料從串列埠讀出,然後通過網口將資料傳送給主機進行檢索處理。開發板等待直至接收到主機處理完畢的資料後**給印表機,將資訊列印出來。
2 嵌入式列印終端系統的硬體設計
2.1硬體開發平台s3c2410結構
三 星公司的s3c2410開發板用的是32位risc架構基於arm920t核,其增強的mmu單元、amba匯流排,可以支援wince、linux等實時 作業系統。片上資源豐富介面眾多,包含lcd控制器、usb host、cs9800a網路晶元、sd卡、3個uart通用非同步序列口等裝置介面。[1]
2.2印表機與開發板介面電路的設計
我 們使用的微型印表機使用的是並行介面。由於開發板上沒有提供並口,所以必須自己設計乙個板卡介面電路,以連線印表機的並口和我們的嵌入式開發板。檢視 s3c2410的電路原理圖,由於此系統不需要用到lcd屏,可以將板子上用於lcd連線的gpio口進行改造,根據arm9core的lcd電路引腳和 板上的lcd插槽定義,如圖2,找到了14根空閒的gpio口:
gpio_c8~gpio_d15,gpi0_d0~gpio_d4。用這14根通用輸入輸出口連線微型印表機的並口。
圖2 核心core的lcd引腳和板上lcd引腳原理圖
同時檢視印表機的電路手冊和管腳定義,選用其stb選通線、ack回答脈衝線、busy線、data0-data7資料線來與開發板的gpio口相連,並初始化高低電平值。為了避免接線過緊互相干擾,製作乙個介面板定義各引腳連線如圖3所示。
至此,硬體的電路設計及連線基本完成。
shape /* mergeformat
圖3 印表機並口與開發板gpio口介面板設計圖
3嵌入式列印終端系統的軟體設計
軟體平台採用的是基於2.4核心的嵌入式linux系統。採用的交叉編譯器工具包為cross2.95.3.tgz(包含arm-linux-gcc等)。
3.1 印表機驅動的編寫
linux的裝置分為塊裝置,字元裝置和網路裝置,該系統使用到的微型印表機屬於字元裝置,下面將具體說明如何設計印表機驅動。
3.1.1 定義裝置名
#define device_name weida_printer
3.1.2 模組函式設計
在該系統中,採用模組化載入驅動程式的方法,因此必須實現模組的初始化函式和解除安裝函式。採用devfs方式註冊印表機。
初始化函式weida_init通過devfs_register函式向系統註冊裝置。
函式原型devfs_register(null, device_name, devfs_fl_default, 0, 0, s_ifchr | s_irusr | s_iwusr, &weida_printer_fops, null);
其中,device_name為主裝置名,weida_printer_fops為定義的乙個資料結構,用來實現的檔案操作,包括open、close、write等。
3.1.3 初始化列印埠
初始化印表機第乙個要做的事情就是要對gpio口進行初始化,初始化函式如下:
static void weida_init(void)
其中,weida_stb為連線印表機選通口初始化為高電平,gpio_pull_dis是設定是否需要上拉電阻,gpio_mode_out 設定gpio口為輸出口。最後使用module_init(weida_printer_init);採用模組方式載入驅動。[2]
設定串列埠速率函式:set_speed(int fd, int speed),其中fd 為開啟的裝置檔案,speed為速率。
設 置串列埠引數:set_parity(int fd,int databits,int stopbits,int parity),databits為有多少個資料位,stopbit為設定多少個停止位,parity為奇偶校驗位設定。設定串列埠波特率為9600,資料 位為8位,一位停止位,沒有校驗位。
3.2.2 編寫讀取掃瞄器資料函式
首先開啟裝置檔案,該系統中使用的串列埠為串列埠2,因此開啟函式為:
open(「/dev/ttys1」,o_rdwr|o_nonblock|o_ndelay);其中,o_rdwr表示可讀可寫,o_nonblock表示非堵塞模式,o_ndelay表示沒有延遲,立即發出去。
3.2.3 客戶端和伺服器的socket編寫
嵌入式列印終端採用c/s的模式,把pc機作為伺服器,開發板作為客戶端,通過乙太網連線。客戶端建立乙個socket連線去尋找pc機上的服務程式。pc機上同時也執行乙個socket用來listen請求和繫結。採用的是tcp的連線方式。
3.4 主應用程式的設計
開發板上的應用程式main函式註冊兩個執行緒p1和p2,兩個全域性陣列c1和c2。
執行緒p1將從串列埠讀到的資料放入c1中,然後sent socket直接從c1中取走資料傳送給伺服器。執行緒p2負責將received socket資料放入c2陣列中,然後直接從c2取走資料交給印表機去列印。
這裡對執行緒使用了兩個訊號量,並初始化為:sem_init(&sem1,0,1); sem_init(&sem2,0,0);[4]
兩個執行緒的核心**如下:
void thread1(void)
}void thread2(void)
}如此可以使兩個執行緒得以同步執行,並可以執行多次掃瞄和列印任務。
本 文作者創新點及其經濟效益:本系統具有移動性強,功耗低等特點,而且與以往傳統的用pc機實現的列印終端相比,還具有低成本優勢。能廣泛地應用於超市收銀 系統,銀行自動訪問款機,等各種工業領域。筆者試驗了一下把802.11g的無線網絡卡移植到開發板上,並成功實現了和主機的無線通訊,使得該系統更加便 攜。根據對南京各大學校區內超市的研究調查,此系統估計可產生50萬元的經濟效益。
參考文獻:
[2] corbet j, rubini a. linux裝置驅動程式(第三版)[m]. 中國電力出版社, 2006. 46-74 tp316.81
[3] 孫瓊. 嵌入式linux應用程式開發詳解[m]. 人民郵電出版社, 2006. 184-191 tp316.89
[4] 田家林,陳利學,寇向輝. linux嵌入式作業系統在arm上的移植[j]. 微計算機資訊, 2007,4-2:p60-62.
ARM9和Linux的嵌入式列印終端系統
1 嵌入式列印終端系統的設計原理 圖1 列印終端原理圖 嵌入式列印終端原理連線圖如圖1所示。主要由開發板 主機 印表機和掃瞄器四部分組成。主機是一台pc機。開發板採用的是三星公司s3c2410開發板,arm9的核,跑的是2.4核心版本的嵌入式linux作業系統。掃瞄器為超市等用的手持掃瞄器。再加一台...
工控方向的ARM9選型
最近一直在考慮選擇一款比較適合做工控的arm9,經過一段時間的比較也算有了結果,下面是在論壇上找的乙個對各個廠家的arm9的乙個比較。雖然我最終的選擇不是lpc32xx,但是感覺這位的見解比較客觀,就貼出來大家共享。1.nuvoton 2.atmel atmel的arm9在工控行業應該是最響的了,就...
嵌入式定製開發選ARM7還是ARM9
arm公司設計了許多處理器,它們可以根據使用的不同核心劃分到各個系列中。系列劃分是基於arm7 arm9 arm10 arm11和cortex核心。字尾數字7 9 10和11表示不同的核心設計。數字的公升序說明效能和複雜度的提高。嵌入式定製 arm7系列處理器是英國arm公司設計的主流嵌入式處理器a...