摘要:文章介紹以ARM7為控制器的微型熱敏打印機(jī)軟件設(shè)計(jì)方案。由于微型熱敏打印機(jī)對(duì)控制打印時(shí)序的要求較高,以往的設(shè)計(jì)方法很難達(dá)到要求。本文在比較傳統(tǒng)的嵌入式軟件設(shè)計(jì)方法基礎(chǔ)上,給出了一種基于嵌入式實(shí)時(shí)操作系統(tǒng)的控制軟件的設(shè)計(jì)方法,并詳細(xì)介紹各個(gè)任務(wù)模塊以及相互協(xié)調(diào)的軟件實(shí)現(xiàn)。設(shè)計(jì)的微型熱敏打印機(jī)已運(yùn)用于實(shí)際項(xiàng)目中,取得了良好的效果。文章的創(chuàng)新點(diǎn)在于將嵌入式實(shí)時(shí)操作系統(tǒng)引入微型熱敏打印機(jī)控制軟件的設(shè)計(jì)中,解決了傳統(tǒng)設(shè)計(jì)的種種弊端,提高了打印的速度和質(zhì)量。
關(guān)鍵詞:嵌入式系統(tǒng);實(shí)時(shí)操作系統(tǒng);熱敏打印機(jī);環(huán)形隊(duì)列
中圖法分類號(hào):TP334文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1009-3044(2008)28-0207-02
Application of Embedded RTOS for Control Software on Micro-thermal Printer
HUANG Wen-ling1, LING Ming2
(1.College of Integrated Circuit, Southeast University,Nanjing 210096, China; 2.ASIC Center,Southeast University , Nanjing 210096, China)
Abstract:The software design scheme of micro-thermal printer based on ARM7 is briefly introduced.For the demand of the time sequence is very high, the previous method won't meet the qualification. Through comparing traditional design of embedded software, the article suggests a method of a programming embedded software design based on RTOS. Then the software design of each task module and coordination between each other are given in detail.The designed micro-thermal printer is put into projects, and the effect is well. By introducing real time operating system into for control software on micro-thermal printer, the innovation of this text is that it overcome the disadvantages of traditional design, and improve the speed and quality of the printer.
Key words: embedded system; RTOS; thermal printer; circle queue
1 引言
在人們的日常生活中,乘坐出租車、購(gòu)物時(shí)打印發(fā)票或收據(jù),ATM機(jī)打印收款付款單據(jù)都會(huì)接觸到微型打印機(jī),它已經(jīng)在日常生活中扮演著越來越多的角色。其中,熱敏打印機(jī)具有噪聲低,打印速度快、機(jī)頭小而輕等優(yōu)點(diǎn),正逐漸取代傳統(tǒng)嵌入面板的針式打印機(jī)。但是,微型熱敏打印機(jī)對(duì)打印時(shí)序和加熱時(shí)間控制的要求較高,控制不當(dāng)則會(huì)造成打印頭硬件的損壞。因此,在相對(duì)成熟的硬件設(shè)計(jì)基礎(chǔ)上,控制軟件的設(shè)計(jì)就顯得十分重要。
SEP4020微處理器是由東南大學(xué)國(guó)家專用集成電路系統(tǒng)工程技術(shù)研究中心(ASIC)設(shè)計(jì)的32位RISC微控制器,采用ARM720T內(nèi)核。本文以SEP4020主控芯片與日本精工LTPZ245B打印頭為例,探討將嵌入式RTOS引入熱敏打印機(jī)的軟件設(shè)計(jì)方法,以提高熱敏打印機(jī)的整體性能。
2 系統(tǒng)模塊劃分
微型熱敏打印機(jī)的功能是接收上位機(jī)的數(shù)據(jù),并對(duì)接收到的數(shù)據(jù)進(jìn)行處理。之后控制打印機(jī)頭加熱,將相應(yīng)的字符打印出來,同時(shí)根據(jù)打印速度控制步進(jìn)電機(jī)走紙。在微型熱敏打印機(jī)的控制中,CPU完成的功能主要分為以下幾個(gè)模塊:數(shù)據(jù)接收及處理模塊、數(shù)據(jù)串并轉(zhuǎn)換及加載模塊、步進(jìn)馬達(dá)中斷模塊、加熱定時(shí)器中斷模塊、打印機(jī)狀態(tài)檢測(cè)及異常處理模塊。
■
圖1熱敏打印機(jī)系統(tǒng)結(jié)構(gòu)框
系統(tǒng)模塊框圖如圖1所示。其中:數(shù)據(jù)接收及處理模塊根據(jù)接收到的打印內(nèi)容,從字庫中取出相應(yīng)字模數(shù)據(jù);數(shù)據(jù)串轉(zhuǎn)并及加載模塊將待打印數(shù)據(jù)進(jìn)行串并轉(zhuǎn)換處理,并將最終打印數(shù)據(jù)加載到打印頭;步進(jìn)電機(jī)驅(qū)動(dòng)模塊負(fù)責(zé)控制打印紙走紙速度;加熱模塊利用定時(shí)器控制加熱的確切時(shí)間;異常處理模塊對(duì)打印頭進(jìn)行過熱保護(hù)以及缺紙檢測(cè)等。
3 傳統(tǒng)設(shè)計(jì)方案
在沒有引入RTOS之前,按照傳統(tǒng)的前后臺(tái)程序設(shè)計(jì)思想,程序一般按照線性順序運(yùn)行。以打印一點(diǎn)行數(shù)據(jù)為一個(gè)時(shí)鐘周期,需要完成數(shù)據(jù)轉(zhuǎn)換、數(shù)據(jù)加載、步進(jìn)電機(jī)走紙、打印頭加熱等工作。如果程序都按照順序執(zhí)行,必將會(huì)浪費(fèi)很多時(shí)間。而打印速度是熱敏打印機(jī)一個(gè)重要的性能指標(biāo),過長(zhǎng)的延時(shí)是難以接受的。
為了提高CPU的利用率,設(shè)計(jì)控制軟件時(shí)需將各模塊盡量設(shè)計(jì)成并行執(zhí)行。將熱敏打印機(jī)控制軟件中順序執(zhí)行的部分放在主循環(huán)程序中,而將一些對(duì)時(shí)間要求比較苛刻的功能放在中斷程序中實(shí)現(xiàn),以此提高打印速度。
基于上述功能考慮,把數(shù)據(jù)處理模塊放在主程序進(jìn)行中,進(jìn)紙電機(jī)、加熱定時(shí)中斷模塊則放在中斷程序中進(jìn)行。
這種程序運(yùn)行機(jī)制具有簡(jiǎn)單直觀、易于控制的優(yōu)點(diǎn)。然而,由于程序只能按單一的線性順序運(yùn)行,缺乏靈活性,其缺點(diǎn)非常明顯,難以運(yùn)用在復(fù)雜系統(tǒng)中。
隨著微型打印機(jī)的應(yīng)用場(chǎng)合的不同,其相應(yīng)的功能也不同。由于應(yīng)用程序存在移植性差的缺陷,無形中增加了產(chǎn)品的開發(fā)時(shí)間。而以嵌入式操作系統(tǒng)為核心的實(shí)時(shí)多任務(wù)的開發(fā)方法將會(huì)解決上述問題。
4 引入RTOS的設(shè)計(jì)方案
RTOS采用了多任務(wù)運(yùn)行的方式,在這種機(jī)制下,CPU的運(yùn)行時(shí)間被劃分為許多小的時(shí)間段,根據(jù)應(yīng)用程序不同的優(yōu)先級(jí)別進(jìn)行分配。多個(gè)應(yīng)用程序分別在自己的時(shí)間段內(nèi)訪問CPU,從而造成在微觀上輪流運(yùn)行,宏觀上并行運(yùn)行的多任務(wù)效果。這樣,可以把數(shù)據(jù)的處理、加載以及步進(jìn)電機(jī)、加熱過程視為若干相對(duì)獨(dú)立的模塊,由RTOS進(jìn)行統(tǒng)一管理,形成了一種嶄新的程序結(jié)構(gòu)。
4.1 任務(wù)的劃分
根據(jù)熱敏打印機(jī)系統(tǒng)結(jié)構(gòu)框圖以及具體的功能實(shí)現(xiàn),將熱敏打印機(jī)劃分為以下3個(gè)任務(wù):
① 數(shù)據(jù)處理任務(wù)(DataTask):完成打印前的準(zhǔn)備工作。根據(jù)所要打印的內(nèi)容,從字庫中取出字模數(shù)據(jù),按照特定的格式填充打印緩沖區(qū)。同時(shí)與打印控制任務(wù)相配合,將最終串行數(shù)據(jù)按照一定時(shí)序轉(zhuǎn)為并行數(shù)據(jù)送入打印頭中。
② 打印控制任務(wù)(PrintTask):該任務(wù)是打印控制工作的核心,控制打印的整個(gè)過程。包括:產(chǎn)生步進(jìn)電機(jī)所需要的時(shí)序,控制其走紙;啟動(dòng)加熱定時(shí)器,控制加熱時(shí)間等。
③ 異常檢測(cè)任務(wù)(ExcTask):在打印機(jī)全過程中,一旦發(fā)現(xiàn)有異常情況,就必須立即停止打印。異常處理任務(wù)在打印控制的整個(gè)過程中非常重要,因此給該任務(wù)賦予它最高優(yōu)先級(jí)。異常的檢測(cè)以中斷的方式來實(shí)現(xiàn)。
4.2 各任務(wù)具體功能
4.2.1 數(shù)據(jù)處理任務(wù)
根據(jù)需要打印的內(nèi)容,從指定的字庫中取出相應(yīng)的字模數(shù)據(jù)。然后將這些數(shù)據(jù)加載到熱敏打印頭的移位寄存器中,加載過程實(shí)質(zhì)是一個(gè)串并數(shù)據(jù)轉(zhuǎn)換的傳輸過程。為了提高加載速度,本部分采用硬件電路實(shí)現(xiàn),軟件只需控制在時(shí)鐘CLK的配合下輸出數(shù)據(jù)DATA到熱敏打印頭內(nèi)部的移位寄存器中,利用/LAT對(duì)數(shù)據(jù)進(jìn)行鎖存。
4.2.2 打印控制任務(wù)
熱敏打印機(jī)完成打印的全過程,需要根據(jù)打印頭中數(shù)據(jù)進(jìn)行加熱,合理的加熱時(shí)間對(duì)于實(shí)現(xiàn)熱敏打印機(jī)的高質(zhì)量打印十分重要。同時(shí),加熱一點(diǎn)行數(shù)據(jù)后,需要驅(qū)動(dòng)進(jìn)紙電機(jī)走紙,以完成下一點(diǎn)行數(shù)據(jù)的打印。
熱敏打印機(jī)內(nèi)部是一個(gè)二相四拍的步進(jìn)電機(jī),由2路I/O口模擬2路PWM輸出,其時(shí)序產(chǎn)生由定時(shí)器進(jìn)行控制。定時(shí)器定時(shí)到時(shí),程序控制輸出下一拍時(shí)序,以驅(qū)動(dòng)步進(jìn)電機(jī)。
打印頭有640個(gè)加熱元件,分為兩組進(jìn)行加熱。使能選通/ST1將會(huì)加熱第一組數(shù)據(jù),使能選通/ST2將會(huì)加熱第二組數(shù)據(jù)。利用兩個(gè)定時(shí)器分別控制各組數(shù)據(jù)的加熱時(shí)間,所以每打印一點(diǎn)行數(shù)據(jù),加熱定時(shí)器需要設(shè)定兩次。第一組數(shù)據(jù)的加熱時(shí)間由步進(jìn)電機(jī)的定時(shí)器給出,在加熱第一組數(shù)據(jù)的同時(shí),啟動(dòng)另一組的加熱定時(shí)器,以加熱第二組數(shù)據(jù)。
4.2.3 異常檢測(cè)任務(wù)
異常處理任務(wù)完成打印機(jī)缺紙、機(jī)頭過熱檢測(cè),這一部分的功能主要依靠中斷機(jī)制來實(shí)現(xiàn)。
熱敏打印頭在加熱每一點(diǎn)行的時(shí)間一般為1ms,如果連續(xù)加熱時(shí)間過長(zhǎng),很容易損壞熱敏頭,因此熱敏打印頭的保護(hù)電路就十分必要。當(dāng)打印頭溫度過高時(shí),過熱保護(hù)模塊輸出一個(gè)低電平到中斷口。進(jìn)人中斷后,主控芯片斷開熱敏打印頭加熱供電控制繼電器,停止對(duì)熱敏打印頭加熱模塊的供電。這樣就可以起到保護(hù)熱敏打印頭的作用。
缺紙檢測(cè)利用熱敏打印頭內(nèi)部的光電繼電器作為傳感器來實(shí)現(xiàn)。當(dāng)熱敏打印頭無紙時(shí),傳感器中發(fā)光二極管發(fā)出的光束無法經(jīng)由打印紙反射到光敏三極管上。經(jīng)過外部電路作用,產(chǎn)生低電平,從而進(jìn)入中斷,以完成后續(xù)操作。
4.3 任務(wù)間協(xié)調(diào)工作
任務(wù)間的接口定義了任務(wù)間的同步、互斥和通信關(guān)系。為了驅(qū)動(dòng)熱敏打印機(jī)正常運(yùn)轉(zhuǎn),最重要是對(duì)數(shù)據(jù)處理任務(wù)和打印控制任務(wù)兩者加以協(xié)調(diào)。
在程序中建立一個(gè)大小為MaxSize的環(huán)形隊(duì)列,用于存放待打印的數(shù)據(jù)。通過控制隊(duì)列頭、尾指針front、rear來充分運(yùn)用環(huán)形隊(duì)列的空間。
當(dāng)數(shù)據(jù)處理任務(wù)將產(chǎn)生待打印的數(shù)據(jù)放入環(huán)形隊(duì)列時(shí),尾指針rear會(huì)向箭頭方向前進(jìn);當(dāng)打印控制任務(wù)進(jìn)行打印過程,從環(huán)形隊(duì)列取出數(shù)據(jù)時(shí),頭指針front也向箭頭方向前進(jìn)。
環(huán)形隊(duì)列的初態(tài)為:front = rear = 0。若尾指針rear不斷前進(jìn)直到等于頭指針front時(shí),那么表示隊(duì)列已滿。但是,如果rear不斷減小,當(dāng)隊(duì)列為空時(shí)rear也等于front。為了區(qū)分隊(duì)空或隊(duì)滿這兩種情況,當(dāng)隊(duì)列只剩下一個(gè)空閑結(jié)點(diǎn)的空間時(shí),就認(rèn)為隊(duì)列已滿。
· 隊(duì)列為滿:(rear+ 1) mod MaxSize = front
· 隊(duì)列為空:front = rear
數(shù)據(jù)處理任務(wù)將處理好的數(shù)據(jù)送入環(huán)形隊(duì)列中,而打印任務(wù)從環(huán)形隊(duì)列中取出數(shù)據(jù)后,進(jìn)行打印。為了使這兩個(gè)任務(wù)能夠協(xié)調(diào)工作,應(yīng)該滿足如下兩個(gè)同步條件:
1) 當(dāng)環(huán)形隊(duì)列為滿時(shí),數(shù)據(jù)處理任務(wù)則不能加載數(shù)據(jù),該任務(wù)掛起;
2) 當(dāng)環(huán)形隊(duì)列為空時(shí),打印控制任務(wù)就不能進(jìn)行打印工作,其自身也掛起。
利用環(huán)形隊(duì)列機(jī)制,很好地實(shí)現(xiàn)了兩個(gè)任務(wù)之間的協(xié)調(diào)工作,使得打印過程順利進(jìn)行。同時(shí),數(shù)據(jù)傳輸、加熱、進(jìn)紙等處理過程均處于一個(gè)并行執(zhí)行的方式,提高了打印速度。
對(duì)于異常檢測(cè)任務(wù),則監(jiān)測(cè)打印的整個(gè)過程。一旦有異常情況產(chǎn)生時(shí),立即控制將數(shù)據(jù)處理任務(wù)和打印控制任務(wù)同時(shí)掛起,直到異常情況排除。
異常檢測(cè)任務(wù)利用中斷來實(shí)現(xiàn),其中斷服務(wù)程序設(shè)計(jì)得盡量短小,只需標(biāo)識(shí)出檢測(cè)到異常的類型。而真正的異常處理過程,則放在異常檢測(cè)任務(wù)中來完成。這樣設(shè)計(jì)的好處在于:中斷處理過程能夠減小關(guān)中斷的時(shí)間,保證了整個(gè)系統(tǒng)的實(shí)時(shí)性。
5 結(jié)束語
本文通過對(duì)微型熱敏打印具體的實(shí)現(xiàn),詳細(xì)介紹了將嵌入式RTOS引入其控制軟件軟件中的設(shè)計(jì)方法。設(shè)計(jì)的熱敏打印機(jī)取得了良好的打印效果,驗(yàn)證了設(shè)計(jì)方案的合理性。
參考文獻(xiàn):
[1] LTPZ245 THERMAL PRINTER MECHANISM TECHNICAL REFERENCE[S].Seiko Instruments Inc,2004.09.
[2] 東芯IV+ SEP4020嵌入式微處理器用戶手冊(cè)[S].東南大學(xué)國(guó)家專用集成電路系統(tǒng)工程技術(shù)研究中心,2008.1.
[3] 余翔,吳友宇.基于89S51單片機(jī)的微型熱敏打機(jī)軟件設(shè)計(jì)[J] .單片機(jī)開發(fā)與應(yīng)用,2007,23:120-121.
[4] 劉娜,劉允利.嵌入式系統(tǒng)中低成本熱敏打印設(shè)計(jì)[J].測(cè)控技術(shù),2007,26(1):90-92.
[5] 張國(guó)榮,曹彩萍,史斌寧.基于單片機(jī)的熱敏打印機(jī)的設(shè)計(jì)與實(shí)現(xiàn)[J].微電子學(xué)與計(jì)算機(jī), 2002(9):50-51.