摘è¦ï¼šé€šéŽç ”ç©¶å’Œè¨(shè)計(jì)嵌入å¼USBçš„host(主機(jÄ«)),闡述了其工作機(jÄ«)制和實(shÃ)ç¾(xià n)æž¶æ§‹(gòu),并給出了在軟硬件平臺(tái)上的具體實(shÃ)ç¾(xià n)。首先,在三星的ARM7處ç†å™¨S3C44B0X上移æ¤äº†å¯¦(shÃ)時(shÃ)æ“作系統(tÇ’ng)(RTOS)——µC/OS-II,然åŽçµ(jié)åˆå…·é«”的醫(yÄ«)療è¨(shè)備的實(shÃ)際需è¦ï¼Œåˆ©ç”¨SL811HS芯片實(shÃ)ç¾(xià n)了USB主機(jÄ«)功能,并在æ¤åŸºç¤Ž(chÇ”)上開發(fÄ)了USB接å£çš„EPSONæ‰“å°æ©Ÿ(jÄ«)ã€æµ·é‡å˜å„²(chÇ”)類è¨(shè)備(U盤,移動(dòng)硬盤)的嵌入å¼é©…(qÅ«)å‹•(dòng)程åºã€‚
é—œ(guÄn)éµè©žï¼šé€šç”¨ä¸²è¡Œç¸½ç·šï¼ˆUSB) SL811HS µC/OS-II æµ·é‡å˜å„²(chÇ”) 打å°èªžè¨€
1 引 言
通常情æ³ä¸‹ï¼Œæ‰“å°æ©Ÿ(jÄ«)ã€æµ·é‡å˜å„²(chÇ”)ç‰è¨(shè)備是由普通PC機(jÄ«)來驅(qÅ«)å‹•(dòng)的,由于大é‡çš„æ¸¬(cè)控ã€é†«(yÄ«)療ç‰ç³»çµ±(tÇ’ng)需è¦å˜å„²(chÇ”)ã€æ‰“å°æ•¸(shù)據(jù)ï¼Œå› æ¤é–‹ç™¼(fÄ)這類è¨(shè)備的嵌入å¼é©…(qÅ«)å‹•(dòng)是éžå¸¸æœ‰å¯¦(shÃ)用價(jià )值的。目å‰ï¼Œå„種嵌入å¼è¨(shè)備基本上是通éŽè»Ÿç›¤å˜å„²(chÇ”)ï¼Œå¹¶å£æ‰“å°çš„,而它們的å˜å„²(chÇ”)容é‡ã€æ•¸(shù)據(jù)傳輸速度已大大è½åŽç•¶(dÄng)å‰å„類嵌入å¼ç³»çµ±(tÇ’ng)çš„éœ€æ±‚ã€‚å› æ¤ï¼Œé–‹ç™¼(fÄ)基于USB接å£çš„åµŒå…¥å¼æµ·é‡å˜å„²(chÇ”)è¨(shè)å‚™å’Œæ‰“å°æ©Ÿ(jÄ«)é©…(qÅ«)å‹•(dòng)å·²æˆç•¶(dÄng)å‹™(wù)之急。
USB(Universal Serial Busï¼‰æ˜¯æœ€è¿‘å¹¾å¹´é€æ¥åœ¨PCé ˜(lÇng)域廣為應(yÄ«ng)ç”¨çš„æ–°åž‹ä¸²è¡ŒæŽ¥å£æŠ€è¡“(shù),它通用性好ã€å¯¦(shÃ)時(shÃ)性強(qiáng)ã€å‚³è¼¸æ–¹å¼å¤šæ¨£ã€æˆæœ¬ä½Žã€æ˜“于擴(kuò)展和使用,這些優(yÅu)點(diÇŽn)使它å—åˆ°è¨±å¤šç¡¬ä»¶å» å•†çš„é’çžï¼Œå„種類型的USBè¨(shè)備產(chÇŽn)å“大釿¶Œå…¥å¸‚å ´(chÇŽng)。USBé€šè¨Šå¿…é ˆæ˜¯ä¸»æ©Ÿ(jÄ«)和外è¨(shè)é€šè¨Šï¼Œæ¯æ¬¡é€šè¨Šéƒ½æ˜¯ç”±ä¸»æ©Ÿ(jÄ«)發(fÄ)起,外è¨(shè)åªæ˜¯è¢«å‹•(dòng)地執(zhÃ)行主機(jÄ«)發(fÄ)éŽä¾†çš„å‘½ä»¤ã€‚è€Œå¸‚å ´(chÇŽng)上所買到和使用的USB 移動(dòng)è¨(shè)å‚™, 都是USB 的外è¨(shè)(device) , 如USB 的移動(dòng)硬盤ã€USB接å£çš„æ•¸(shù)碼相機(jÄ«)ã€æ‰“å°æ©Ÿ(jÄ«)ç‰ã€‚這些è¨(shè)備通常åªèƒ½é€šéŽPC 來進(jìn)行相互的文件和數(shù)據(jù)交æ›ï¼Œæ²’有了PC 機(jÄ«), 這些è¨(shè)備就無法進(jìn)行數(shù)據(jù)交æ›ã€‚而實(shÃ)éš›ä¸Šå¹¶éžæ¯å€‹(gè)åœ°æ–¹éƒ½æ“æœ‰PC機(jÄ«)或者é©åˆä½¿ç”¨PC機(jÄ«)ï¼Œå› æ¤æ¥(yè)界和用戶需求USB主機(jÄ«)的嵌入å¼åŒ–。也就是開發(fÄ)å’Œè¨(shè)計(jì)嵌入å¼çš„USB主機(jÄ«)。
æ ¹æ“š(jù)具體醫(yÄ«)療儀器(酶標(biÄo)儀)的實(shÃ)際需è¦ï¼Œæˆ‘們?cè)è°Œî¹å ‘è…RM7處ç†å™¨S3C44B0X上移æ¤äº†å¯¦(shÃ)時(shÃ)æ“作系統(tÇ’ng)(RTOS)——µC/OS-II,并編寫了基于USB主控制器芯片SL811的底層驅(qÅ«)å‹•(dòng)。為了能將酶標(biÄo)儀所檢測(cè)的數(shù)據(jù)ä¿å˜åˆ°å¤–è¨(shè)(如U盤ã€ç§»å‹•(dòng)硬盤)ä¸ï¼Œç ”究了å°(duì)應(yÄ«ng)的文件系統(tÇ’ng)å’ŒUFI傳輸å”(xié)è°ï¼Œå¯¦(shÃ)ç¾(xià n)了å°(duì)FAT文件系統(tÇ’ng)的海é‡å˜å„²(chÇ”)è¨(shè)å‚™çš„è®€å¯«ã€‚åŒæ™‚(shÃ),為了打å°éœ‰æ¨™(biÄo)儀的檢測(cè)çµ(jié)æžœï¼Œç ”ç©¶äº†EPSONæ‰“å°æ©Ÿ(jÄ«)çš„ESC/P打å°èªžè¨€ï¼Œå¯¦(shÃ)ç¾(xià n)了EPSON C63系列ã€C65系列ã€ME1æ‰“å°æ©Ÿ(jÄ«)基于USBé€šè¨Šçš„åµŒå…¥å¼æ‰“å°æ©Ÿ(jÄ«)é©…(qÅ«)å‹•(dòng)。
2 嵌入å¼USB主機(jÄ«)的硬件è¨(shè)計(jì)
酶標(biÄo)儀的硬件平臺(tái)æ ¸å¿ƒç‚ºä¸‰æ˜Ÿå…¬å¸çš„S3C44B0Xï¼ˆä¸»é »æœ€é«˜å¯é”(dá)66MHz),它集æˆäº†ARM7TDMIæ ¸ï¼ŒLCD控制器,是一款é©ç”¨äºŽä¸ç«¯æ‡‰(yÄ«ng)用的微控制器。系統(tÇ’ng)æ“´(kuò)展包括:å˜å„²(chÇ”)器(8MB SRAMã€2MB NOR Flash)ã€USB主從機(jÄ«)(SL811HS)和按éµç‰ç¡¬ä»¶è³‡æºã€‚å…¶ä¸USB部分硬件連接如圖1所示。
SL811HS是Cypresså…¬å¸æŽ¨å‡ºçš„ä¸€æ¬¾åµŒå…¥å¼USB Hostï¼S1ave芯片。支æŒUSB1.1的全速和低速è¨(shè)備。æä¾›USB主機(jÄ«)的硬件接å£åŠç¸½ç·šç®¡ç†çš„ç‰©ç†æ©Ÿ(jÄ«)制。帶有在片的SIEå’ŒUSB發(fÄ)é€å™¨ä»¥åŠåœ¨ç‰‡çš„æ ¹é›†ç·šå™¨Hubã€‚å› æ¤, 滿足了嵌入å¼USB 主機(jÄ«)系統(tÇ’ng)所需è¦çš„功能, å³ç”±ä¸»æ©Ÿ(jÄ«)接å£èŠ¯ç‰‡ä¾†å®Œæˆç¸½ç·šåº•å±¤ç‰©ç†æ•¸(shù)據(jù)包的發(fÄ)é€ã€æŽ¥æ”¶, 并能檢測(cè)總線狀態(tà i), 發(fÄ)å‡ºä¸æ–·è«‹(qÇng)求。所以, 鏿“‡SL811HS 作為本系統(tÇ’ng)çš„USB接å£èŠ¯ç‰‡æ˜¯åˆé©çš„。
圖2:USBé©…(qÅ«)å‹•(dòng)ç¨‹åºæ£§
如圖2所示,ARM通éŽCs3片é¸SL811HS來確定SL811HS的基地å€ã€‚D0-D7為數(shù)據(jù)和地å€çš„復(fù)用線,并通éŽA0來å€(qÅ«)分,當(dÄng)A0為“0â€çš„æ™‚(shÃ)候,D0-D7上傳輸?shù)æ°–çž§î‚频刂罚环粗?dÄng)A0為“1â€çš„æ™‚(shÃ)候,D0-D7作為數(shù)據(jù)線用。
3 嵌入å¼USB主機(jÄ«)的軟件è¨(shè)計(jì)
3.1 嵌入å¼USB主機(jÄ«)的軟件總體框架
系統(tÇ’ng)的軟件平臺(tái)æ ¸å¿ƒç‚ºµC/OS-II,它是一個(gè)æºç¢¼å…¬é–‹çš„ã€å å…ˆå¼å¤šä»»å‹™(wù)管ç†çš„實(shÃ)時(shÃ)æ“作系統(tÇ’ng)å…§(nèi)æ ¸ï¼Œå…¶æ€§èƒ½å®Œå…¨å¯èˆ‡è¨±å¤šå•†æ¥(yè)產(chÇŽn)å“ç«¶(jìng)çˆ(zhÄ“ng),已在相當(dÄng)多的系統(tÇ’ng)ä¸å¾—到æˆåŠŸæ‡‰(yÄ«ng)用,是一個(gè)ç¶“(jÄ«ng)實(shÃ)è¸è‰æ˜Žç©©(wÄ›n)定å¯é 的內(nèi)æ ¸ï¼Œä¸”å…¶æ ¸å¿ƒä»£ç¢¼çŸå°ç²¾æ‚,簡(jiÇŽn)單易å¸(xué)。
USB主機(jÄ«)為USB系統(tÇ’ng)æä¾›çš„功能有:(1)檢測(cè)USB 外è¨(shè)的接入和移出;(2)管ç†ä¸»æ©Ÿ(jÄ«)和外è¨(shè)之間進(jìn)行的USB 標(biÄo)準(zhÇ”n)æµé‡æŽ§åˆ¶ï¼›ï¼ˆ3)枚舉外è¨(shè);(4)管ç†ä¸»æ©Ÿ(jÄ«)和外è¨(shè)之間的數(shù)據(jù)æµï¼›ï¼ˆ5)æœé›†ç³»çµ±(tÇ’ng)狀態(tà i)和性能的統(tÇ’ng)計(jì)ä¿¡æ¯ï¼›ï¼ˆ6)主機(jÄ«)與外è¨(shè)之間的電氣接å£ï¼ŒåŒ…括供電。
USBå”(xié)è°è¦(guÄ«)定了人機(jÄ«)接å£è¨(shè)å‚™HID類ã€MassStorage 類ã€éŸ³é »é¡žå’Œæ‰“å°é¡žç‰ä¸€ç³»åˆ—çš„è¨(shè)備類型, 用于支æŒä¸åŒçš„è¨(shè)å‚™ã€‚æ ¹æ“š(jù)實(shÃ)際需è¦ï¼Œæˆ‘們開發(fÄ)了USB接å£çš„æµ·é‡å˜å„²(chÇ”)類è¨(shè)備和基于ESC/P打å°èªžè¨€çš„EPSONæ‰“å°æ©Ÿ(jÄ«)嵌入å¼é©…(qÅ«)å‹•(dòng)程åºã€‚具體驅(qÅ«)å‹•(dòng)ç¨‹åºæ£§å¦‚圖2所示。該系統(tÇ’ng)支æŒç†±æ’拔,å¯ä»¥çŸ¥é“è˜(shÃ)別æ’上是哪種è¨(shè)備,并調(dià o)用å°(duì)應(yÄ«ng)的驅(qÅ«)å‹•(dòng)。
3.2 USB Mass Storage 類å”(xié)è°æ¡†æž¶çš„實(shÃ)ç¾(xià n)
USB Mass Storage 類是USB å”(xié)è°æ‰€å®šç¾©çš„用來ç£ç›¤ç®¡ç†åŠå¤§å®¹é‡æ•¸(shù)據(jù)傳輸?shù)摹SB定義了兩種海é‡å˜å„²(chÇ”)傳輸å”(xié)è°ï¼Œå®ƒå€‘分別是Buck-only Transportå’ŒControl/Bulk/Interrupt(CBI)Transport。由于目å‰å¸‚å ´(chÇŽng)上所出ç¾(xià n)的海é‡å˜å„²(chÇ”)è¨(shè)備基本上都采用å‰è€…傳輸å”(xié)è°ï¼Œå³è®€å¯«æ•¸(shù)據(jù)都是通éŽå¡Šå‚³è¼¸ä¾†å¯¦(shÃ)ç¾(xià n)通訊。在命令包CBW(Command Block Wrapper)ä¸åŒ…å«äº†æ¨™(biÄo)å¿—ä¿¡æ¯ï¼Œæ•¸(shù)據(jù)長度以åŠUFI命令ç‰ä¿¡æ¯ã€‚å…¶ä¸UFI命令嫿œ‰æ ¼å¼åŒ–ç£ç›¤ã€è®€ç£ç›¤ã€å¯«ç£ç›¤å’Œè®€ç£ç›¤å®¹é‡ç‰ä¸€ç³»åˆ—ç£ç›¤ç®¡ç†å‘½ä»¤ã€‚
大部分移動(dòng)å˜å„²(chÇ”)è¨(shè)備都采用FAT文件系統(tÇ’ng)ä¾†ç®¡ç†æ–‡ä»¶ã€‚整個(gè)文件系統(tÇ’ng)通éŽMass Storage çš„UFI 命令與外è¨(shè)çš„ç£ç›¤å»ºç«‹è¯(lián)系。FAT文件系統(tÇ’ng)將海é‡å˜å„²(chÇ”)è¨(shè)備上的數(shù)據(jù)大致分æˆ5個(gè)部分:MBRå€(qÅ«)(主引導(dÇŽo)å€(qÅ«))ã€DBRå€(qÅ«)(系統(tÇ’ng)引導(dÇŽo)å€(qÅ«))ã€FATå€(qÅ«)(文件分é…表)ã€FDTå€(qÅ«)(文件目錄表)和DATAå€(qÅ«)(數(shù)據(jù)å€(qÅ«))。當(dÄng)有USB接å£çš„æµ·é‡å˜å„²(chÇ”)è¨(shè)å‚™æ’上åŽï¼Œç³»çµ±(tÇ’ng)讀å–MBRå€(qÅ«)å’ŒDBRå€(qÅ«)來ç²å¾—æ¯æ‰‡å€(qÅ«)å—節(jié)數(shù),æ¯ç°‡æ‰‡å€(qÅ«)數(shù),F(xià n)AT表個(gè)數(shù)ç‰æ–‡ä»¶ç³»çµ±(tÇ’ng)基本信æ¯ã€‚ç²å–這些基本信æ¯åŽå¾žæµ·é‡å˜å„²(chÇ”)è¨(shè)備讀å–一個(gè)文件的æµç¨‹å¦‚圖3ç¤ºã€‚å› ?qÅ«)懳募î’妥x文件的æµç¨‹æ²’有很大的差別,在æ¤å°±ä¸ç´¯è¿°äº†ã€‚

