基于s3c44b0和COS-II的嵌入式USB主機(jī)(SL811)設(shè)計(jì)與
EPSON打印機(jī)提供兩種打印方式,一種是用來(lái)打印文本文件,用該方式打印英文字母、阿拉伯?dāng)?shù)字、符合的時(shí)候向打印機(jī)發(fā)對(duì)應(yīng)的控制命令后,只要直接發(fā)打印內(nèi)容的ASCII碼即可。另一種方式是用來(lái)打印光柵圖形,當(dāng)需要打印表格、圖片和漢字的時(shí)候時(shí)往往會(huì)用到這種方式。在此,列出幾個(gè)關(guān)鍵API函數(shù)并予已說(shuō)明:
print_image_init ( void ):因?yàn)榇蛴C(jī)初始化后默認(rèn)為打印文本模式,所以要打印光柵圖形必須進(jìn)行相關(guān)的初始化。
print_image_command(unsigned int horiz_position,unsigned int verti_position, unsigned char rows, unsigned int columns, char color):調(diào)用該函數(shù)之前必須事先至少調(diào)用過(guò)一次print_image_init(),它的功能是向打印機(jī)發(fā)打印圖片命令。其中,第一和第二個(gè)輸入?yún)?shù)是打印圖形的橫縱坐標(biāo),第三和第四個(gè)輸入?yún)?shù)分別是打印圖形的行數(shù)和列數(shù)(特別值得注意的是,C63系列和C65系列打印機(jī)一次最多可打16行,而 EPSON M1一次只能打15行),第五個(gè)輸入?yún)?shù)color是選擇打印顏色。在調(diào)用該函數(shù)后,直接向打印機(jī)發(fā)打印的數(shù)據(jù)就可以實(shí)現(xiàn)打印圖片功能了。迎訪問(wèn)無(wú)由電子開發(fā)網(wǎng)(技術(shù)文章 在線閱讀 在線商城
由于打印文本模式和打印圖形的操作基本相同,而且更簡(jiǎn)單,在此就不作說(shuō)明。
3.4 USB協(xié)議的實(shí)現(xiàn)
這是整個(gè)USB 體系軟件的根基, 它負(fù)責(zé)主機(jī)和設(shè)備之間數(shù)據(jù)傳輸。其代碼都包含在文件sl811host.c中,可供上層驅(qū)動(dòng)調(diào)用的API函數(shù)主要有:
EnumUsbDev ():該函數(shù)主要實(shí)現(xiàn)枚舉設(shè)備的功能。當(dāng)有USB設(shè)備插上時(shí),系統(tǒng)通過(guò)調(diào)用到該函數(shù)得到設(shè)備的標(biāo)準(zhǔn)描述符(接口、配置、端點(diǎn))并識(shí)別是海量存儲(chǔ)設(shè)備還是打印機(jī)。設(shè)置地址(SetAdress),設(shè)置配置描述符(SetDecriptor),設(shè)置配置值(SetConfiguration),設(shè)置接口(SetInterface)也在該函數(shù)里實(shí)現(xiàn)。
BuckSend():該函數(shù)主要實(shí)現(xiàn)主機(jī)上的數(shù)據(jù)通過(guò)塊傳輸方式發(fā)送到設(shè)備上;
BuckReceive():塊傳輸接受函數(shù);
BuckSend()和BuckReceive()兩個(gè)函數(shù)是最調(diào)度最平凡的兩個(gè)函數(shù),因?yàn)閷?duì)海量存儲(chǔ)設(shè)備的讀寫,對(duì)打印機(jī)發(fā)送控制命令、打印數(shù)據(jù)都是通過(guò)塊傳輸通訊的,也就是通過(guò)調(diào)用這兩個(gè)函數(shù)來(lái)實(shí)現(xiàn)的。
處理器讀寫SL811HS單個(gè)寄存器或數(shù)據(jù)存儲(chǔ)器的函數(shù)如下:
void SL811Write(char a, char d){ SL811_ADDR = a; SL811_DATA = d;}
char SL811Read(char a) { SL811_ADDR = a; return (SL811_DATA); }
這兩個(gè)函數(shù)是ARM處理器和SL811芯片進(jìn)行數(shù)據(jù)交互的基石,所有控制寄存器和數(shù)據(jù)存儲(chǔ)器的讀寫都可以通過(guò)以上兩個(gè)函數(shù)來(lái)實(shí)現(xiàn)。當(dāng)需要連續(xù)讀寫SL811中的儲(chǔ)存器時(shí)可以采用以下方式來(lái)實(shí)現(xiàn),可以加快讀寫速度。
void SL811BufWrite(BYTE addr, BYTE *s, BYTE c)
{SL811H_ADDR = addr;
while (c--)
SL811H_DATA = *s ;}
4 結(jié) 論
在基于實(shí)時(shí)內(nèi)核micro;C/OS-II和32位RISC架構(gòu)ARM7 Core的系統(tǒng)板上,我們實(shí)現(xiàn)了嵌入式USB主機(jī)設(shè)計(jì)和開發(fā),為酶標(biāo)儀這一特定醫(yī)療設(shè)備提供了讀寫海量存儲(chǔ)設(shè)備和打印的功能。經(jīng)測(cè)試,本系統(tǒng)讀海量存儲(chǔ)設(shè)備數(shù)據(jù)的速度可達(dá)750kB/s,寫數(shù)據(jù)的速度最高可達(dá)450kB/s;打印功能也完全滿足系統(tǒng)要求,性能穩(wěn)定可靠,使用方便,是一種可行、實(shí)用的方案。
評(píng)論