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