打印

68013A问题,跪求大神来看一眼,就一眼!!!

[复制链接]
1605|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
w5555456|  楼主 | 2014-3-6 23:41 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
             68013A与FPGA连接,工作在slavefifo模式,EP2配置为512的bulk_out,manuout模式,
             我按照技术手册上的说明,在TD_Poll()里面把EP2BCH 和EP2BCL 改成0x00 0x08(就是不想要那么多字节的数                  据,只要8个),
             为什么从PC发送512的数据后,FIFO的数据标志引脚FLAGA B C D没有任何变化,而且FPGA也读不到数据??
             但是把EP2BCH 和EP2BCL 改成0x02 0x00,FPGA就完全可以正常读取512字节的数据且标志信号引脚正常。
             我看技术手册里面都可以把BCL赋值0x01的,
有木有哪位能指点一下啊!?想不明白了,,,,谢谢!!!

                   另:如果说是芯片本身不支持这个,请问有没有别的能传输少量字节的办法?
                     


下面是代码:

void TD_Poll(void)             // USB空闲的时候循环调用
{
if( !( EP2468STAT & 0x01 ))
{

SYNCDELAY;                //
FIFORESET = 0x80;         // nak all OUT pkts. from host
SYNCDELAY;                //
   
//EP2FIFOBUF[0] = 0xA0;     // create newly sourced pkt. data
//SYNCDELAY;                //
EP2FIFOBUF[1] = EP2BCH;     // create newly sourced pkt. data
SYNCDELAY;                //
EP2FIFOBUF[2] = EP2BCL;     // create newly sourced pkt. data
SYNCDELAY;                //
EP2FIFOBUF[3] = EP2FIFOBUF[0]+3;     // create newly sourced pkt. data
SYNCDELAY;   
EP2FIFOBUF[4] = EP2FIFOBUF[0]+4;     // create newly sourced pkt. data
SYNCDELAY;                //
EP2FIFOBUF[5] = EP2FIFOBUF[0]+5;     // create newly sourced pkt. data
SYNCDELAY;                //
EP2FIFOBUF[6] = EP2FIFOBUF[0]+6;     // create newly sourced pkt. data
SYNCDELAY;                //
EP2FIFOBUF[7] = EP2FIFOBUF[0]+7;     // create newly sourced pkt. data
SYNCDELAY;  
SYNCDELAY;

EP2BCH = 0x02;
SYNCDELAY;                   // 就是这里有问题,字节计数器如果不复制512就死活不行!!!
EP2BCL = 0x00;            // commit newly sourced pkt. to interface fifo

SYNCDELAY;
FIFORESET = 0x00;         // release "nak all"

SYNCDELAY;
OUTPKTEND =0x82;   //skip uncommitted pkt.(the second pkt.)
}
}



初始化程序:
void TD_Init(void)             // 初始化程序段
{

/*SYS------------------------SYS*/
    CPUCS = 0x12;  //48MHZ CLKOUT ENALBE    使用48M晶振

IFCONFIG =0xCB;//使用内部时钟 48M 异步
SYNCDELAY;    //同步延时

REVCTL = 0x03; //置REVCTL.0=1,REVCTL.1=1
SYNCDELAY;

PINFLAGSAB = 0x00;              
SYNCDELAY;
PINFLAGSCD = 0x00;         
SYNCDELAY;
PORTACFG =  0x00;               // SLCS, set alt. func. of PA7 pin   PA7引脚作为普通的I/O口
SYNCDELAY;
FIFOPINPOLAR = 0x00;          // all signals active low,所有接口引脚为低电平有效
SYNCDELAY;
/*SYS------------------------SYS*/


/*EP8------------------------EP8*/
EP8CFG    = 0xE1; //设置8端点为批量传输模式,输入端点
SYNCDELAY;

FIFORESET = 0x80;             // activate NAK-ALL to avoid race conditions   复位FIFO
SYNCDELAY;                    // see TRM section 15.14
FIFORESET = 0x08;             // reset, FIFO 8
SYNCDELAY;                     
FIFORESET = 0x00;
SYNCDELAY;
                           
EP8FIFOCFG = 0x09;             // AUTOIN=1, ZEROLENIN=0, WORDWIDE=1
    SYNCDELAY;

    EP8AUTOINLENH = 0x00;    //EZ_USB自动处理8字节的数据包
SYNCDELAY;
EP8AUTOINLENL = 0x08;
SYNCDELAY;
/*EP8------------------------EP8*/


/*EP2------------------------EP2*/
EP2CFG    = 0xA2; //EP2 BULK 512B 双缓冲
SYNCDELAY;

FIFORESET = 0x80;             // activate NAK-ALL to avoid race conditions   复位FIFO
SYNCDELAY;                    //
FIFORESET = 0x02;             // reset, FIFO  2
SYNCDELAY;                     
FIFORESET = 0x00;
SYNCDELAY;

EP2FIFOCFG = 0x01;//0x11;   // AUTOOUT=0, ZEROLENIN=0, WORDWIDE=1
SYNCDELAY;                    // deactivate NAK-ALL  

OUTPKTEND =0x82;   //启动EP2的OUT缓冲区 1
    SYNCDELAY;                     
OUTPKTEND =0x82;   //启动EP2的OUT缓冲区 2

    SYNCDELAY;           
/*EP2------------------------EP2*/


/*EP4------------------------EP4*/
FIFORESET = 0x80;             // activate NAK-ALL to avoid race conditions   复位FIFO
SYNCDELAY;                    // see TRM section 15.14
FIFORESET = 0x04;             // reset, FIFO 4
SYNCDELAY;                     
FIFORESET = 0x00;
SYNCDELAY;
/*EP4------------------------EP4*/


  /*EP6------------------------EP6*/
FIFORESET = 0x80;             // activate NAK-ALL to avoid race conditions   复位FIFO
SYNCDELAY;                    // see TRM section 15.14
FIFORESET = 0x06;             // reset, FIFO 6
SYNCDELAY;                     
FIFORESET = 0x00;
SYNCDELAY;
/*EP6------------------------EP6*/

Rwuen = TRUE;
}

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

1

帖子

0

粉丝