我的固件程序如下:
void TD_Init( void )
{
// Called once at startup
//时钟设置
//CPUCS = 0x02; //12MHZ CLKOUT ENALBE
CPUCS = 0x0a; //24MHZ CLKOUT ENALBE
//CPUCS = 0x12; //48MHZ CLKOUT ENALBE
IFCONFIG =0x43;//使用外部时钟,IFCLK输入不反向
SYNCDELAY;
EP2CFG=0xA0; //需要设定为四缓冲,每个缓冲区大小为512字节
SYNCDELAY;
EP4CFG=0x00;
SYNCDELAY;
EP6CFG=0xE0;
SYNCDELAY;
EP8CFG=0x00;
SYNCDELAY;
FIFORESET = 0x80; // activate NAK-ALL to avoid race conditions
SYNCDELAY; // see TRM section 15.14
FIFORESET = 0x02; // reset, FIFO 2
SYNCDELAY; //
FIFORESET = 0x06; // reset, FIFO 6
SYNCDELAY; //
FIFORESET = 0x00; // deactivate NAK-ALL
SYNCDELAY;
PINFLAGSAB = 0xE6; // FLAGA - fixed EP6PF, FLAGB - fixed EP6FF
SYNCDELAY;
PINFLAGSCD = 0xf8; // FLAGC - fixed EP2EF, FLAGD - reserved
SYNCDELAY;
PORTACFG |= 0x40; // SLCS, set alt. func. of PA7 pin
SYNCDELAY;
FIFOPINPOLAR = 0x00; // all signals active low,
SYNCDELAY;
OEA|=0x0F;
// handle the case where we were already in AUTO mode...
EP2FIFOCFG = 0x01; // AUTOOUT=0, WORDWIDE=1
SYNCDELAY;
EP2FIFOCFG = 0x11; // AUTOOUT=1, WORDWIDE=1
SYNCDELAY;
EP6FIFOCFG = 0x09; // AUTOIN=1, ZEROLENIN=0, WORDWIDE=1
SYNCDELAY;
//IO设置
PORTCCFG=0x00;
PORTECFG=0x00;
OEC=0x00;
OEE=0xff;
PA0=1;
enum_high_speed=FALSE;//枚举为高速/低速USB设备,TRUE则高速,FALSE则FALSE,
//在中断函数DR_SetConfiguration中设置
}
使用VC编写动态库,在动态库中使用了多线程技术.防止读写冲突.
在FPGA中编写了SLAVE FIFO的同步读写状态机.
但是发现在进行批量读写时没有任何问题,但是在进行单字节读写时,能够单子节写入到FPGA的FIFO中.却无法单字节读回到计算机中不知道是什么问题.请高手给予指导.每次要进行单字节读写时在调用动态库中的如下函数时.其中的lenth都只能是512才能读上来.例如我只下发12345678.这几个数一次,但是读回来的数据确是512个12345678.不知道是什么原因请高手指点.另外读回的数据不能是指定字节读回来例如lenth改为12时计算机就会死机.不知道哪位高手可以解决请回复.
if (handle == INVALID_HANDLE_VALUE)
return 9;
int zlen;
zlen=0;
BULK_TRANSFER_CONTROL bulkControl;
bulkControl.pipeNum = 1;
success = DeviceIoControl(handle,
IOCTL_EZUSB_BULK_READ,
&bulkControl,
sizeof(BULK_TRANSFER_CONTROL),
sData,
lenth,
&nByte,
NULL);
zlen=nByte;
if (!success)
return 0;
else
return zlen;
本人邮箱zsflyn@163.com |