• <li id="00i08"><input id="00i08"></input></li>
  • <sup id="00i08"><tbody id="00i08"></tbody></sup>
    <abbr id="00i08"></abbr>
  • 新聞中心

    EEPW首頁 > 嵌入式系統 > 設計應用 > 基于FPGA和VHDL的USB2.0控制器設計

    基于FPGA和VHDL的USB2.0控制器設計

    作者: 時間:2010-05-21 來源:網絡 收藏

      2.3 端點操作

      數據的傳輸實際上通過端點(Endpoint)進行,控制器通過寫端點的寄存器來配置端點,該控制器最多可有16個端點,每個端點有相應的4個寄存器:Epn_CSR、Epn_INT、Epn_BUF0和Epn_BUF1(這里n=0、1、2或3),其格式如圖6所示。本文使用addr[8:2]7根據地址線來訪問這些寄存器,addr[8:4]用來選擇端點號,其值(16進制)從4到19分別表Epn(n=0...15)。addr[3:2]指定寄存器類型:“00”代表CSR(Control Status Register);“01”代表中斷寄存器;“10”指向Buffer0;“11”代表Buffer1。這兩個Buffer用來作臨時數據存儲,Buffer0和Buffer1分別作為專用的輸入/輸出緩沖器來提高USB的數據吞吐能力。雙Buffer能夠減少微控制器和驅動軟件之間的延遲。其中端點的CSR寄存器指定端點的工作模式并且向控制器報告指定端點的狀態。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])來判斷中斷源和產生的原因??勺远x中斷源,如Ep_INT[2]定義為該控制器接收到不支持的PID而產生的中斷:Ep_INT[2]=Pid_ERROR。Ep_INT[4]和Ep_INT[3]分別表示Buffer1和Buffer0的滿或空的狀態位。

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

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

    端點寄存器

      2.4 DMA操作

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



    評論


    相關推薦

    技術專區

    關閉
    主站蜘蛛池模板: 扬州市| 海晏县| 泰宁县| 慈利县| 蒲城县| 西华县| 盱眙县| 嘉荫县| 隆子县| 木兰县| 华池县| 克什克腾旗| 集贤县| 丹东市| 邢台县| 汝城县| 丰顺县| 彭泽县| 丰镇市| 祁门县| 安塞县| 启东市| 四子王旗| 宁津县| 衡水市| 上林县| 佛坪县| 灵武市| 保康县| 印江| 梅河口市| 英吉沙县| 大丰市| 寿宁县| 驻马店市| 霍山县| 兴隆县| 乌鲁木齐县| 读书| 霍山县| 荔波县|