<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 帶全速USB接口的單片機(jī)PIC18F4550的應(yīng)用設(shè)計(jì)方法

          帶全速USB接口的單片機(jī)PIC18F4550的應(yīng)用設(shè)計(jì)方法

          作者: 時(shí)間:2012-03-30 來源:網(wǎng)絡(luò) 收藏

           2.4 的固件

          本文引用地址:http://www.ex-cimer.com/article/171728.htm

            微芯公司提供了一系列的寄存器,使用這些寄存器可以完成通信。大多數(shù)的通信都是通過中斷來完成的,在USB中斷服務(wù)程序內(nèi),要實(shí)現(xiàn)輸入/輸出,允許大多數(shù)的USB程序在后臺(tái)完成。從的觀點(diǎn)來看,枚舉過程和數(shù)據(jù)通信的發(fā)生好像沒有聯(lián)系。

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

           ?、?main.c:系統(tǒng)的主程序,包括InitializeSystem()和USBTasks(void)兩個(gè)子程序,主要完成系統(tǒng)的初始化以及其他各種子程序的調(diào)用。

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

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

           ?、?usbdrv.c:主要實(shí)現(xiàn)與USB驅(qū)動(dòng)相關(guān)的功能,包括檢查總線狀態(tài)、USB模塊使能、USB模塊掛起、遠(yuǎn)程喚醒等功能;主要由USBSuspend(void)、USBModuleEnable(void)、USBSoftDetach(void)和USBDriverService(void)等12個(gè)子程序組成。

           ?、?usbdsc.c:主要是對(duì)該系統(tǒng)的描述,包括廠商、產(chǎn)品號(hào)等的描述。

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

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

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

            2.5 PC機(jī)軟件編程

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


            PC機(jī)的軟件部分主要用于實(shí)現(xiàn)上位機(jī)同下位機(jī)之間的USB通信,光柵位移傳感器位移信號(hào)的細(xì)分和顯示等功能。實(shí)現(xiàn)這一功能的有很多種,比如采用簡單的VB、數(shù)據(jù)處理能力很強(qiáng)的Delphi,或國內(nèi)外廣泛采用的Borland C和VC等。為了下一步的軟件開發(fā)以及與廠家的其他軟件,本系統(tǒng)上位機(jī)的軟件部分采用VC++6.0來實(shí)現(xiàn)。圖3是PC機(jī)軟件部分的流程圖。

          帶全速USB接口的PIC18F4550應(yīng)用設(shè)計(jì)

           3 結(jié) 語

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

          干涉儀相關(guān)文章:干涉儀原理



          上一頁 1 2 下一頁

          關(guān)鍵詞: 應(yīng)用 設(shè)計(jì) 方法 PIC18F4550 單片機(jī) USB 接口 全速

          評(píng)論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();