cypress68013USB任意字节长度AUTOIN传输


void TD_Init( void )

{ // Called once at startup

         CPUCS= 0x12; // CLKSPD[1:0]=10, for 48MHz operation, output CLKOUT

         SYNCDELAY;

         REVCTL = 0x03;     // REVCTL.0 and REVCTL.1 set to 1

         SYNCDELAY;

         PINFLAGSAB= 0x08;                           // FLAGA- EP2EF(EP2空标志)//EP2 OUT

         SYNCDELAY;

         PINFLAGSCD = 0x0E;                           // FLAGC - EP6FFEP6满标志)//EP6 IN

         SYNCDELAY;

         //PORTACFG|= 0x80;                                  //PA7复用为FLAGD

         //SYNCDELAY;

         IFCONFIG= 0x63; //Internal clock, 48 MHz, Slave FIFO interface

//设置为0x63时为externalclock,5MHz-48MHz

         SYNCDELAY;

        

         //IFCONFIG 寄存器的位定义信息

         //IFCLKSRC=1   , FIFOs executes on internalclk source

         //xMHz=1       , 48MHz operation

         //IFCLKOE=1    ,Drive IFCLK pin signal at48MHz

         //IFCLKPOL=0   , Don't invert IFCLK pinsignal from internal clk

         //ASYNC=0      , master samples synchronous

         //GSTATE=0     , Don't drive GPIF statesout on PORTE[2:0], debug WF

         //IFCFG[1:0]=11, FX2 in slave FIFO mode

        

         //Note: The pre-REVE EPxGPIFTCH/L register are affected, as well...

         //      ...these have been replaced byGPIFTC[B3:B0] registers

         //之前版本的EPxGPIFTCH/L寄存器已经被GPIFTC[B3:B0]寄存器所代替

        

         //EP4 and EP8 are not used in this implementation...此处并未使用EP4和EP8端点

         EP1OUTCFG= 0xA0;

         SYNCDELAY; 

         EP1INCFG= 0xA0; 

         SYNCDELAY;                

         EP2CFG= 0xAA;                //out 512/1024bytes, 2x, bulk;把其中的b5/b4位(TYPE1/TYPE0)设置为10则为批量传输模式

         SYNCDELAY;                   

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

         SYNCDELAY;             

         EP4CFG= 0x02;                //clear valid bit

         SYNCDELAY;                    

         EP8CFG= 0x02;                //clear valid bit

         SYNCDELAY;  

        

// FIFORESET是用于FIFO状态复位的

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

         SYNCDELAY;                    // see TRM section 15.14

         FIFORESET= 0x02;             // reset, FIFO 2

         SYNCDELAY;                    //

         FIFORESET= 0x04;             // reset, FIFO 4

         SYNCDELAY;                    //

         FIFORESET= 0x06;             // reset, FIFO 6

         SYNCDELAY;

         FIFORESET= 0x08;             // reset, FIFO 8

         SYNCDELAY;                    //

         FIFORESET= 0x00;             // deactivate NAK-ALL

         SYNCDELAY;                   

        

                  

         //handle the case where we were already in AUTO mode...设置EP2为自动输出16位模式

         //...for example: back to back firmware downloads...设置EP6为自动输入16位模式

         /*EP2BCL= 0x80;                // arm EP2OUT bywriting byte count w/skip.

         SYNCDELAY;

         EP2BCL= 0x80;                // arm EP2OUT bywriting byte count w/skip.

         SYNCDELAY;                    

        

         OUTPKTEND= 0x82;    // Arm both EP2 buffers toPrime the pum

         SYNCDELAY;

         OUTPKTEND= 0x82;    // Arm both EP2 buffers toPrime the pum

         SYNCDELAY;

         //core needs to see AUTOOUT=0 to AUTOOUT=1 switch to arm endp's 

         EP2FIFOCFG= 0x00;            // AUTOOUT=0,WORDWIDE=1

         SYNCDELAY;                    //  

         EP2FIFOCFG= 0x10;            // AUTOOUT=1,WORDWIDE=1

         SYNCDELAY;*/

         //若 IN 数据缓冲区数据不满足传输数据包大小要求,如IN批量传输包为 1024,

         //若缓冲区大小数据为 10 字节,可通过INPKTEND 来提交

         //INPKTEND= 0x84;    // Arm both EP6 buffers toPrime the pum

         //SYNCDELAY;

         //INPKTEND= 0x84;    // Arm both EP6 buffers toPrime the pum

         //SYNCDELAY;      

         EP6FIFOCFG= 0x00; 

         SYNCDELAY;                    //

         EP6FIFOCFG= 0x08;            // AUTOIN=1,ZEROLENIN=1, WORDWIDE=0(8BIT)

         SYNCDELAY;                    //

                  

         EP6BCH = 0x03;                // arm EP6OUT by writing bytecount w/skip.

         SYNCDELAY;

         EP6BCL = 0xC0;                // arm EP6OUT by writing bytecount w/skip.

         SYNCDELAY;

         EP6BCH = 0x03;                // arm EP6OUT by writing bytecount w/skip.

         SYNCDELAY;

         EP6BCL = 0xC0;                // arm EP6OUT by writing bytecount w/skip.

         SYNCDELAY;/**/

        

         FIFOPINPOLAR= 0x00; // set all slave FIFO interface pins as active low

         SYNCDELAY;

         EP6AUTOINLENH = 0x03; // EZ-USBautomatically commits data in 512-byte chunks03

         SYNCDELAY;

         EP6AUTOINLENL = 0xC0;         //c0

         SYNCDELAY;

//JTAG Enable and SYNC signals for ZTEXSpartan 6 module 1.1 (FGPA+FX2LP setup)???什么作用,FX2LP与ZTEX的端口连接

         PORTACFG&= 0xFD;

         SYNCDELAY;

         OEA|=0x02;//Declare PA.1 as output... SLWR

         SYNCDELAY;

         IOA|=0x02;//output 1 on PA.1

         SYNCDELAY;

         //OEC&=0x01;//PC.0 as output (SYNC signal)PC.0为同步信号

         //SYNCDELAY;

         //IOC|=0x00;//output 0 on PC.0...SYNC signal is LOW

         //SYNCDELAY;

         OED&=0xFE;//PD.0 as input (Clock changing signal)PD.0为内部与外部时钟切换信号

         SYNCDELAY;

        

   // enable dual autopointer feature

   AUTOPTRSETUP |= 0x01;        

         PORTACFG &= 0x7F;

    SYNCDELAY;

         OEA |= 0x80;   //使PA7为输出口,PA7SLWR写有效信号

    SYNCDELAY;

         IOA &=0x7F;    //使PA70

    SYNCDELAY;

         //IOA|= 0x80;

         //SYNCDELAY;

         //Configure  for  external interrupts

         PORTACFG|= 0x01;          //配置PORTA PA0为INT0

         SYNCDELAY;

         TCON|=0x01;  //INT0在下降沿有效

         SYNCDELAY;

         IE|= 0x81;        //全局中断使能,INT0中断使能

         SYNCDELAY;

}

