阅读:2175回复:6
关于68013的slave fifo的auto in&out问题。
请问各位大虾!FX2在autoout时,主机out是直接放在fifo中,如果不取出,主机的此次out是否成功?
|
|
沙发#
发布于:2007-03-30 08:12
算成功
|
|
|
板凳#
发布于:2007-03-30 14:11
那麻烦请看一下下面的初始化程序,主要是做海量存储类的slave fifo。
void TD_Init(void) // Called once at startup { // set the CPU clock to 48MHz CPUCS = 0x30; SYNCDELAY; EP2CFG = 0xA2; // EP2OUT, bulk, size 512, 2x buffered SYNCDELAY; EP4CFG = 0x00; // EP4 not valid SYNCDELAY; EP6CFG = 0xE2; // EP6IN, bulk, size 512, 2x buffered SYNCDELAY; EP8CFG = 0x00; // EP8 not valid SYNCDELAY; REVCTL = 0x03; SYNCDELAY; IFCONFIG = 0x43; //外部有 150/4 MHz的脉冲 SYNCDELAY; FIFORESET = 0x80; SYNCDELAY; FIFORESET = 0x02; SYNCDELAY; FIFORESET = 0x06; SYNCDELAY; FIFORESET = 0x00; SYNCDELAY; EP2FIFOCFG = 0x00; // allow core to see zero to one transition of auto out bit SYNCDELAY; EP2FIFOCFG = 0x70; // EP2 is AUTOOUT=1, AUTOIN=0, ZEROLEN=0, WORDWIDE=0 SYNCDELAY; EP4FIFOCFG = 0x00; // EP4 is AUTOOUT=0, AUTOIN=0, ZEROLEN=0, WORDWIDE=0 SYNCDELAY; EP6FIFOCFG = 0x68; // EP6 is AUTOOUT=0, AUTOIN=1, ZEROLEN=1, WORDWIDE=0 SYNCDELAY; EP8FIFOCFG = 0x00; // EP8 is AUTOOUT=0, AUTOIN=0, ZEROLEN=0, WORDWIDE=0 SYNCDELAY; OUTPKTEND = 0x02; // Arm both EP2 buffers to ¡°prime the pump¡± SYNCDELAY; OUTPKTEND = 0x02; //也是过了0x80的情况。 SYNCDELAY; EP6AUTOINLENH = 0x00; // set AUTOIN commit length to 64 bytes SYNCDELAY; EP6AUTOINLENL = 0x40; SYNCDELAY; PORTACFG = 0x40; SYNCDELAY; PINFLAGSAB = 0xc8; //flaga = ep2ef,flagb = ep2ff; SYNCDELAY; PINFLAGSAB = 0x88; //重点做调试观察用; SYNCDELAY; FIFOPINPOLAR = 0x00; SYNCDELAY; // enable dual autopointer feature AUTOPTRSETUP |= 0x01; Rwuen = TRUE; // Enable remote-wakeup } 现在的现象: 1.是bulk端点2有时不能收OUT数据(在Bus Hound中观察); 2.是FLAGA,FLAGC复位后高过一段时间就低了,即使看到有数据OUT了。 是不是有什么地方忽略了,烦请提示提示。 谢谢! |
|
地板#
发布于:2007-03-30 19:52
自己顶一下!!!
|
|
地下室#
发布于:2007-04-01 12:19
怎么没有人看看啊!
请老手指教一下! |
|
5楼#
发布于:2007-06-29 13:03
要先设置成AUTOOUT=0
然后OUTPKTEND=0x8x skip=1 N次 ,释放所有的USB缓冲区给USB控制器准备接受out数据 最后设置AUTOOUT=1 |
|
6楼#
发布于:2007-07-19 18:28
Cypress的手册上对于AUTOOUT=1的初始化代码是有问题的,请参照Cypress提供的Example,你会发现这样的Note:
需要根据Cypress提供的流程来处理,否则会出现问题的。 // (2)...when REVCTL.1=1, core blocks auto arming of OUT endp's // ...see above EPxBCL/OUTPKTEND sequence(s) // ...sequence is as follows: // ...(a) REVCTL.1=1 // ...(b) FIFORESET (as above) // ...(c) EPxBCL/OUTPKTEND (as above) // ...(d) AUTOOUT=1 |
|