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写入电脑的,数据只是单方面的写,没有进行相关的读操作,故应禁止读使能。
用户248129 2010-4-9 14:09
用户196304 2009-3-26 11:43
用户1394949 2009-1-8 15:06