阅读:1475回复:5
---jinghuiren大侠----slaveFifo下:用EP2 Auto Out出现问题---------
slaveFifo EP2 out 下:
用控制面板写EP2不成功,写不进去, 不知什么原因(flagc空标志一直有效)! 更改外部电路及控制逻辑后,还是用下面的固件,用"控制面板"读EP6(既用EP6 Auto in)确没问题。 外部电路连接的波形,固件代码如下: void TD_Init( void ) { CPUCS = 0x02; // CLKSPD[1:0]=10, for 48MHz operation CLKOE=0 IFCONFIG = 0xA3; //内部30M同步fifo SYNCDELAY; // see TRM section 15.14 // REVCTL = 0x01; // use enhanced packet handling REVCTL = 0x03; SYNCDELAY; EP2CFG = 0xA8; // EP2 is DIR=OUT, TYPE=BULK, SIZE=1024, BUF=2x SYNCDELAY; // EP6CFG = 0xE0; // SIZE=0 512 BYTE BUF[1:0]=00 for 4x buffering 1110 0000 SYNCDELAY; // EP4CFG = 0x20; // clear valid bit SYNCDELAY; // EP8CFG = 0x60; // clear valid bit SYNCDELAY; // FIFORESET = 0x80; // activate NAK-ALL to avoid race conditions SYNCDELAY; // 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; // // 8-bit bus (WORDWIDE=0)... // EP2FIFOCFG = 0x10; // AUTOOUT=1, WORDWIDE=0 修改AUTOOUT=1,自动提交输出给FIFO EP2FIFOCFG = 0x14; SYNCDELAY; // // use auto in mode EP6FIFOCFG = 0x0C; // AUTOIN=1, ZEROLENIN=1, WORDWIDE=0 SYNCDELAY; // EP4FIFOCFG = 0x00; //WORDWIDE=0 SYNCDELAY; // EP8FIFOCFG = 0x00; //WORDWIDE=0 SYNCDELAY; // 要将所有FIFO的WORDWIDE都设为0,不管它们有没有用到 OEE = 0xff; //才能把D端口当成普通IO来用。 IOE = 0x80; // OEC = 0xff; //才能把D端口当成普通IO来用。 IOC = 0x80; EZUSB_InitI2C(); // Initialize I2C Bus EZUSB_WriteI2C(LED_ADDR, 0x01, &(Digit[0])); EZUSB_WaitForEEPROMWrite(LED_ADDR); } //-------------------------------------------------------------------------------------------------------------------------------- 再尝试用cypress的例子bulksrc(不加修改): Endpoint 6 in 成功 Endpoint 2 OUT 失败,连一次512byte都没法写进去,按理至少能写入2个512byte才对! |
|
沙发#
发布于:2007-07-07 10:14
今天还没解决,我顶啊!
|
|
板凳#
发布于:2007-07-09 08:07
早上顶一下
|
|
地板#
发布于:2007-07-10 08:48
结帖啦,原来是我用了自己改的乱七八糟的ezusb.sys的原因,用原来的覆盖掉即可.
|
|
地下室#
发布于:2007-07-12 21:18
请问搂主,这么写可以把D口作为输出I/O使?
EP4FIFOCFG = 0x00; //WORDWIDE=0 SYNCDELAY; // EP8FIFOCFG = 0x00; //WORDWIDE=0 SYNCDELAY; // 要将所有FIFO的WORDWIDE都设为0,不管它们有没有用到 OEE = 0xff; //才能把D端口当成普通IO来用。 IOE = 0x80; // OEC = 0xff; //才能把D端口当成普通IO来用。 IOC = 0x80; |
|
5楼#
发布于:2007-07-12 21:42
只需加上 OED = 0xff;
|
|