阅读:2102回复:2
68013 FX2 缓冲区数量的问题,为什么设置2048K的的大小,但只能发1024K的数据?
各位大侠,你们好!我这里在用68013的FX2时,遇到一个问题,请指教:
设计: 用EP2和EP6这2个端口。 我用的是SLAVE FIFO模式。 EP2为OUT端口,设置为4缓冲,每个缓冲512字节,AUTOOUT模式。 EP6为IN端口,也是4缓冲,每个512字节,AUTOIN模式。 EP4和EP8都不用 FX2的时钟用的是48Mhz,同步时钟模式,输出时钟给外部主控。 现象:我用Cypress自带的ez-usb的工具来下载我的固件,下载固件正常。下载完固件FX2 RESET后可正确识别我的设备,且可以看到EP2和EP6这2个端口 当我使用EP2下载数据时,如果我每次下载的数据小于或等于512字节,则能下发2次,第三次就会报告下载失败。如果我下载的数据超过512,则只能下载一次,如果超过1024则一次都无法下载。而且,我用万用表测量FALG信号,发现我的EP2的满状态也是无信号的,这说明FIFO的缓冲区根本没有满。 按照我的理解,4缓冲的设置,那么当我每次下载小于或等于512时应该允许我下载4次才对,而且为什么只能下载最多1024个数据就不行呢?明明FIFO也没有满啊。我还尝试把EP2配置成双缓冲,每个缓冲1024字节,测试的效果是一样的,也是最多只能下载1024个字节。 实现代码: void TD_Init( void ) { // Called once at startup CPUCS = 0x10; // CLKSPD[1:0]=10, for 48MHz operation //IFCONFIG = 0xCB; IFCONFIG = 0xE3; // IFCLKSRC=1 , FIFOs executes on internal clk source // xMHz=1 , 48MHz internal clk rate // IFCLKOE=0 , Don't drive IFCLK pin signal at 48MHz // IFCLKPOL=0 , Don't invert IFCLK pin signal from internal clk // ASYNC=1 , master samples asynchronous // GSTATE=0 , Don't drive GPIF states out on PORTE[2:0], debug WF // IFCFG[1:0]=11, FX2 in slave FIFO mode // Registers which require a synchronization delay, see section 15.14 // FIFORESET FIFOPINPOLAR // INPKTEND OUTPKTEND // EPxBCH:L REVCTL // GPIFTCB3 GPIFTCB2 // GPIFTCB1 GPIFTCB0 // EPxFIFOPFH:L EPxAUTOINLENH:L // EPxFIFOCFG EPxGPIFFLGSEL // PINFLAGSxx EPxFIFOIRQ // EPxFIFOIE GPIFIRQ // GPIFIE GPIFADRH:L // UDMACRCH:L EPxGPIFTRIG // GPIFTRIG // Note: The pre-REVE EPxGPIFTCH/L register are affected, as well... // ...these have been replaced by GPIFTC[B3:B0] registers SYNCDELAY; FIFORESET = 0x80; // activate NAK-ALL to 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; //PINFLAGSAB = 0x98; // FLAGA - fixed EP2EF, FLAGB - fixed EP4EF PINFLAGSAB = 0xc8; // FLAGA - fixed EP2EF, FLAGB - fixed EP4EF SYNCDELAY; //PINFLAGSCD = 0xFE; // FLAGC - fixed EP6FF, FLAGD - fixed EP8FF PINFLAGSCD = 0xEA; // FLAGC - fixed EP6FF, FLAGD - fixed EP8FF SYNCDELAY; //PORTACFG |= 0x80; // FLAGD, set alt. func. of PA7 pin PORTACFG = 0x40; // FLAGD, set alt. func. of PA7 pin SYNCDELAY; FIFOPINPOLAR = 0x00; // all signals active low SYNCDELAY; // handle the case where we were already in AUTO mode... EP2FIFOCFG = 0x00; // AUTOOUT=0, WORDWIDE=0 SYNCDELAY; EP2FIFOCFG = 0x10; // AUTOOUT=1, WORDWIDE=0 SYNCDELAY; EP4CFG &= 0x00; SYNCDELAY; EP8CFG &= 0x00; SYNCDELAY; EP2CFG &= 0xFC; //EP2CFG |= 0x08; SYNCDELAY; // handle the case where we were already in AUTO mode... // EP4FIFOCFG = 0x00; // AUTOOUT=0, WORDWIDE=0 // SYNCDELAY; //EP4FIFOCFG = 0x10; // AUTOOUT=1, WORDWIDE=0 // SYNCDELAY; EP6FIFOCFG = 0x0C; // AUTOIN=1, ZEROLENIN=1, WORDWIDE=0 SYNCDELAY; // EP8FIFOCFG = 0x0C; // AUTOIN=1, ZEROLENIN=1, WORDWIDE=0 } |
|
沙发#
发布于:2012-09-28 18:46
忘了说,我用的bulk模式
|
|
板凳#
发布于:2012-11-01 09:35
是不是 REVCTL设置的问题
我最近也在做68013的开发 你问题解决了没 |
|