关于BULK OUT中REVCTL=0x03的疑问:
我的固件程序是:(功能是:利用EP2 EP4 EP8 进行向外传输数据,用EP6进行传入数据。块传输
当 REVCTL = 0x03;时候,根本把数据传不出去。看CY7C68013a的官方文件时候,说Slave FIFO 时候,必须设置REVCTL=0x03。
可为什么我的程序传不下去了。。。
还有我把REVCTL=0x00;时候,是可以把数据传下去的。但是貌似就传不回来了。。。
请前辈帮忙看下,这个是什么问题。折腾很久了
void TD_Init(void) // Called once at startup
{
CPUCS = ((CPUCS & ~bmCLKSPD) | bmCLKSPD1) ; // set the CPU clock to 48MHz
// set the slave FIFO interface to 48MHz
REVCTL = 0x03;
SYNCDELAY;
FIFORESET = 0x80;// activate NAK-ALL to avoid race conditions
SYNCDELAY; //
FIFORESET = 0x02; // reset, FIFO 2
SYNCDELAY;
FIFORESET = 0x04;
SYNCDELAY;
FIFORESET = 0x06; // reset, FIFO 2
SYNCDELAY; // //
FIFORESET = 0x08;
SYNCDELAY;
FIFORESET = 0x00; // deactivate NAK-ALL
SYNCDELAY;
IFCONFIG = 0xCB;
EP2CFG = 0xA2; //OUT端点,双缓冲
EP2FIFOCFG = 0x35; // 自动输出,16位数据
OUTPKTEND=0x82; //强制OUT包结束
SYNCDELAY;
OUTPKTEND=0x82; //强制OUT包结束
SYNCDELAY;
EP4CFG = 0xA0; //OUT端点,双缓冲
EP4FIFOCFG = 0x35; // 自动输出,16位数据
OUTPKTEND=0x82; //强制OUT包结束
SYNCDELAY;
OUTPKTEND=0x82; //强制OUT包结束
SYNCDELAY;
EP6CFG = 0xE2; //in端点,双缓冲
EP6FIFOCFG = 0x0D; // 自动输入,16位数据
EP6AUTOINLENH=0x02;
SYNCDELAY;
EP6AUTOINLENL=0X00; //set the packet size 512字节
SYNCDELAY;
EP6FIFOPFH = 0x82; // you can define the programmable flag (FLAGA)
SYNCDELAY; // to be active at the level you wish
EP6FIFOPFL = 0x00;
SYNCDELAY;
// INPKTEND = 0x06; //发送短数据包给上位机
// SYNCDELAY;
EP8CFG = 0xA0; //out端点,双缓冲
EP8FIFOCFG = 0x35; // 自动输出,16位数据
OUTPKTEND=0x82; //强制OUT包结束
SYNCDELAY;
OUTPKTEND=0x82; //强制OUT包结束
SYNCDELAY;
PINFLAGSAB = 0x98;
SYNCDELAY;
PINFLAGSCD = 0xBB;
PORTACFG=0x40;
FIFOPINPOLAR = 0x00;//设置slavefifo 接口为低电平有效
SYNCDELAY;
//OUT端点计数器需要预先加载来启动传输,因为默认是双缓冲,所以加载两次
EP2BCL=0x80;
SYNCDELAY;
EP2BCL=0x80;
SYNCDELAY;
EP4BCL=0x80;
SYNCDELAY;
EP4BCL=0x80;
SYNCDELAY;
EP8BCL=0x80;
SYNCDELAY;
EP8BCL=0x80;
SYNCDELAY;
} |