我也一直怀疑固件操作上哪里有问题,或者是代码,或者是编译过程。
代码部分没什么特别,只是用slaveFIFO,配置了一下autoin,autoout 。
void TD_Init( void )
CPUCS = 0x10; //cpu 48Mhz,Clockout unable
IFCONFIG =0x53; //外部IFclk,180inverter,synchronously,gstate unable,slaveFifo mode.
REVCTL = 0x03; // MUST set REVCTL.0 and REVCTL.1 to 1 EP autoarm unable. CPU can edit in and out packet.
SYNCDELAY;
FIFORESET = 0x80;
SYNCDELAY;
FIFORESET = 0x02;
SYNCDELAY;
FIFORESET = 0x04;
SYNCDELAY;
FIFORESET = 0x06;
SYNCDELAY;
FIFORESET = 0x08;
SYNCDELAY;
FIFORESET = 0x00;
SYNCDELAY;
SYNCDELAY;
EP2CFG=0xA0; //out bulk,512,quadbuffers
SYNCDELAY;
EP4CFG=0x00;
SYNCDELAY;
EP6CFG=0xE0; // in,其余同EP2
SYNCDELAY;
EP8CFG=0x00;
PORTACFG |= 0x40;
SYNCDELAY;
OEA |= 0x0B;
SYNCDELAY;
WAKEUPCS |= 0x00;
SYNCDELAY;
SYNCDELAY;
PINFLAGSAB = 0x00;
SYNCDELAY;
PINFLAGSCD = 0x00;
SYNCDELAY;
FIFOPINPOLAR = 0x00;
SYNCDELAY;
EP2FIFOCFG = 0x11; //when data arive endpoint interrupt is asserted,Cpu can't edit the data. and the
// flags changed automatically. Wordwidth is 16bit.
SYNCDELAY;
EP6FIFOCFG = 0x4D; //快接近满时提示。按照自定义大小自动分解文件包。Enable Zero length IN Packets,16bit
SYNCDELAY;
编译时除了fifo.c和fw.c 另外增加了ezusb.lib,usbjmptb.obj,dscr.a51.
出了初始化代码,其它没有做任何更改。 理论上,如果EEPROM没有的话,PID和VID应该是默认的,用console下载hex文件进去后,pid和vid是不变的。但是上位机提示的未知设备,我推断是因为下位机有了鑫的ID,所以识别不了。
打开dscr.a51, 在decriber 字段有PID和VID的标示,所以直接改了,还是没用。 (不懂这个有什么意义,乱来的) |