www.久久久久|狼友网站av天堂|精品国产无码a片|一级av色欲av|91在线播放视频|亚洲无码主播在线|国产精品草久在线|明星AV网站在线|污污内射久久一区|婷婷综合视频网站

當(dāng)前位置:首頁(yè) > 單片機(jī) > 單片機(jī)
[導(dǎo)讀]1 嵌入式打印終端系統(tǒng) 的設(shè)計(jì)原理 嵌入式打印終端原理連接圖如圖1所示。主要由開發(fā)板、主機(jī)、打印機(jī)和掃描儀四部分組成。主機(jī)是一臺(tái)PC機(jī)。開發(fā)板采用的是三星公司S3C2

1 嵌入式打印終端系統(tǒng) 的設(shè)計(jì)原理                                      
  
 

嵌入式打印終端原理連接圖如圖1所示。主要由開發(fā)板、主機(jī)、打印機(jī)和掃描儀四部分組成。主機(jī)是一臺(tái)PC機(jī)。開發(fā)板采用的是三星公司S3C2410開發(fā)板,ARM9的核,跑的是2.4內(nèi)核版本的嵌入式Linux操作系統(tǒng)。掃描儀為超市等用的手持掃描儀。再加一臺(tái)微型打印機(jī)接在開發(fā)板的GPIO口上。

工作流程為:開發(fā)板將掃描儀的數(shù)據(jù)從串口讀出,然后通過(guò)網(wǎng)口將數(shù)據(jù)發(fā)送給主機(jī)進(jìn)行檢索處理。開發(fā)板等待直至接收到主機(jī)處理完畢的數(shù)據(jù)后轉(zhuǎn)發(fā)給打印機(jī),將信息打印出來(lái)。

2 嵌入式打印終端系統(tǒng)的硬件設(shè)計(jì)

2.1硬件開發(fā)平臺(tái)S3C2410結(jié)構(gòu)

三星公司的S3C2410開發(fā)板用的是32位RISC架構(gòu)基于ARM920T核,其增強(qiáng)的MMU單元、AMBA總線,可以支持WinCE、 Linux等實(shí)時(shí)操作系統(tǒng)。片上資源豐富接口眾多,包含LCD控制器、USB Host、CS9800A網(wǎng)絡(luò)芯片、SD卡、3個(gè)UART通用異步串行口等設(shè)備接口。[1]

2.2打印機(jī)與開發(fā)板接口電路的設(shè)計(jì)

我們使用的微型打印機(jī)使用的是并行接口。由于開發(fā)板上沒(méi)有提供并口,所以必須自己設(shè)計(jì)一個(gè)板卡接口電路,以連接打印機(jī)的并口和我們的嵌入式開發(fā)板。查看S3C2410的電路原理圖,由于此系統(tǒng)不需要用到LCD屏,可以將板子上用于LCD連接的GPIO口進(jìn)行改造,根據(jù)ARM9core的LCD電路引腳和板上的LCD插槽定義,如圖2,找到了14根空閑的GPIO口:

gpio_c8~gpio_d15,gpi0_d0~gpio_d4。用這14根通用輸入輸出口連接微型打印機(jī)的并口。

 

同時(shí)查看打印機(jī)的電路手冊(cè)和管腳定義,選用其STB選通線、ACK回答脈沖線、BUSY線、DATA0-DATA7數(shù)據(jù)線來(lái)與開發(fā)板的GPIO口相連,并初始化高低電平值。為了避免接線過(guò)緊互相干擾,制作一個(gè)接口板定義各引腳連接如圖3所示。

至此,硬件的電路設(shè)計(jì)及連接基本完成。

 

3嵌入式打印終端系統(tǒng)的軟件設(shè)計(jì)

軟件平臺(tái)采用的是基于2.4內(nèi)核的嵌入式Linux系統(tǒng)。采用的交叉編譯器工具包為CROSS2.95.3.tgz(包含arm-linux-gcc等)。

3.1 打印機(jī)驅(qū)動(dòng)的編寫

Linux的設(shè)備分為塊設(shè)備,字符設(shè)備和網(wǎng)絡(luò)設(shè)備,該系統(tǒng)使用到的微型打印機(jī)屬于字符設(shè)備,下面將具體說(shuō)明如何設(shè)計(jì)打印機(jī)驅(qū)動(dòng)。

3.1.1  定義設(shè)備名

#define DEVICE_NAME weida_printer

3.1.2  模塊函數(shù)設(shè)計(jì)

