新聞中心

        EEPW首頁 > 電源與新能源 > 設計應用 > 基于CY7C68013A芯片的USB鍵盤的設計

        基于CY7C68013A芯片的USB鍵盤的設計

        作者: 時間:2012-04-09 來源:網絡 收藏

        十分簡單,CYTC68013A-56pin有PA、PB、PD三組24個IO端口,利用這些IO端口,就可常用的矩陣,如圖2所示,鍵的數目可達12*12個。和51單片機實現的一樣,固件程序需要對行和列進行掃描,采用輪詢或中斷的方式,對按下的鍵值進行判斷。

        本文引用地址:http://www.104case.com/article/177579.htm

        b.JPG


        另外,在制作電路板的時候,注意D+和D-的走線盡量的短而且相等,晶振盡量靠近
        3.2 的固件程序
        EZ- FX2LP采用的是一種軟配置模式。也就是設備的各種驅動程序都保存在上位機,上電后,USB主機首先將程序下載到RAM中,然后從RAM開始執行。在這個過程中,有兩次“枚舉”:剛加電時,USB內核中沒有固件,將被枚舉為一個默認的USB設備;主機下載固件程序之后,在內核中執行固件程序,就會重新識別并枚舉這個USB設備,這個過程被稱為“重枚舉”。在第一次枚舉時,根據芯片有沒有連接E2PROM,以及E2PROM中第一個字節的值,有不同的處理方式。當沒有外接E2PROM時,將根據驅動程序中提供的VID,PID和DID,把主機上對應的固件程序下載到片內的RAM中,并執行固件代碼。
        USB固件程序是USB設備功能的核心,通過兩次枚舉,固件程序被下載到的芯片里(程序也可以放在外接的EEPROM芯片里),用于配置芯片工作在需要的狀態下。
        固件程序使用Keil μVision來編寫。可以參考Cypress的例程。大體步驟是:
        (1)初始化休眠模式、遠程喚醒等。
        (2)初始化用戶設備,主要是‘TD_Init()子程序。負責整個USB設備的初始化過程。
        (3)定向描述符。
        (4)把所用中斷打開,并開啟8051全局中斷EA=1。由于EZ-USB設備啟動需要重列舉,因而需要通過設置和判斷USBCS寄存器的RENUM和DISCON位來模擬設備物理上的斷開和連接過程。
        (5)用戶外圍設備控制功能的實現放在TD_Poll()子程序中,同時主循環中的SetupCommand()子程序用于接收、分析上位機的控制信號,響應上位機請求(標準請求和用戶自定義請求)。
        3.3 USB通用驅動程序的使用
        USB設備的使用需要驅動程序的支持,Cypress提供了通用的USB驅動程序。
        該驅動包括兩部分:CyLoad.sys和CyUsb.sys,前者用于固件程序的下載,后者用于主機和固件程序的通信。這兩個驅動程序提供的引導文件分別是CyLoad.inf和CyUSB.inf,用戶可以直接使用,也可以根據需要進行改動。
        為了在CyLoad.sys的幫助下實現固件的自動下載,固件程序CyLoad.HEX必須轉換為適合自動下載的CyLoad.spt文件,并且與CyLoa d.sys一起放在CyLoad文件夾下,拷貝到系統system32目錄下。在安裝文件CyUSB.inf中設置的PID,VID必須和描述符中的一致,使得能夠自動加載對應固件。
        USB設備使用時,必須首先安裝驅動程序,注意分別安裝上面提到的下載驅動CyLoad.sys和通信驅動CyUsb.sys。安裝驅動之后,可以使用Cypress提供的主機控制函數庫CyAPI.lib開發主機程序,通過驅動程序和USB設備進行通信。
        3.4 USB主機的應用程序設計
        USB主機程序可以使用Cypress提供的CyAPI.lib庫來進行編程。CyAPI.lib對應Cypress提供的驅動程序CyUsb.sys,為其提供了簡單而且功能強大的C++編程接口,通過CyAPI.lib庫提供的函數,可以對USB設備進行讀寫操作,這些函數主要是Open,Close和XferData。
        本文以VC++6.0為例,描述創建USB設備應用程序的步驟。
        (1)新建工程,并將CyAPI.h,CyAPI.lib,cyioctl.h三個文件加載到項目中。
        CyAPI.h中定義了CCyUSBDevice、CCyControlEndPoint等幾個重要的類;而cyioctl.h中則定義了讀取USB設備的幾個重要的結構和宏。
        (2)在相應的文件中(視、框架或者對話框,依具體情況),包含頭文件CyAPI.h和cyioefl.h。
        然后定義USB設備全局變量和控制端點全局變量,并進行初始化:
        CCyUSBDevice*USBDevice=new CCyUSBDevice();
        CCyControlEndPoint*ept=USBDevice->ControlEndPt;
        (3)在程序執行時,采用中斷方式,或者輪詢方式交換數據。以輪詢方式為例,則在幀循環中加入如下代碼:
        c.JPG
        首先判斷設備是否打開,然后指定操作碼,ept->XferData()完成傳輸,實現從端口讀數據,或者向端口寫數據。數據傳輸的方向由ept->Direction來設置。
        (4)結束程序時,關閉USBDevice。
        USBDevice->Close;

        4 結論
        EZ-USB FX2芯片實現USB系統,軟硬件程序設計,相比較而言,簡單、方便。本文介紹了設計USB系統的大體步驟,給出了USB鍵盤設計的實例。
        上述系統和程序經過實際運行,工作穩定、可靠。

        DIY機械鍵盤相關社區:機械鍵盤DIY


        pid控制相關文章:pid控制原理


        51單片機相關文章:51單片機教程


        c++相關文章:c++教程



        上一頁 1 2 下一頁

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 德钦县| 甘孜| 抚宁县| 新昌县| 乡宁县| 信宜市| 张北县| 巨野县| 来凤县| 澎湖县| 丰城市| 桦川县| 台州市| 长兴县| 余江县| 盖州市| 屯门区| 天柱县| 汕头市| 辽中县| 印江| 黔江区| 黑山县| 三江| 宜宾县| 黄浦区| 汾西县| 织金县| 淮安市| 黄平县| 临江市| 广饶县| 景洪市| 英吉沙县| 丽水市| 江陵县| 河源市| 叙永县| 彰化县| 台中县| 介休市|