1. 程式人生 > >USB小白學習之路(7) FPGA Communication with PC by CY7C68013,TD_init()解析

USB小白學習之路(7) FPGA Communication with PC by CY7C68013,TD_init()解析

圖片 語句 學習之路 解析 進行 body mod out 關閉

void TD_Init(void)
{
  CPUCS = ((CPUCS & ~bmCLKSPD) | bmCLKSPD1); //設置CPU時鐘頻率為48M,寄存器CPUCS的位如下所示。此語句就是將CPUCS的b4,b3位設為10,

//同時不改變其他bit。

技術分享圖片

圖1 寄存器CPUCS的描述

  //USBCS = Ox80; //set high speed mode 添加此語句時工程編譯不通過

  IFCONFIG = 0XCB;    //選擇內部時鐘頻率為48M,FIFO/GPIF采用異步操作模式,SLAVE FIFO接口(外部主控制器)

             //IFCONFIG寄存器的描述如圖2所示,0xCB = 1100_1011,可見:

              //內部時鐘,48MHz,IFCLK時鐘輸出關閉,IFCLK信號不翻轉,GPIF異步操作,關閉GPIF輸出,slave FIFO接口

技術分享圖片

圖2 寄存器IFCONFIG的描述

  SYNCDELAY; //裏面是空語句,延時用

  //REVCTL = 0X03; //0x01 //版本號,控制版本號的,不重要,不用管
  //SYNCDELAY;

  FIFOPINPOLAR = 0X00; //所有引腳為低電平有效,此寄存器控制Slave FIFO方式信號有效電平

  SYNCDELAY;       //FIFOPINPOLAR寄存器的描述如圖3所示

技術分享圖片

圖3 寄存器FIFOPINPOLAR的描述

$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$

$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$


  FIFORESET = 0X80; //對從主機發送的數據進行握手

  SYNCDELAY;    //FIFORESET寄存器的描述如圖4所示。由圖4中可以看出,這裏寫入0x80是為了保證復位正常

技術分享圖片

圖4 寄存器FIFORESET的描述

  FIFORESET = 0X02; //復位FIFO
  SYNCDELAY;

  FIFORESET = 0X04; //復位FIFO
  SYNCDELAY;

  FIFORESET = 0X06; //復位FIFO
  SYNCDELAY;

  FIFORESET = 0X08; //復位FIFO
  SYNCDELAY;

            //由圖4可以看出,這四條語句分別復位端點:EP2,EP4,EP6,EP8

  FIFORESET = 0X00; //保存操作,這裏也是由圖4可以得到,寫入0x00是為了使能相應請求。

  SYNCDELAY;

  EP6CFG =0xE0; //使能端點6,端點方向為輸入,塊傳輸方式,端點大小512字節,端點為4重緩沖
  SYNCDELAY;  //EP6CFG寄存器的描述如圖5所示,0xE0 = 1110_0000;

技術分享圖片

圖5 寄存器EP6CFG的描述

  EP6FIFOCFG = 0X0C; // AUTOIN=1 ZEROLEN=1 WORDIDE=0 設置端點6為手動輸入,選擇總線數據寬度為8位
  SYNCDELAY;        //EP6FIFOCFG 寄存器的描述如圖6所示。

技術分享圖片

圖6

  PINFLAGSAB = 0X00; //確定引腳FLAGA為EPX的PF標誌,FLAGB為EPX的FF標誌,FLAGC為EPX的EF標誌///
  SYNCDELAY;
  PINFLAGSCD = 0X00; //確定引腳FLAGA為EPX的PF標誌,FLAGB為EPX的FF標誌,FLAGC為EPX的EF標誌///
  SYNCDELAY;

PORTACFG = 0X40; //PORTACFG.6=1 設置IOPA7為CS引腳
SYNCDELAY;

EP6AUTOINLENH = 0X02; //端點6 AUTOIN包長度高字節
SYNCDELAY;
EP6AUTOINLENL = 0X00; //端點6 AUTOIN包長度高字節
SYNCDELAY;

EP6BCH = 0x02; //512byte///*
SYNCDELAY;
EP6BCL = 0x00; //512byte///*
SYNCDELAY;

EP6FIFOPFH = 0X80; //端點6/SLAVE FIFO 可編程成級標誌的高位(高速方式和全速方式)//不懂///
SYNCDELAY;
EP6FIFOPFL = 0X00; //端點6/SLAVE FIFO 可編程成級標誌的高位(高速方式和全速方式) //不懂///
SYNCDELAY;

OUTPKTEND =0X82; //啟動OUT緩沖區
SYNCDELAY;
OUTPKTEND =0X82; //啟動OUT緩沖區
SYNCDELAY;

//AUTOPTRSETUP |= 0x01; //使能自動指針

Rwuen = TRUE;

}

USB小白學習之路(7) FPGA Communication with PC by CY7C68013,TD_init()解析