在該系統(tǒng)中,采用模塊化加載驅(qū)動(dòng)程序的方法,因此必須實(shí)現(xiàn)模塊的初始化函數(shù)和卸載函數(shù)。采用devfs方式注冊(cè)打印機(jī)。

初始化函數(shù)weida_init通過(guò)devfs_register函數(shù)向系統(tǒng)注冊(cè)設(shè)備。

函數(shù)原型devfs_register(NULL, DEVICE_NAME, DEVFS_FL_DEFAULT, 0, 0, S_IFCHR | S_IRUSR | S_IWUSR,  &weida_printer_fops, NULL);

其中,DEVICE_NAME為主設(shè)備名,weida_printer_fops為定義的一個(gè)數(shù)據(jù)結(jié)構(gòu),用來(lái)實(shí)現(xiàn)的文件操作,包括open、close、write等。

3.1.3  初始化打印端口

初始化打印機(jī)第一個(gè)要做的事情就是要對(duì)GPIO口進(jìn)行初始化,初始化函數(shù)如下:

static void weida_init(void){
devfs_register(); /*注冊(cè)設(shè)備驅(qū)動(dòng)*/
set_gpio_ctrl(WEIDA_STB|GPIO_PULLUP_DIS|GPIO_MODE_OUT); /*設(shè)置STB口*/
    write_gpio_bit(WEIDA_STB,1);
    weida_printer_io_port_init();
/*設(shè)置其它IO口,以及賦初值*/ }

其中,WEIDA_STB為連接打印機(jī)選通口初始化為高電平,GPIO_PULL_DIS是設(shè)置是否需要上拉電阻,GPIO_MODE_OUT 設(shè)置GPIO口為輸出口。最后使用module_init(weida_printer_init);采用模塊方式加載驅(qū)動(dòng)。[2]

3.1.4  接口函數(shù)設(shè)計(jì)

ioctl()函數(shù)主要完成打印機(jī)字體、行距等參數(shù)的設(shè)置,在設(shè)計(jì)過(guò)程中必須解決用戶數(shù)據(jù)和內(nèi)核數(shù)據(jù)之間如何傳遞。從用戶態(tài)讀取數(shù)據(jù),然后在內(nèi)核態(tài)運(yùn)行,可以使用copy_from_user函數(shù)來(lái)完成傳遞數(shù)據(jù)。

weida_printer_write ( )先對(duì)打印機(jī)是否在線,是否忙,是否準(zhǔn)備好做進(jìn)一步的判斷,然后再進(jìn)行打印。在打印的時(shí)候要注意每發(fā)一個(gè)字符要延遲150毫秒,因?yàn)槿绻蛴?shù)據(jù)發(fā)得過(guò)快打印機(jī)的來(lái)不急處理,所以要設(shè)置延時(shí)。

open/close函數(shù)打開/關(guān)閉文件,因?yàn)樵?strong>LINUX下設(shè)備都是當(dāng)作文件來(lái)操作的,所以需要open和close這兩個(gè)接口函數(shù)。

3.2 掃描儀串口的設(shè)置

嵌入式移動(dòng)打印終端中使用到的掃描儀是串口掃描儀,這種掃描儀相對(duì)于USB接口的掃描儀來(lái)說(shuō),控制較簡(jiǎn)單,在掃描儀掃描后,可以直接從串口讀取數(shù)據(jù)。

3.2.1  串口設(shè)置[3]

設(shè)置串口速率函數(shù):set_speed(int fd, int speed),其中fd 為打開的設(shè)備文件,speed為速率。

設(shè)置串口參數(shù):set_parity(int fd,int databits,int stopbits,int parity),databits為有多少個(gè)數(shù)據(jù)位,stopbit為設(shè)置多少個(gè)停止位,parity為奇偶校驗(yàn)位設(shè)置。設(shè)置串口波特率為9600,數(shù)據(jù)位為8位,一位停止位,沒(méi)有校驗(yàn)位。

3.2.2  編寫讀取掃描儀數(shù)據(jù)函數(shù)

首先打開設(shè)備文件,該系統(tǒng)中使用的串口為串口2,因此打開函數(shù)為:

open(“/dev/ttyS1”,O_RDWR|O_NONBLOCK|O_NDELAY);其中,O_RDWR表示可讀可寫,O_NONBLOCK表示非堵塞模式,O_NDELAY表示沒(méi)有延遲,立即發(fā)出去。

