打印

cy7c6813的slave FIFO 同步模式单子节读写问题(非高手误入)

[复制链接]
3997|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
zsflyn|  楼主 | 2009-8-21 00:29 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我的固件程序如下:
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
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

3

帖子

0

粉丝