void TD_Poll( void )

{ // Called repeatedly while the device isidle

         if(IOD & 0x01)

         {

                   done_frm_fpga =1;

         }

         if ((done_frm_fpga)&& (IOD & 0x01))    //PC.1输入为低电平时,切换到外部时钟输入,且置PC.0(同步信号)为高

         {

                   //IFCONFIG =0x63;  //external clock input, Slave FIFOinterface

                   //SYNCDELAY;

        

                   PORTACFG &=0xFD;

                   SYNCDELAY;

                   OEA |= 0x02;

                   SYNCDELAY;

                   IOA &=0xFD;//output 1 on PA.1...SLWR signal is HIGH

                   SYNCDELAY;

                   done_frm_fpga =0;                  

         }

if(!(EP2468STAT &bmEP6FULL))  //ENDPOINT6  FIFO

     { 

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

                   SYNCDELAY;                    // see TRM section 15.14

                   FIFORESET =0x06;             // reset, FIFO 6

                   SYNCDELAY;

                   FIFORESET =0x00;             // deactivate NAK-ALL

                   SYNCDELAY; /**/

                   EP6BCH = 0x03;                // arm EP6OUT by writing bytecount w/skip.

                   SYNCDELAY;

                   EP6BCL =0xC0;                // arm EP6OUT bywriting byte count w/skip.

                   SYNCDELAY;

                   EP6BCH =0x03;                // arm EP6OUT bywriting byte count w/skip.

                   SYNCDELAY;

                   EP6BCL =0xC0;                // arm EP6OUT bywriting byte count w/skip.

                   SYNCDELAY;

                   EP6AUTOINLENH = 0x03; // EZ-USBautomatically commits data in 512-byte chunks03

                   SYNCDELAY;

                   EP6AUTOINLENL =0xC0;         //c0

                   SYNCDELAY;

                            

     }

   INTSETUP &= ~bmAV4EN; // Disable INT4 autovectoring so that weuse  the external INT4

}

 

发布了18 篇原创文章 · 获赞 8 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/zengshaoqing/article/details/53053666