freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

at89c51單片機(jī)usb接口驅(qū)動(dòng)和應(yīng)用程序的開發(fā)畢業(yè)論文(編輯修改稿)

2025-07-25 07:56 本頁面
 

【文章內(nèi)容簡(jiǎn)介】 的分析說明。在內(nèi)置固件模式的USB設(shè)備方式下,單片機(jī)只需要處理表中標(biāo)注為灰色的中斷狀態(tài),CH372內(nèi)部自動(dòng)處理了其它中斷狀態(tài)。表35 中斷狀態(tài)值命令UNLOCK_USB:該命令釋放當(dāng)前USB緩沖區(qū)。為了防止緩沖區(qū)覆蓋,CH372向單片機(jī)請(qǐng)求中斷前首先鎖定當(dāng)前緩沖區(qū),暫停所有的USB通訊,直到單片機(jī)通過UNLOCK_USB命令釋放當(dāng)前緩沖區(qū),或者通過RD_USB_DATA命令讀取數(shù)據(jù)后才會(huì)釋放當(dāng)前緩沖區(qū)。該命令不能多執(zhí)行,也不能少執(zhí)行。命令RD_USB_DATA0:該命令從當(dāng)前USB中斷的端點(diǎn)緩沖區(qū)中讀取數(shù)據(jù)塊。首先讀取的輸出數(shù)據(jù)是數(shù)據(jù)塊長度,也就是后續(xù)數(shù)據(jù)流的字節(jié)數(shù)。數(shù)據(jù)塊長度的有效值是0至64,如果長度不為0,則單片機(jī)必須將后續(xù)數(shù)據(jù)從CH372逐個(gè)讀取完。該命令與RD_USB_DATA命令的唯一區(qū)別是后者在讀取完成后還會(huì)自動(dòng)釋放當(dāng)前USB緩沖區(qū)(相當(dāng)于再加上UNLOCK_USB命令)。命令WR_USB_DATA5:該命令向USB端點(diǎn)1的上傳緩沖區(qū)寫入數(shù)據(jù)塊,在內(nèi)置固件模式下,USB端點(diǎn)1就是中斷端點(diǎn)。首先寫入的數(shù)據(jù)是數(shù)據(jù)塊長度,也就是后續(xù)數(shù)據(jù)流的字節(jié)數(shù)。數(shù)據(jù)塊長度的有效值是0至8,如果長度不為0,則單片機(jī)必須將后續(xù)數(shù)據(jù)逐個(gè)寫入CH372。命令WR_USB_DATA7:該命令向USB端點(diǎn)2的上傳緩沖區(qū)寫入數(shù)據(jù)塊,在內(nèi)置固件模式下,USB端點(diǎn)2就是批量端點(diǎn)。首先寫入的輸入數(shù)據(jù)是數(shù)據(jù)塊長度,也就是后續(xù)數(shù)據(jù)流的字節(jié)數(shù)。數(shù)據(jù)塊長度的有效值是0至64,如果長度不為0,則單片機(jī)必須將后續(xù)數(shù)據(jù)逐個(gè)寫入CH372。 USB接口的硬件電路設(shè)計(jì)圖31 CH372的引腳圖CH372芯片的被動(dòng)并行接口包括:8位雙向數(shù)據(jù)總線D7~D0、讀選通輸入引腳RD、寫選通輸入引腳WR、片選輸入引腳CS、中斷輸出引腳INT以及地址輸入引腳A0。通過被動(dòng)并行接口,CH372芯片可以很方便地掛接到各種8位單片機(jī)、DSP、MCU的系統(tǒng)總線上,并且可以與多個(gè)外圍器件共存。CH372芯片的RD和WR可以分別連接到單片機(jī)的讀選通輸出引腳和寫選通輸出引腳。CS由地址譯碼電路驅(qū)動(dòng),用于當(dāng)單片機(jī)具有多個(gè)外圍器件時(shí)進(jìn)行設(shè)備選擇。INT輸出的中斷請(qǐng)求是低電平有效,可以連接到單片機(jī)的中斷輸入引腳或者普通I/O引腳,單片機(jī)可以使用中斷方式或者查詢方式獲知中斷請(qǐng)求。當(dāng)WR為高電平并且CS和RD及A0都為低電平時(shí),CH372中的數(shù)據(jù)通過D7~D0輸出;當(dāng)RD為高電平并且CS和WR及A0都為低電平時(shí),D7~D0上的數(shù)據(jù)被寫入CH372芯片中;當(dāng)RD為高電平并且CS和WR都為低電平而A1為高電平時(shí),D7~D0上的數(shù)據(jù)被作為命令碼寫入CH372芯片中。CH372芯片占用兩個(gè)地址位,當(dāng)A0引腳為高電平時(shí)選擇命令端口,可以寫入新的命令,或者讀出中斷標(biāo)志;當(dāng)A0引腳為低電平時(shí)選擇數(shù)據(jù)端口,可以讀寫數(shù)據(jù)。表36 并口I/O操作的真值表(表中X代表不關(guān)心此位,Z代表CH372三態(tài)禁止)。CH372芯片的UD+和UD引腳應(yīng)該直接連接到USB總線上。如果為了芯片安全而串接保險(xiǎn)電阻或者電感或者ESD保護(hù)器件,那么交直流等效串聯(lián)電阻應(yīng)該在5Ω之內(nèi)。CH372芯片內(nèi)置了電源上電復(fù)位電路,一般情況下,不需要外部提供復(fù)位。CH372芯片正常工作時(shí)需要外部為其提供12MHz的時(shí)鐘信號(hào)。一般情況下,時(shí)鐘信號(hào)由CH372內(nèi)置的反相器通過晶體穩(wěn)頻振蕩產(chǎn)生。外圍電路只需要在X1和X0引腳之間連接一個(gè)標(biāo)稱頻率為12MHz的晶體,并且分別為X1和X0引腳對(duì)地連接一個(gè)高頻振蕩電容。如果從外部直接輸入12MHz時(shí)鐘信號(hào),那么應(yīng)該從X1引腳輸入,而X0引腳懸空。當(dāng)使用5V工作電壓時(shí),CH372芯片的VCC引腳輸入外部5V電源。,CH372芯片的V3引腳應(yīng)該與VCC引腳相連接。 USB接口硬件的實(shí)現(xiàn)綜合以上對(duì)USB的介紹和陳述,USB接口電路可有以下幾部分構(gòu)成(總體電路圖的設(shè)計(jì)見附錄一)。下圖為AT89C51的時(shí)鐘電路圖,單片機(jī)內(nèi)部有一個(gè)用于構(gòu)成振蕩器的高增益反相放大器,引腳X1和X2分別是此放大器的輸入和輸出端。單片機(jī)的這個(gè)放大器與作為反饋元件的片外晶體一起構(gòu)成了穩(wěn)定的自激振蕩器,發(fā)出的脈沖直接送入內(nèi)部的時(shí)鐘電路。C1和C2值通常選擇30pF,他們對(duì)頻率有微調(diào)作用。CH372的時(shí)鐘電路與此相似。圖32 時(shí)鐘電路 復(fù)位電路圖33 復(fù)位電路單片機(jī)的復(fù)位是上電自動(dòng)復(fù)位,它是利用電容來實(shí)現(xiàn)的,即上電瞬間RST/Vpd端的電位與Vcc相同,隨著充電電流的減少,RST/Vpd的電位逐漸下降。上電復(fù)位的最短時(shí)間是振蕩周期建立時(shí)間加上2個(gè)機(jī)器周期時(shí)間,在這個(gè)時(shí)間內(nèi)RST/Vpd端的電平應(yīng)維持高于施密特觸發(fā)器的下閾值。 A/D轉(zhuǎn)換電路 ,,或門開啟,由單片機(jī)的WR和RD分別控制ADC0809的ALE、START和ENABLE。 通過一條單片機(jī)對(duì)ADC0809的寫指令便能夠啟動(dòng)其A/D轉(zhuǎn)換,當(dāng)單片機(jī)執(zhí)行讀指令時(shí),WR輸出高電平,RD輸出低電平,則ADC0809的ALE引腳為高,ENABLE引腳也為高電平,所以首先地址被鎖存,然后數(shù)據(jù)允許被讀出[11]。 單片機(jī)的ALE引腳通過外接分頻器(除2)為ADC0809提供時(shí)鐘信號(hào)。 將ADC0809的EOC通過非門與單片機(jī)的INT0相連,當(dāng)A/D轉(zhuǎn)換結(jié)束時(shí)產(chǎn)生中斷信號(hào),單片機(jī)在中斷處理程序中將數(shù)據(jù)讀出。圖34 A/D轉(zhuǎn)換電路[ CH372接口電路圖35 CH372接口電路C5和C6用于外部電源退耦,電容C7用于CH372內(nèi)部電源節(jié)點(diǎn)退耦。CON1是USB端口,USB總線包括一對(duì)5V電源線和一對(duì)數(shù)據(jù)信號(hào)線,通常,+5V電源線是紅色,接地線是黑色,D+信號(hào)線是綠色,D信號(hào)線是白色。CH372的片選端CS接地,一直處在工作狀態(tài)。單片機(jī)的P21與CH372的A0相連來選擇其地址,當(dāng)P21輸出為1時(shí)選擇命令端口,可以寫入命令或讀出中斷標(biāo)志;當(dāng)P21輸出為0時(shí)選擇數(shù)據(jù)端口,可以讀寫數(shù)據(jù)。同樣,CH372的INT與單片機(jī)的INT0連起來以使單片機(jī)產(chǎn)生中斷進(jìn)入中斷處理程序。 單片機(jī)擴(kuò)展RAM接口電路AT89C51片內(nèi)的RAM只有128B,不能滿足本設(shè)計(jì)的要求,可以使用芯片8155對(duì)其進(jìn)行擴(kuò)展。圖36 單片機(jī)擴(kuò)展RAM接口電路第4章 USB數(shù)據(jù)采集系統(tǒng)設(shè)備固件編寫固件實(shí)質(zhì)上是固化在硬件中的軟件,它直接與硬件進(jìn)行通信,與硬件有著密切的聯(lián)系。 固件設(shè)計(jì)方案及工作流程固件的主要功能是負(fù)責(zé)接收和處理主機(jī)發(fā)給設(shè)備的各種請(qǐng)求,并向主機(jī)返回設(shè)備的狀態(tài)信息。,、接口控制芯片固件設(shè)計(jì)的目標(biāo)是使MCU在USB總線上達(dá)到最大的傳輸速率。固件要實(shí)現(xiàn)的功能包括:接口控制芯片的初始化。響應(yīng)主機(jī)的標(biāo)準(zhǔn)請(qǐng)求,并做出合適的動(dòng)作。主機(jī)要求通信時(shí),能夠做出應(yīng)有的響應(yīng)。,我將固件設(shè)計(jì)成全中斷驅(qū)動(dòng)的方式,MCU做它的前臺(tái)事務(wù)時(shí),USB傳輸在后臺(tái)進(jìn)行處理,即:當(dāng)SEI從USB總線上接收到一個(gè)請(qǐng)求包時(shí),就觸發(fā)一個(gè)中斷事務(wù),MCU立即執(zhí)行中斷服務(wù)程序以響應(yīng)這個(gè)中斷,這樣做一方面保證了快速的數(shù)據(jù)傳輸和較好的軟件結(jié)構(gòu),另一方面簡(jiǎn)化了編程和測(cè)試。圖3一1描述了設(shè)備處于特定狀態(tài)后固件相應(yīng)的設(shè)計(jì)流程。當(dāng)USB設(shè)備接入到主機(jī)的USB接口后,主機(jī)給其供電,USB設(shè)備等待主機(jī)發(fā)過來的復(fù)位信號(hào)。固件在接收到復(fù)位信號(hào)后,USB設(shè)備進(jìn)入到總線缺省狀態(tài),此時(shí)它有一個(gè)缺省地址0,主機(jī)通過此缺省地址與USB設(shè)備進(jìn)行通信,等待主機(jī)給它分配一個(gè)唯一的非0地址,并對(duì)它進(jìn)行配置。在USB設(shè)備枚舉過程完成以后,主機(jī)可以通過其分配的地址來通知USB設(shè)備完成相應(yīng)的操作。整個(gè)過程可以歸納為主機(jī)通過USB設(shè)備的相應(yīng)端點(diǎn)向固件發(fā)出各種操作請(qǐng)求,固件通過對(duì)這些請(qǐng)求的解析來控制硬件電路模塊完成相應(yīng)的操作,并向主機(jī)返回設(shè)備的狀態(tài)信息。主要?jiǎng)澐至艘韵聨讉€(gè)模塊:主循環(huán)模塊、對(duì)外接口模塊、CH375_INIT初始化模塊、上傳數(shù)據(jù)塊模塊、上傳中斷數(shù)據(jù)模塊、中斷服務(wù)模塊。下面就各個(gè)模塊的具體實(shí)現(xiàn)進(jìn)行介紹:()主循環(huán)檢查事件標(biāo)志并進(jìn)入對(duì)應(yīng)的子程序進(jìn)行進(jìn)一步的處理。它還包含人機(jī)接口的代碼。MCU一旦上電就需要初始化其所有端口、存儲(chǔ)區(qū)、定時(shí)器和中斷服務(wù)程序。之后MCU將重新連接USB,包括將SotfConnect寄存器設(shè)置為ON。因?yàn)檫@些過程確保了在MCU準(zhǔn)備好服務(wù)D12之前D12不會(huì)進(jìn)行操作,所以是很重要的。程序代碼:ORG 0000H 。復(fù)位后單片機(jī)入口LJMP STARTORG 0003H 。CH375中斷LJMP CH372_INTERSTART: NOP CALL CH372_INIT 。初始化 SETB EA 。允許中斷WAIT_REQUEST: NOP SJMP WAIT_REQUEST 。主循環(huán)1. CH372_INIT 初始化子程序,用到的寄存器有ACC、R7和DPTR。2. CH372_UPLOAD 上傳數(shù)據(jù)塊子程序(通過批量端點(diǎn)上傳)。ENTRY:用DPTR指向存放了準(zhǔn)備上傳數(shù)據(jù)的緩沖區(qū),R7存放準(zhǔn)備上傳的數(shù)據(jù)長度,有效數(shù)值是0到64,用到的寄存器有ACC、R7和 DPTR。3. CH372_UP_INT 上傳中斷數(shù)據(jù)子程序(通過中斷端點(diǎn)上傳)它是可選子程序。ENTRY:DPTR指向存放了準(zhǔn)備上傳數(shù)據(jù)的緩沖區(qū),R7存放準(zhǔn)備上傳的數(shù)據(jù)長度,有效數(shù)值是0到8。它用到的寄存器有ACC,R7和DPTR。4. CH372_INTER 中斷服務(wù)子程序,它需要堆棧8字節(jié)。 CH375_INIT初始化模塊初始化子程序包括測(cè)試CH372正常工作(可選程序段)、設(shè)置外部自定義的USB設(shè)備VID和PID(可選程序段)、設(shè)置USB工作模式、啟用中斷等程序段。它用到的寄存器包括ACC, R7和DPTR。ENTRY:R0指向片外RAM中的上傳數(shù)據(jù)緩沖區(qū),R7準(zhǔn)備上傳的數(shù)據(jù)長度, 有效數(shù)值是0到64。程序用到的寄存器包括ACC, R0, R7和DPTR。中斷數(shù)據(jù)是通過中斷端點(diǎn)上傳的,該段程序?yàn)榭蛇x子程序。ENTRY: R0指向存放了準(zhǔn)備上傳數(shù)據(jù)的緩沖區(qū)(位于片外RAM中), R7 準(zhǔn)備上傳的數(shù)據(jù)長度, 有效數(shù)值是0到8。程序用到的寄存器包括ACC, R0, R7, DPTR。第5章 USB設(shè)備驅(qū)動(dòng)程序及應(yīng)用程序計(jì)算機(jī)與外設(shè)通過UBS接口的通信是通過驅(qū)動(dòng)程序來實(shí)現(xiàn)的。在Windwos環(huán)境中,定義了Wnidwos設(shè)備驅(qū)動(dòng)程序模型,其中設(shè)立了兩種模式,即用戶模式和內(nèi)核模式。應(yīng)用程序只能工作在用戶模式下,而驅(qū)動(dòng)程序大多運(yùn)行在內(nèi)核模式下。驅(qū)動(dòng)程序采用了分層結(jié)構(gòu)。設(shè)備驅(qū)動(dòng)知道如何與系統(tǒng)的USB和訪問設(shè)備的用戶應(yīng)用程序通信。設(shè)備驅(qū)動(dòng)程序通過在應(yīng)用層和固件專用代碼之間的轉(zhuǎn)換來完成它的任務(wù)。應(yīng)用層代碼一般使用一套操作系統(tǒng)支持的函數(shù)。本章就驅(qū)動(dòng)程序和應(yīng)用程序來分別介紹。目前驅(qū)動(dòng)程序的開發(fā),有以下幾種方法可供選擇:直接使用WindowsDDK式開發(fā)難度大一些,而且有很多煩瑣的工作要做,大部分都是通用的基礎(chǔ)性工作。但如果選用這種方式的話,將對(duì)整個(gè)體系結(jié)構(gòu)會(huì)有很好的理解和把握。使用Drviersutdio:這種方法難度低一些,工具軟件幫你做了很多基礎(chǔ)性的工作。也封裝了一些細(xì)節(jié),你只要專心去做你需要的操作,但由于封裝的問題可能會(huì)帶來一些bug,有可能導(dǎo)致項(xiàng)目的失敗。使用WniDriver:這種方法幾乎沒有什么難度,但只能開發(fā)硬件相關(guān)的驅(qū)動(dòng),事實(shí)上你寫的只是定制和調(diào)用它提供的通用驅(qū)動(dòng)而已,工作效率不是很高。但開發(fā)花費(fèi)的時(shí)間與上面相比就很少了。 WDM概述WDM(Win32DriverModel),即Win32驅(qū)動(dòng)程序模型,是微軟公司全新的驅(qū)動(dòng)程序模式,支持即插即用、電源管理和WMI技術(shù),它的運(yùn)行平臺(tái)是windows98/2000/Xp操作系統(tǒng)。WDM是通過一個(gè)128位的全局惟一標(biāo)識(shí)符鏡驅(qū)動(dòng)程序識(shí)別。在應(yīng)用程序與WDM驅(qū)動(dòng)程序通信方面,系統(tǒng)為每一個(gè)用戶請(qǐng)求打包形成一個(gè)1/0請(qǐng)求包結(jié)構(gòu)。將其發(fā)送至驅(qū)動(dòng)程序,并通過識(shí)別RIP中的PDO(物理設(shè)備對(duì)象)來區(qū)別是發(fā)送給哪一個(gè)設(shè)備的。內(nèi)核通常通過發(fā)送工RP來運(yùn)行驅(qū)動(dòng)程序中的代碼。在WDM驅(qū)動(dòng)程序模型中,每個(gè)硬件至少有兩個(gè)驅(qū)動(dòng)程序。其中一個(gè)驅(qū)動(dòng)程序稱為功能(FunCtion)驅(qū)動(dòng)程序,通常它就是我們一般所說的硬件設(shè)備驅(qū)動(dòng)程序。它負(fù)責(zé)初始化1/0操作,處理1/0操作操作完成時(shí)所帶來的中斷事件,為用戶提供一種設(shè)備適合的控制方式。另一個(gè)驅(qū)動(dòng)程序稱為總線驅(qū)動(dòng)程序,它負(fù)責(zé)管理硬件與計(jì)算機(jī)的連接。 主要模塊設(shè)計(jì) 從驅(qū)動(dòng)程序的角度出發(fā),每個(gè)設(shè)備可被看成若干個(gè)設(shè)備對(duì)象,每個(gè)設(shè)備對(duì)象都有驅(qū)動(dòng)程序與之對(duì)應(yīng)。處于最底層的是物理設(shè)備對(duì)象,一般由總線生成,一個(gè)設(shè)備只能有一個(gè)物理設(shè)備對(duì)象,但可以有若干個(gè)功能設(shè)備對(duì)象。功能設(shè)備對(duì)象是由所編寫的驅(qū)動(dòng)程序成生的,它負(fù)責(zé)從邏輯上操作設(shè)備。一個(gè)WDM驅(qū)動(dòng)程序的功能模塊可由以下幾部分組成:驅(qū)動(dòng)程序的初始化,創(chuàng)建和刪除設(shè)備,處理Win32程序打開和關(guān)閉文件句柄的請(qǐng)求,處理Win32程序輸入/輸出請(qǐng)求,實(shí)現(xiàn)對(duì)設(shè)備的串行化訪問,訪問硬件,取消1/0請(qǐng)求,超時(shí)1/0請(qǐng)求,調(diào)用其他驅(qū)動(dòng)程序,處理電源管理請(qǐng)求,使用Windows管理診斷(WM)I向系統(tǒng)管理員報(bào)告,處理一個(gè)可熱插/拔的設(shè)備被加入或刪除的情況。驅(qū)動(dòng)程序中對(duì)USB進(jìn)行操作的請(qǐng)求都應(yīng)調(diào)用系統(tǒng)例程,將其轉(zhuǎn)化為一個(gè)URB結(jié)構(gòu),即USB請(qǐng)求塊(USBRequestBloek),然后使用系統(tǒng)級(jí)的IRp將其提交。該驅(qū)動(dòng)程序由四個(gè)模塊組成:初始化模塊、即插即用管理模塊、電源管理模塊和1/0控制模塊。 初始化模塊WDM驅(qū)動(dòng)程序有一個(gè)主要的初始化入口點(diǎn),即一個(gè)必須稱為DriveErntyr的例程。它有一個(gè)標(biāo)準(zhǔn)的函數(shù)原型。當(dāng)WDM驅(qū)動(dòng)程序被裝入時(shí),內(nèi)核調(diào)用DriveErntyr例程。 即插即用管理模塊即插即用的功能有兩個(gè):● 自動(dòng)和動(dòng)態(tài)識(shí)別安裝PnP設(shè)備。當(dāng)添加一
點(diǎn)擊復(fù)制文檔內(nèi)容
職業(yè)教育相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖片鄂ICP備17016276號(hào)-1