3.2.3 客戶端和服務(wù)器的socket編寫

嵌入式打印終端采用C/S的模式,把PC機(jī)作為服務(wù)器,開發(fā)板作為客戶端,通過(guò)以太網(wǎng)連接??蛻舳私⒁粋€(gè)socket連接去尋找PC機(jī)上的服務(wù)程序。PC機(jī)上同時(shí)也運(yùn)行一個(gè)socket用來(lái)listen請(qǐng)求和綁定。采用的是TCP的連接方式。

3.4 主應(yīng)用程序的設(shè)計(jì)

開發(fā)板上的應(yīng)用程序Main函數(shù)注冊(cè)兩個(gè)線程p1和p2,兩個(gè)全局?jǐn)?shù)組c1和c2。

線程p1將從串口讀到的數(shù)據(jù)放入c1中,然后sent socket直接從c1中取走數(shù)據(jù)發(fā)送給服務(wù)器。線程p2負(fù)責(zé)將received socket數(shù)據(jù)放入c2數(shù)組中,然后直接從c2取走數(shù)據(jù)交給打印機(jī)去打印。

這里對(duì)線程使用了兩個(gè)信號(hào)量,并初始化為:sem_init(&sem1,0,1); sem_init(&sem2,0,0); [4]

兩個(gè)線程的核心代碼如下:
void thread1(void) {
    打開串口;設(shè)置串口;建立連接;
    while(1)    {
        sem_wait(&sem1);
        從串口讀書據(jù);
用clinetsocket發(fā)送出去;
        sem_post(&sem2);}
}
void thread2(void)  {
    打開打印機(jī)設(shè)備;
    while(1)    {
        sem_wait(&sem2);
        接收數(shù)據(jù);扔給打印機(jī);
        sem_post(&sem1);    }
}

如此可以使兩個(gè)線程得以同步運(yùn)行,并可以執(zhí)行多次掃描和打印任務(wù)。
 
本文作者創(chuàng)新點(diǎn)及其經(jīng)濟(jì)效益:本系統(tǒng)具有移動(dòng)性強(qiáng),功耗低等特點(diǎn),而且與以往傳統(tǒng)的用PC 機(jī)實(shí)現(xiàn)的打印終端相比,還具有低成本優(yōu)勢(shì)。能廣泛地應(yīng)用于超市收銀系統(tǒng),銀行自動(dòng)存取款機(jī),等各種工業(yè)領(lǐng)域。筆者試驗(yàn)了一下把802.11g的無(wú)線網(wǎng)卡移植到開發(fā)板上,并成功實(shí)現(xiàn)了和主機(jī)的無(wú)線通信,使得該系統(tǒng)更加便攜。根據(jù)對(duì)南京各大學(xué)校區(qū)內(nèi)超市的研究調(diào)查,此系統(tǒng)估計(jì)可產(chǎn)生50萬(wàn)元的經(jīng)濟(jì)效益。

趙遠(yuǎn)東導(dǎo)師評(píng)論:該同學(xué)在書寫這篇文章的過(guò)程中,參考大量中英文文獻(xiàn)資料,通過(guò)對(duì)ARM開發(fā)板的結(jié)構(gòu)、設(shè)計(jì)等方面的認(rèn)知,了解Linux驅(qū)動(dòng)的基本框架,設(shè)計(jì)出了接口板電路實(shí)現(xiàn)了移動(dòng)終端打印功能,有一定的創(chuàng)新思想和經(jīng)濟(jì)價(jià)值。

參考文獻(xiàn):
[1]  SAMSUNG. S3C2410A 200MHz&266MHz 32-BIT RISC MICROPROCESSOR USER’S MANUAL [EB/OL]. http://www.samsung.com/, 2004-03. 35,367-408
[2]  CORBET J, RUBINI A. LINUX設(shè)備驅(qū)動(dòng)程序(第三版)[M]. 中國(guó)電力出版社, 2006. 46-74 TP316.81
[3]  孫瓊. 嵌入式LINUX應(yīng)用程序開發(fā)詳解[M]. 人民郵電出版社, 2006. 184-191 TP316.89
[4]  田家林,陳利學(xué),寇向輝. LINUX嵌入式操作系統(tǒng)在ARM上的移植[J]. 微計(jì)算機(jī)信息, 2007,4-2:P60-62.
 

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

LED驅(qū)動(dòng)電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關(guān)鍵字: 驅(qū)動(dòng)電源

