EZ-USB CY7C68013A固件Slave FIFO初始化

EZ-USB CY7C68013A固件Slave FIFO初始化

//EP2 Auto OUT 2*1024bytes bulk

//EP6 Auto IN 2*1024bytes bulk,

void TD_Init( void ) // Called once at startup

CPUCS = 0x10;                            //48MHz operation

REVCTL=0x03;                           //Cypress推薦設置dyn_out=1, enh_pkt=1

SYNCDELAY;


//配置引腳FLAGA,FLAGB,FLAGC,FLAGD輸出FIFO狀態

PINFLAGSAB = 0x00;                 //根據FIFOADR[1:0]指向的端點,FLAGA定義爲PF

                                                 //FLAGB定義爲FULL

SYNCDELAY;                             //同步延時

PINFLAGSCD = 0x00;                 // FLAGC定義爲EMPTYFLAGD不使用

SYNCDELAY;                  


//配置端口A的複用引腳PORTA.7功能

PORTACFG = 0x00;                    //PA7/FLAGD作爲端口引腳PA7,不作爲FIFO的狀態標誌-FLAGD

SYNCDELAY;


//設置所有的FIFO接口引腳低電壓/高電平有效

FIFOPINPOLAR = 0x00;   //Slave FIFO接口引腳低電平有效

SYNCDELAY;


//配置接口的工作模式(端口、GPIFSlave FIFO)

IFCONFIG = 0x43;                     //外部IFCLK外部時鐘,48MHzIFCLK不輸出內部時鐘

                //不反相IFCLK引腳信號,同步傳輸,Slave FIFO工作模式

SYNCDELAY;


//不使用EP4EP8

EP2CFG = 0xAA;                      //out 1024 bytes, 2x, bulk

SYNCDELAY;                    

EP6CFG = 0xAA;                      // in 1024 bytes, 2x, bulk

SYNCDELAY;              

EP4CFG = 0x02;                       //clear valid bit

SYNCDELAY;                     

EP8CFG = 0x02;                       //clear valid bit

SYNCDELAY;   


//復位FIFOS(EP2、EP6)到默認狀態(FIFO flags、byte counts)

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

SYNCDELAY;                  

FIFORESET = 0x02;                 // reset, FIFO 2

SYNCDELAY;                                

FIFORESET = 0x06;                 // reset, FIFO 6

SYNCDELAY;                              

FIFORESET = 0x00;                 // deactivate NAK-ALLrestore normal operation

SYNCDELAY;


//配置FIFO端點EP2EP6

EP2FIFOCFG = 0x11;            // AUTOOUT=1, WORDWIDE=1(16位數據傳輸)

SYNCDELAY; 

EP6FIFOCFG = 0x09;            //AUTOIN=1 , WORDWIDE=1(16位數據傳輸)

SYNCDELAY;


//設置AUTOIN時自動傳輸的包大小(注意,不能大於IN端點的緩衝區的大小)

EP6AUTOINLENH = 0x04;           //Auto-commit 1024-byte packets

SYNCDELAY;

EP6AUTOINLENL = 0x00;

SYNCDELAY;


//清空EP2EP6端點緩衝區(2個緩衝區要清空2)

OUTPKTEND = 0x82;                //Arm two OUT EP2 buffers to “prime the pump”

SYNCDELAY;                           //For OUT endpoints, you need to arm the buffers to let the SIE take 

OUTPKTEND = 0x82;               // control of them, and accept data from the host.

SYNCDELAY;

INPKTEND = 0x86;                   //“arming” the IN transfer

SYNCDELAY;                         

INPKTEND = 0x86;                 

SYNCDELAY;

}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章