求助 USB芯片CY7C68013与CPLD通信问题


可以尝试查看你所预留的EPOUT端口非空标志位,不空就去读取命令,反正我现在是这么做的

从cpld写数据到cy7c68013,并在电脑上显示所写数据的相关设置 cpld上写数到usb数据总线,slave fifo模式下并通过ep6以bulk autoin的方式传入电脑,并在电脑上面显示 相关设置: A.通过epm3128配置slave fifo模式 fifoaddr[1:0] = 10 选择ep6 worldwide = 0(ep2fifocfg &ep4fifocfg &ep6fifocfg &ep8fifocfg的最低位设置为0) reset引脚固定为1 B.设置cy7c68013相关程序 过程1:异步方式 设置芯片工作在slave fifo模式下,数据为异步方式,并使用内部时钟 因为为异步方式,故必须设置slwr写时钟控制信号,此过程是通过cpld管脚传入20M方波来完成的。 void TD_Init( void ) { // Called once at startup REVCTL="0x03"; SYNCDELAY; CPUCS = 0x0A; //0x12=48Mhz 0x02=12Mhz 0x0a=24Mhz; CLKOUT enable SYNCDELAY; IFCONFIG = 0xFB; //设置芯片工作在slave fifo模式下,数据为异步方式,并使用内部时钟 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 = 0xAE; // FLAGA - fixed EP6FF, FLAGB - fixed EP6EF SYNCDELAY; SYNCDELAY; FIFOPINPOLAR = 0x00; // all signals active low SYNCDELAY; SYNCDELAY; EP6CFG = 0xE0; //BULK,IN,512*4 BUFFER SYNCDELAY; EP6AUTOINLENH = 0x02; //AUTOIN = 512 SYNCDELAY; EP6AUTOINLENL = 0x00; SYNCDELAY; EP6FIFOCFG = 0x0D; // AUTOIN="1", ZEROLENIN="1", WORDWIDE="1"; //0x0D:16BIT; 0x0C:8BIT SYNCDELAY; } 过程2:同步方式 设置slwr管脚同步为0,也就是设置写信号一直使能 芯片使用外部时钟与cpld同步,并配置为slave fifo 模式 相关程序: void TD_Init( void ) { // Called once at startup CPUCS = 0x10; // CLKSPD[1:0]=10, for 48MHz operation IFCONFIG = 0x03; //外部时钟 slave fifo模式 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 SYNCDELAY; PINFLAGSCD = 0xFE; // FLAGC - fixed EP6FF, FLAGD - fixed EP8FF SYNCDELAY; PORTACFG |= 0x80; // 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... EP6FIFOCFG = 0x0C; // AUTOIN="1", ZEROLENIN="1", WORDWIDE="0" SYNCDELAY; EP8FIFOCFG = 0x0C; // AUTOIN="1", ZEROLENIN="1", WORDWIDE="0" } 当然上述两个过程都需要在dsar.a51设置ep6为bulk in 否则端点无法被识别。 C.发热问题解决方案: cpld epm3128与cy7c68013芯片相连接管脚中未使用到的,应在epm3128中设置为高阻态,相应设置方法是: 在quartus中,点击assignment菜单,选择“device”,在max3000A下面的“device and pins options”中 ,“unused pins”,设置为“as input tri-stated”即三态输入方式。 另外为解决总线上电阻两边电平不一致的不良状态,应通过epm3128配置sloe管脚为高,这是因为数据是从usb单片机cy7c68013写入电脑的,数据只是单方面的写,没有进行相关的读操作,故应禁止读使能。

看得头晕啊

学习

看得头晕啊