一種基于FPGA的CAN總線通信接口的設(shè)計(jì)
3 軟件設(shè)計(jì)
3.1 USB固件程序
USB固件程序是在Keil工具上開(kāi)發(fā)完成的,除了進(jìn)行必要的端點(diǎn)及寄存器配置外,程序中使用了自定義請(qǐng)求命令。自定義請(qǐng)求碼通過(guò)USB控制傳輸?shù)姆绞絺魉徒o固件,固件程序需要響應(yīng)自定義請(qǐng)求碼的請(qǐng)求信息。本文使用的自定義請(qǐng)求碼為Oxa8,在響應(yīng)代碼中設(shè)置端口PA[1:0]電平值,產(chǎn)生USB控制命令,代碼如下所示。SETUPDAT[2]對(duì)應(yīng)控制傳輸端點(diǎn)的Value值,由上位機(jī)應(yīng)用程序設(shè)定。
3.2 USB驅(qū)動(dòng)程序及應(yīng)用程序
使用CYPRESS公司提供的CY7C68013A通用驅(qū)動(dòng)程序CyUSB.sys。上位機(jī)應(yīng)用程序使用VC編寫(xiě),也是基于Cypress提供的C++類(lèi)庫(kù)文件CyAP-I.lib設(shè)計(jì)完成的。使用的主要函數(shù)包括:BeginDataXfer、FinishDataXfer、XferData等函數(shù)。應(yīng)用程序中設(shè)計(jì)了獨(dú)立的數(shù)據(jù)接收線程,線程函數(shù)中不斷地發(fā)送USB數(shù)據(jù)讀命令,并完成批量輸人端點(diǎn)的讀操作。當(dāng)有數(shù)據(jù)讀入時(shí),與主線程之間采用事件的線程同步方式,將數(shù)據(jù)讀入計(jì)算機(jī)內(nèi)存并保存。以下是線程函數(shù)中用于發(fā)送USB控制命令的控制傳輸代碼:
評(píng)論