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