通用串行總線(xiàn)在分組無(wú)線(xiàn)網(wǎng)中的應用
3.2 PRU和USB接口設計
USB接口電路圖如圖2所示。
圖2中USBN9602上的引腳D+通過(guò)上拉電阻接在3.3V電壓上,這樣就選定為全速(12Mbps)設備。如果D-被上拉,則設置為低速(1.5Mbps)設備。
單片機可以通過(guò)8位并行接口A(yíng)D[7:0]或MICROWIRE接口與USBN9602連接。對于并行接口,有兩種模式可供選擇:復用方式和非復用方式。這兩種方式的選擇通過(guò)設置MODE0和MODE1兩引腳的電平高低來(lái)實(shí)現。這里使用復用方式連接USBN9602和8051單片機。選擇該方式時(shí),MODE0和MODE1分別接高電平和低電平。該方式下的數據傳輸用到了USBN9602上的控制引腳RD、WR、片選信號CS、地址鎖存使能信號ALE和雙向的地址/數據總線(xiàn)AD[7:0]。引腳RD、WR和ALE分別與8051上相應的引腳相連,片片信號CS由8051輸出的高8位地址經(jīng)過(guò)解碼器產(chǎn)生。當ALE為高電平時(shí),AD[7:0]上的地址信號被鎖存到USBN9602內的地址寄存器中,再當RD或WR有效時(shí),數據被讀出或者寫(xiě)入。通過(guò)這種方式,USBN9602中的任何一個(gè)寄存器都可以被直接訪(fǎng)問(wèn)。由于這種讀寫(xiě)時(shí)序與8051讀寫(xiě)外部數據寄存器的時(shí)序相同,因此可以把USBN9602中需要讀寫(xiě)的寄存器當作普通的外部數據寄存器來(lái)對待,在接口程序中直接用MOVX指令來(lái)進(jìn)行操作。
另外USBN9602還提供了一個(gè)中斷輸出,它用來(lái)引起單片機的中斷。中斷方式可以通過(guò)編程設置,將這個(gè)中斷輸出引腳直接與8051單片機上的外部中斷引腳INT1相連。由于8051的餐部中斷輸入為低有效,所以USBN9602的中斷輸出也應通過(guò)編程設置為低有效。
3.3 PRU的USB接口程序設計
USB接口的程序包括三個(gè)基本的部分:①初始化,這部分程序用來(lái)對單片機和所有外圍電路進(jìn)行初始化;②主循環(huán),它可以被中斷;③中斷句柄,對中斷進(jìn)行處理,并且對時(shí)間敏感。這幾部分均是嵌入在PRU的網(wǎng)絡(luò )控制程序中的。
初始化程序中包含對USBN9602的初始化。①進(jìn)行軟件復位,它不影響時(shí)鐘輸出,相當于一個(gè)硬件復位;②設置中斷方式,這一步驟確定了中斷輸出是高有效還是低有效;③設置缺省地址,這是由于USB規范規定設備在總線(xiàn)為其分配地址之間要以0作為缺省地址;④設置中斷屏蔽,在USBN9602中各個(gè)端點(diǎn)的發(fā)送數據、接收數據和發(fā)送NAK握手包等事件可能產(chǎn)生中斷;設置中斷屏蔽這個(gè)步驟確定了哪一個(gè)端點(diǎn)的哪一種事件能夠產(chǎn)生中斷。
單片機通過(guò)中斷的方式來(lái)處理USB接口上的各個(gè)事件,處理過(guò)程是在中斷句柄中完成的。當某個(gè)端點(diǎn)接收到數據,并且在初始化中該事件被允許中斷,則USBN9602就會(huì )向單片機發(fā)出中斷信號,單片機會(huì )在中斷句柄中處理這些數據。中斷句柄中處理了端點(diǎn)0對以控制方式傳輸的命令的接收與響應和各個(gè)端點(diǎn)數據的發(fā)送與接收等事件,其中那些以控制方式傳輸的命令包括清除特征(CLEAR-FEATURE)、設置特征(SET-FEA-TURE)、讀取配置(GET-CONFIGURATION)、設置配置(SET-CONFIGURATION)、讀取描述符(GET-DESCRIP-TOR)、讀取狀態(tài)(GET-STATUS)和設置地址(SET-AD-DRESS)。通過(guò)這些命令主機可以了解或改變設備的工作狀態(tài)。描述符包括設備描述符和配置描述符,USB規范給出了它們的格式工,想要計算機正確識別設備并安裝驅動(dòng)程序,這些描述符必須根據具體設備的情況填寫(xiě)。
以上各步驟中USBN9602與單片機的通信是通過(guò)單片機在USBN9602的寄存器中進(jìn)行讀和寫(xiě)來(lái)完成的,因此對USBN9602的讀和寫(xiě)是單片機執行最頻繁也是最重要的操作。在程序中這兩個(gè)操作表現為子函數read_usb和write_usb。USBN9602共有64個(gè)可讀或可寫(xiě)的寄存器,它們同時(shí)擁有一個(gè)高8位地址,又各自擁有一個(gè)低8位地址(00~3F)。由于前面所提到可以把USBN9602中需要讀寫(xiě)的寄存器當作普通的外部數據寄存器來(lái)對待,所以只需給定高8位地址和要讀寫(xiě)的寄存器對應的低8位地址,就可以直接用MOVX指令來(lái)完成這兩項操作。
這時(shí)的PRU已經(jīng)成為一個(gè)USB設備,能夠被計算機正確識別。要使這個(gè)USB設備正常工作,實(shí)現它與計算機的通信,還要為該設備編寫(xiě)驅動(dòng)程序。USB的驅動(dòng)程序屬于WDM型。WDM(Windows Driver Model),即Windows驅動(dòng)程序模型,是Microsoft力推的全新驅動(dòng)程序模式,旨在通過(guò)提供一種靈活的方式來(lái)簡(jiǎn)化驅動(dòng)程序的開(kāi)發(fā),在實(shí)際對新硬件支持的基礎上減少并降低所必須開(kāi)發(fā)的驅動(dòng)程序的數據數量和復雜性。開(kāi)發(fā)工具可以選擇DDK(Driver Development Kits)。
評論