圖3讀文件æµç¨‹åœ–
3.3 基于ESC/ Pæ‰“å°æŽ§åˆ¶èªžè¨€çš„æ‰“å°æ©Ÿ(jÄ«)é©…(qÅ«)å‹•(dòng)è¨(shè)計(jì)
EPSONå…¬å¸çš„æ‰“å°æ©Ÿ(jÄ«)基本上都是基于ESC/ Pæ‰“å°æŽ§åˆ¶èªžè¨€çš„ï¼Œä¸åŒç³»åˆ—çš„æ‰“å°æ©Ÿ(jÄ«)çš„æŽ§åˆ¶èªžè¨€æ²’æœ‰å¤ªå¤§çš„å·®åˆ¥ã€‚å› æ¤ï¼Œæˆ‘們開發(fÄ)的驅(qÅ«)å‹•(dòng)程åºå…·æœ‰æ¯”較強(qiáng)的通用性,é‡å°(duì)EPSONçš„C63ç³»åˆ—æ‰“å°æ©Ÿ(jÄ«)開發(fÄ)的驅(qÅ«)å‹•(dòng)完全é©ç”¨C65系列和ME1æ‰“å°æ©Ÿ(jÄ«)。
å„種型號(hà o)æ‰“å°æ©Ÿ(jÄ«)的編程手冊(cè)å¯ä»¥åˆ°EPSON的開發(fÄ)ç¶²(wÇŽng)站上下載。編程手冊(cè)å°(duì)å„種控制命令作了詳細(xì)介紹,如åˆå§‹åŒ–æ‰“å°æ©Ÿ(jÄ«)(ESC @)ã€é¸æ“‡åœ–形方å¼ï¼ˆ ESC(C nL nH m )ã€è¨(shè)置單元大å°ï¼ˆESC (U nL nH mï¼‰ã€æ‰“å°å…‰æŸµåœ–åƒå‘½ä»¤ï¼ˆESC . c v h m N1 Nh d1 ⋯dk)ç‰ã€‚
EPSONæ‰“å°æ©Ÿ(jÄ«)æä¾›å…©ç¨®æ‰“å°æ–¹å¼ï¼Œä¸€ç¨®æ˜¯ç”¨ä¾†æ‰“å°æ–‡æœ¬æ–‡ä»¶ï¼Œç”¨è©²æ–¹å¼æ‰“å°è‹±æ–‡å—æ¯ã€é˜¿æ‹‰ä¼¯?dÄng)?shù)å—ã€ç¬¦åˆçš„æ™‚(shÃ)候呿‰“å°æ©Ÿ(jÄ«)發(fÄ)å°(duì)應(yÄ«ng)的控制命令åŽï¼Œåªè¦ç›´æŽ¥ç™¼(fÄ)打å°å…§(nèi)容的ASCII碼å³å¯ã€‚å¦ä¸€ç¨®æ–¹å¼æ˜¯ç”¨ä¾†æ‰“å°å…‰æŸµåœ–形,當(dÄng)éœ€è¦æ‰“å°è¡¨æ ¼ã€åœ–片和漢å—的時(shÃ)候時(shÃ)往往會(huì)用到這種方å¼ã€‚在æ¤ï¼Œåˆ—出幾個(gè)é—œ(guÄn)éµAPI函數(shù)并予已說明:
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)用éŽä¸€æ¬¡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)打å°åœ–片功能了。
ç”±äºŽæ‰“å°æ–‡æœ¬æ¨¡å¼å’Œæ‰“å°åœ–形的æ“作基本相åŒï¼Œè€Œä¸”æ›´ç°¡(jiÇŽn)單,在æ¤å°±ä¸ä½œèªªæ˜Žã€‚
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)通éŽèª¿(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ù)通éŽå¡Šå‚³è¼¸æ–¹å¼ç™¼(fÄ)é€åˆ°è¨(shè)備上;
BuckReceive():塊傳輸接å—函數(shù)ï¼›
BuckSend()和BuckReceive()兩個(gè)函數(shù)是最調(dià o)度最平凡的兩個(gè)函數(shù)ï¼Œå› ?yà n)é–·?duì)æµ·é‡å˜å„²(chÇ”)è¨(shè)備的讀寫,å°(duì)æ‰“å°æ©Ÿ(jÄ«)發(fÄ)é€æŽ§åˆ¶å‘½ä»¤ã€æ‰“å°æ•¸(shù)據(jù)都是通éŽå¡Šå‚³è¼¸é€šè¨Šçš„,也就是通éŽèª¿(dià o)用這兩個(gè)函數(shù)來實(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Ç”)器的讀寫都å¯ä»¥é€šéŽä»¥ä¸Šå…©å€‹(gè)函數(shù)來實(shÃ)ç¾(xià n)。當(dÄng)需è¦é€£çºŒ(xù)讀寫SL811ä¸çš„儲(chÇ”)å˜å™¨æ™‚(shÃ)å¯ä»¥é‡‡ç”¨ä»¥ä¸‹æ–¹å¼ä¾†å¯¦(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)æ ¸µ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Ã)用的方案。