新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 基于單片機PIC18F4550的USB接口設計

        基于單片機PIC18F4550的USB接口設計

        作者: 時間:2010-12-11 來源:網絡 收藏
          2.4 的固件

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

          微芯公司提供了一系列的寄存器,使用這些寄存器可以完成通信。大多數的通信都是通過中斷來完成的,在USB中斷服務程序內,要實現輸入/輸出,允許大多數的USB程序在后臺完成。從應用的觀點來看,枚舉過程和數據通信的發生好像沒有聯系。

          對于控制程序,目前沒有任何廠商提供自動生成固件(firmware)的工具,因此所有程序都要由自己手工編制。由于USB協議的復雜性,并且考慮 到廣大客戶的需求,因此,Microchip公司在推出系列芯片時,提供了面向不同客戶群的DEMO程序,這就大大減輕了系統開發人員的負擔,同時縮短了開發周期。本系統的就是在Microchip公司提供的DEMO程序的基礎上,進行必要的修改來完成的。本的具體固件主要由以下8個文件組成。

          ① main.c:系統的主程序,包括InitializeSystem()和USBTasks(void)兩個子程序,主要完成系統的初始化以及其他各種子程序的調用。

          ② usb9.c:實現的是USB協議第9章的功能,包括枚舉總線的和核心功能,以及USB的中斷服務程序。它處理由USB用戶所產生的所有的中斷。在這個程序中,主要實現對描述符的枚舉以及休眠、復位功能,主要包括USBCheckStdRequest(void)、USBStdGetDscHandler(void)和USBStdFeatureReqHandler(void)等5個子程序。

        ③ usbctrltrf.c:主要實現USB控制傳輸所需的各種功能,主要由USBCtrlTrfSetupHandler(void)、USBCtr-lEPServiceComplete(void)和USBPrepareForNextSetup-Trf(void)等8個子程序組成。

          ④ usbdrv.c:主要實現與USB驅動相關的功能,包括檢查總線狀態、USB模塊使能、USB模塊掛起、遠程喚醒等功能;主要由USBSuspend(void)、USBModuleEnable(void)、USBSoftDetach(void)和USBDriverService(void)等12個子程序組成。

          ⑤ usbdsc.c:主要是對該系統的描述,包括廠商、產品號等的描述。

          ⑥ usbgen.c:對USB設備類的配置(在這里把它配置為通用USB類),主要包括USB通用類的初始化端點和讀寫,由USBGenInitEP(void)、USBGenRead(byte*buffer,byte len)和USBGenWrite(byte*buffer,bytelen)三個子程序組成。

          ⑦ usbmmap.c:主要用于檢查USB在通信過程中,端點號與BDT(緩沖器描述符表)之間的匹配。

          ⑧ user.c:直接面向用戶的應用程序,可以幫助用戶完成自己的初始化配置、處理數據的讀/寫、I/O口的處理,設備的請求等。本設計中下位機的大部分功能都是由這個程序來實現的,比如A/D轉換及其數據的讀取、1MHz的PWM波形產生等。它主要包括UserInit(void)、BlinkUSBStatus(void)、ServiceRequests(void)、ProcessIO(void)、ResetTempLog(void)和ReadPOT(void)六個子程序。

          2.5 PC機軟件編程

          要編寫PC機上的軟件,可以利用Microchip公司提供的開發工具包。該工具包是一個安裝程序,安裝后可以在安裝目錄下找到USB通用的驅動程序、用Borland C編寫的應用程序、一些固件代碼,以及編寫應用程序所需的API函數等。對于一般的應用,驅動程序可以直接使用,無需重編。在編程中主要用到以下7個API函數:MPUSBGetDLL Version(),返回DLL的版本號;MPUSB-GetDeviceCount(),返回連接沒備的數目;MPUSBOpen(),返回指定pVID_PID和pEP的USB設備端點的句柄,返回的是一個端點句柄;MPUSBRead(),從IN端點讀取數據并填入緩沖區;MPUSBWrite(),對一個OUT端點寫入數據并使用pData緩沖區;MPUSBReadInt(),從Inter-rupt IN端點讀取數據并填人緩沖區;MPUSBClose(),關閉一個端點的句柄。因為Microchip公司提供的MPUS-BAPI.DLL源程序是用Borland C編寫的,這一程序無法在VC環境下編譯,所以也不能產生隱式調用所需的.LIB文件,因此本設計在使用DLL時用的是顯式鏈接。


          PC機的軟件部分主要用于實現上位機同下位機之間的USB通信,光柵位移傳感器位移信號的細分和顯示等功能。實現這一功能的方法有很多種,比如采用簡單的VB、數據處理能力很強的Delphi,或國內外廣泛采用的Borland C和VC等。為了下一步的軟件開發以及與廠家的其他軟件接口,本系統上位機的軟件部分采用VC++6.0來實現。圖3是PC機軟件部分的流程圖。

        帶全速USB接口的PIC18F4550應用設計

         3 結 語

          選擇何種芯片來設計嵌入式系統,需要根據系統的需求、設計的難易程度和性價比等幾個方面來考慮。Micro-chip公司為PIC18F4550系列單片機提供通用的驅動程序、API函數、DEMO板和一系列范例程序等。其中,一些固件的端點與PC機通信的子程序可以直接調用,而不需要重寫,從而大大提高了開發效率,縮短了產品的研發周期,這勢必會導致該系列單片機會很快占據一部分USB接口市場。正是由于USB的諸多優點和光柵位移傳感器有著很多其他位移傳感器無法比擬的優點,因此,本設計的應用也將會越來越廣泛。

        干涉儀相關文章:干涉儀原理



        上一頁 1 2 下一頁

        關鍵詞: 接口 設計 USB PIC18F4550 單片機 基于

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 莱阳市| 陕西省| 林口县| 广州市| 兴海县| 洛扎县| 平原县| 灵川县| 瑞丽市| 深泽县| 泊头市| 五河县| 金门县| 饶平县| 宜阳县| 金华市| 囊谦县| 公安县| 平原县| 承德县| 永善县| 阳谷县| 阿拉善右旗| 乡宁县| 台湾省| 云霄县| 富川| 漳浦县| 江华| 凉城县| 监利县| 和政县| 乐平市| 中山市| 手游| 东乌珠穆沁旗| 册亨县| 镇巴县| 德江县| 高雄县| 民勤县|