在工業(yè)自動(dòng)化蓬勃發(fā)展的當(dāng)下,工業(yè)電機(jī)作為核心動(dòng)力設(shè)備,其驅(qū)動(dòng)電源的性能直接關(guān)系到整個(gè)系統(tǒng)的穩(wěn)定性和可靠性。其中,反電動(dòng)勢(shì)抑制與過(guò)流保護(hù)是驅(qū)動(dòng)電源設(shè)計(jì)中至關(guān)重要的兩個(gè)環(huán)節(jié),集成化方案的設(shè)計(jì)成為提升電機(jī)驅(qū)動(dòng)性能的關(guān)鍵。

關(guān)鍵字: 工業(yè)電機(jī) 驅(qū)動(dòng)電源

LED 驅(qū)動(dòng)電源作為 LED 照明系統(tǒng)的 “心臟”,其穩(wěn)定性直接決定了整個(gè)照明設(shè)備的使用壽命。然而,在實(shí)際應(yīng)用中,LED 驅(qū)動(dòng)電源易損壞的問(wèn)題卻十分常見(jiàn),不僅增加了維護(hù)成本,還影響了用戶體驗(yàn)。要解決這一問(wèn)題,需從設(shè)計(jì)、生...

關(guān)鍵字: 驅(qū)動(dòng)電源 照明系統(tǒng) 散熱

根據(jù)LED驅(qū)動(dòng)電源的公式,電感內(nèi)電流波動(dòng)大小和電感值成反比,輸出紋波和輸出電容值成反比。所以加大電感值和輸出電容值可以減小紋波。

關(guān)鍵字: LED 設(shè)計(jì) 驅(qū)動(dòng)電源

電動(dòng)汽車(EV)作為新能源汽車的重要代表,正逐漸成為全球汽車產(chǎn)業(yè)的重要發(fā)展方向。電動(dòng)汽車的核心技術(shù)之一是電機(jī)驅(qū)動(dòng)控制系統(tǒng),而絕緣柵雙極型晶體管(IGBT)作為電機(jī)驅(qū)動(dòng)系統(tǒng)中的關(guān)鍵元件,其性能直接影響到電動(dòng)汽車的動(dòng)力性能和...

關(guān)鍵字: 電動(dòng)汽車 新能源 驅(qū)動(dòng)電源

在現(xiàn)代城市建設(shè)中,街道及停車場(chǎng)照明作為基礎(chǔ)設(shè)施的重要組成部分,其質(zhì)量和效率直接關(guān)系到城市的公共安全、居民生活質(zhì)量和能源利用效率。隨著科技的進(jìn)步,高亮度白光發(fā)光二極管(LED)因其獨(dú)特的優(yōu)勢(shì)逐漸取代傳統(tǒng)光源,成為大功率區(qū)域...

關(guān)鍵字: 發(fā)光二極管 驅(qū)動(dòng)電源 LED

LED通用照明設(shè)計(jì)工程師會(huì)遇到許多挑戰(zhàn),如功率密度、功率因數(shù)校正(PFC)、空間受限和可靠性等。

關(guān)鍵字: LED 驅(qū)動(dòng)電源 功率因數(shù)校正

在LED照明技術(shù)日益普及的今天,LED驅(qū)動(dòng)電源的電磁干擾(EMI)問(wèn)題成為了一個(gè)不可忽視的挑戰(zhàn)。電磁干擾不僅會(huì)影響LED燈具的正常工作,還可能對(duì)周圍電子設(shè)備造成不利影響,甚至引發(fā)系統(tǒng)故障。因此,采取有效的硬件措施來(lái)解決L...

關(guān)鍵字: LED照明技術(shù) 電磁干擾 驅(qū)動(dòng)電源

開關(guān)電源具有效率高的特性,而且開關(guān)電源的變壓器體積比串聯(lián)穩(wěn)壓型電源的要小得多,電源電路比較整潔,整機(jī)重量也有所下降,所以,現(xiàn)在的LED驅(qū)動(dòng)電源

關(guān)鍵字: LED 驅(qū)動(dòng)電源 開關(guān)電源

LED驅(qū)動(dòng)電源是把電源供應(yīng)轉(zhuǎn)換為特定的電壓電流以驅(qū)動(dòng)LED發(fā)光的電壓轉(zhuǎn)換器,通常情況下:LED驅(qū)動(dòng)電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關(guān)鍵字: LED 隧道燈 驅(qū)動(dòng)電源
關(guān)閉