USB2.0學習筆記連載(五):EZ-USB重要寄存器的配置


  本篇博客主要講解EZ-USB一些重要寄存器的配置,首先對於本篇博客所講的內容,讀者應該到官網上去下載相關的手冊,其中包括《EZ-USB Technical Reference Manual》,《Dvk Users Guide》,《CY7C68013A中英文數據手冊》,此外還應去Cypress官網下載一個應用筆記,如下圖所示:

image  上面資料中《EZ-USB Technical Reference Manual》包含了需要配置的寄存器信息和一些配置信息,比較重要。《CY7C68013A中英文數據手冊》講解了CY7C68013的一些電氣特性以及一些參數信息比較重要。《Dvk Users Guide》介紹了官網提供的例程如何調試以及硬件如何被PC機識別等關鍵信息,比較重要。《AN61345》介紹了FPGA和FX2LP使用Slave FIFO模式下的配置和調試信息,比較重要。

有了上述手冊之后,我們首先打開《AN61345》里面所講的內容,這篇筆記里面介紹了使用USB CY7C68013的slave FIFO模式應該如何去配置。

image

  上圖是典型的FX2LP和FPGA的通信示意圖,對於GPIF接口而言,是讓FX2LP芯片作為主設備,提供給外部設備所需要的驅動信號,而Slave FIFO模式是FX2LP作為從設備,負責數據的傳輸,而外部設備是主設備,負責傳感器的驅動以及數據的產生。所以我們采用的方案架構是Slave FIFO模式,讓FPGA作為主設備。

image

image

   上面兩個圖是FPGA 和FX2LP芯片進行通信所需要的信號,之前筆者以及提及過了,這里不再贅述。

   對於USB的傳輸方式,主要包括中斷(interrupt),塊傳輸(bulk),同步(Isochronous),控制(control),其中bulk傳輸比較重要,比較常用,所以必須要掌握。

image

image

image 

   打開 《Dvk Users Guide》后,在12頁給出了USB 主函數框架的示意圖,如上圖所示。首先上電之后,初始化各狀態變量,然后對各變量進行初始化賦值。再使能中斷。

  那么對於上電復位之后,需要初始化一些寄存器,在《AN61345》中的第8頁已經給出了一些提示。

image

image

image

   關於相關寄存器的具體說明,可以查看手冊《EZ-USB Technical Reference Manual》。所有寄存器的配置也是完成CY7C68013內部結構所需要的配置,如下圖所示。

image

1.8051內核工作寄存器 CPUCS(page338)

  CPUCS = 0x12;  //48MHZ CLKOUT ENALBE,時鍾不反向,CLKOUT PIN驅動,有時鍾輸出;

2.IFCLK引腳的相關配置 IFCONFIG(page339)

  IFCONFIG =0x03; //選擇為外部時鍾,且時鍾頻率為30MHz,且為同步slaveFIFO模式,輸入IFCLK(5~48MHz)(0000_0011)。

3.FIFO深度控制及數量和方向選擇 EPXFG深度配置(page352)

  選擇FIFO的數量以及FIFO的深度為512,位寬為8位;由於筆者設計的板卡中只用到了FIFO2,也就是EP2,深度為512 ,位寬為8位。其他FIFO暫時用不到。

EP2CFG = 0xE0;  // disabled... 

EP4CFG = 0x60;  // disabled... 

EP6CFG = 0x60;  // disabled...    

EP8CFG = 0x60;  // disabled...

4.FIFO位寬設置 EPXFIFOCFG深度配置(page353)

RAW,Gray 模式的數據位輸出為8bit。

EP2FIFOCFG = 0x08;  // autoin, 8 Bit Wide

5.USB終端輸出方式選擇EP1IN/OUTCFG終端配置(page350)

在設置USB的傳輸方式,選擇默認值bulk傳輸方式。

EP1OUTCFG = 0xA0;  // default values

EP1INCFG = 0xA0;   // default values

6.芯片版本控制 REVCTL(page348)

采用系統默認的值。

REVCTL = 0x03; //Cypress highly recommends setting both bits to 1

7.FIFO輸出狀態控制 PINFLAGAB/CD(page342)

PINFLAGSAB = 0x00;

PINFLAGSCD = 0x00;

由外部的FIFOADR[1:0]來決定使用哪一個FIFO。

8.FIFO復位 FIFORESET(page342)

手冊上面的要求如下圖所示:image

//復位FIFO,先復位端點,再清空端點

延時;

FIFORESET = 0x80;// activate NAK-ALL to avoid race conditions

延時;

FIFORESET = 0x02;// reset, FIFO 2

延時;

FIFORESET = 0x04;// reset, FIFO 4

延時;

FIFORESET = 0x06;// reset, FIFO 6

延時;

  FIFORESET = 0x08;// reset, FIFO 8

延時;

FIFORESET = 0x00;// deactivate NAK-AL

延時;

9.FIFO引腳極性判斷 FIFOPINPOLAR(page346)

wpsDD57.tmp

wps1800.tmp

  在硬件設計中,將SLRD直接拉高處理;PKEND也直接拉高,不做包處理;

  FIFOPINPOLAR = 0x04; //BIT[5:0] = {PKTEND, SLOE, SLRD, SLWR, EMPTY, FULL}

   //Set SLWR High Valid; PKTEND,SLOE,SLRD EMPTY, FULL Low Active

10.引腳復用可選IO功能 PORTACFG(page382)

wpsD874.tmp

 

其中在A區的引腳復用了片選SLCS信號,所以要將其設置為1;

PORTACFG |= 0x40; //IFCOG[1:0] = 11(Slave FIFO Mode), Set PORTACFG[6] to USE PA7-SLCS

11.特殊功能寄存器 自動指針設置AUTOPTRSETUP (page332)

wps5354.tmp

 

//Set Autopointer, enable dual autopointer
AUTOPTRSETUP |= 0x01; 

12.設置自動報傳 EPXAUTOINLENH/L

//設置為Autoin時的自動傳輸包大小

EP2AUTOINLENH = 0x02; // EZ-USB automatically commits data in 512-byte chunks

//  EP2AUTOINLENH = 0x04; // EZ-USB automatically commits data in 1024-byte chunks

EP2AUTOINLENL = 0x00;

image

  筆者設計的USB部分如上圖所示,由於FPGA引腳有限,采用8bit數據總線傳輸,USB部分只做寫入功能,所以預留USB_WR引腳,同步時鍾USB_IFCLK,SLRD,PKEND直接拉高,SLCS拉低,FIFOADR[1:0] = 00,選擇FIFO中的EP2,增加USB觸發信號引腳,作為FPGA寫入使能信號,增加CMOS_VSYNC幀同步信號,作為CMOS視頻的同步信號。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM