新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 基于FPGA和VHDL的USB2.0控制器設(shè)計

基于FPGA和VHDL的USB2.0控制器設(shè)計

作者: 時間:2010-05-21 來源:網(wǎng)絡(luò) 收藏

  2.3 端點操作

  數(shù)據(jù)的傳輸實際上通過端點(Endpoint)進行,控制器通過寫端點的寄存器來配置端點,該控制器最多可有16個端點,每個端點有相應(yīng)的4個寄存器:Epn_CSR、Epn_INT、Epn_BUF0和Epn_BUF1(這里n=0、1、2或3),其格式如圖6所示。本文使用addr[8:2]7根據(jù)地址線來訪問這些寄存器,addr[8:4]用來選擇端點號,其值(16進制)從4到19分別表Epn(n=0...15)。addr[3:2]指定寄存器類型:“00”代表CSR(Control Status Register);“01”代表中斷寄存器;“10”指向Buffer0;“11”代表Buffer1。這兩個Buffer用來作臨時數(shù)據(jù)存儲,Buffer0和Buffer1分別作為專用的輸入/輸出緩沖器來提高USB的數(shù)據(jù)吞吐能力。雙Buffer能夠減少微控制器和驅(qū)動軟件之間的延遲。其中端點的CSR寄存器指定端點的工作模式并且向控制器報告指定端點的狀態(tài)。Ep_CSR[31:30]必須初始化為“00”(最初使用Buffer0),通過讀這2位可以知道下次所要處理的緩沖器;為“01”時,指定Buffer1。Ep_CSR[27:26]和Ep_CSR[25:24]分別指定端點類型和傳輸類型,其類型編碼參見表1。Ep_CSR[21:18]指定端點號,總共可以有16個端點。Ep_CSR[15]時DMA使能位,為“1”時允許外部DMA操作,否則不允許DMA操作。

表1 類型編碼表

類型編碼表

  當控制器收到中斷時,讀中斷源寄存器(Ep_INT[6:0])來判斷中斷源和產(chǎn)生的原因??勺远x中斷源,如Ep_INT[2]定義為該控制器接收到不支持的PID而產(chǎn)生的中斷:Ep_INT[2]=Pid_ERROR。Ep_INT[4]和Ep_INT[3]分別表示Buffer1和Buffer0的滿或空的狀態(tài)位。

  Ep_BUF[31](標記緩沖器是否被使用過)在使用后被控制器置“1”,在清空或重填充該緩沖器后,控制器清除該位。該閏初始化時為“0”。Ep_BUF[30:17]指定緩沖器能容納的字節(jié)數(shù)。Ep_BUF[16:0]緩沖器的指針,裝載存儲器SRAM中數(shù)據(jù)的地址。

  控制端點(Endpoint0)比較特殊,由于它既要接收也要發(fā)送數(shù)據(jù),因此對于控制端點,Buffer0用于OUT緩沖器,Buffer1則是IN緩沖器。從SETUP和OUT分組來的數(shù)據(jù),寫入Buffer0,IN分組的數(shù)據(jù)則是從Buffer1中獲取。

端點寄存器

  2.4 DMA操作

  DMA操作允許控制器與功能接口之間數(shù)據(jù)的透明傳輸。一旦設(shè)置了DMA操作,則不需要微控制器的干預(yù)。每個端點有一對DMA_REQ和DMA_ACK信號。當CSR寄存器中DMA使能信號位(Ep_CSR[15])被置位時,USB控制器使用DMA_REQ和DMA_ACK這兩個信號來進行DMA的流控制。當緩沖區(qū)有數(shù)據(jù)或為空需要填充時發(fā)送DMA請求信號DMA_REQ,每傳輸4字節(jié),響應(yīng)一個DMA_ACK信號。



評論


相關(guān)推薦

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

關(guān)閉