使用68013的slave FIFO模式来传输数据

[复制链接]
728|8
手机看帖
扫描二维码
随时随地手机跟帖
kangzj|  楼主 | 2018-5-18 10:30 | 显示全部楼层 |阅读模式
使用68013的slave FIFO模式来传输数据,上位机发送数据,下位可以准确收到,但是下位机给上位机发送数据,则显示2次成功,然后一直失败,弄了好久,不知其原因。
houcs| | 2018-5-18 10:32 | 显示全部楼层
估计你的初始化配置有问题

使用特权

评论回复
kangzj|  楼主 | 2018-5-18 10:34 | 显示全部楼层
等会,那我把初始化的代码贴上来给大家看看

使用特权

评论回复
kangzj|  楼主 | 2018-5-18 10:38 | 显示全部楼层
void TD_Init( void )     
{
  CPUCS = 0x12;
  IFCONFIG = 0x43;

  PORTACFG = 0x40;
  SYNCDELAY;
  FIFOPINPOLAR = 0x00;  // set all slave FIFO interface pins as active low PKTEND OR SLOE SLWR LOW AVTIVE
  SYNCDELAY;
  REVCTL = 0x03;        // enable the external master   

  SYNCDELAY;            //reset the fifos
  FIFORESET = 0x80;
  SYNCDELAY;
  FIFORESET = 0x02;
  SYNCDELAY;
  FIFORESET = 0x04;
  SYNCDELAY;
  FIFORESET = 0x06;
  SYNCDELAY;
  FIFORESET = 0x08;
  SYNCDELAY;
  FIFORESET = 0x00;

  SYNCDELAY;
  PINFLAGSAB = 0x00;         // PINFLAGSAB = 0xE0; FLAGA - indexed, FLAGB - EP6 FF ;
  SYNCDELAY;
  PINFLAGSCD = 0x00;        // PINFLAGSCD = 0x08; FLAGC - EP2 EF, FLAGD - indexed;  

  SYNCDELAY;                    // config the endpoints direction
  EP1OUTCFG = 0xA0;        //enable and bulk type
  EP1INCFG =  0xA0;

  SYNCDELAY;                    // see TRM section 15.14
  EP2CFG = 0xA0;
  SYNCDELAY;     
  EP8CFG = 0xE0;
  SYNCDELAY;
  EP4CFG = 0x00;
  SYNCDELAY;                    
  EP6CFG = 0x00;
  SYNCDELAY;                    
  OUTPKTEND = 0X82;             //arming endpoint 2, perform OUTPKTEND 4 times since EP2 is 4x buffered
  SYNCDELAY;  
  OUTPKTEND = 0X82;
  SYNCDELAY;  
  OUTPKTEND = 0X82;
  SYNCDELAY;  
  OUTPKTEND = 0X82;
  SYNCDELAY;                 
  EP2FIFOCFG = 0x10;        //EP IS AUTOOUT=0 AUTOIN =1 ZEROLEN=1 WORDIDE=0
  SYNCDELAY;
  EP8FIFOCFG = 0x08;        //EP IS AUTOOUT=0 AUTOIN =1 ZEROLEN=1 WORDIDE=0
  SYNCDELAY;
  INPKTEND = 0x08;
  SYNCDELAY;
  INPKTEND = 0x08;
  SYNCDELAY;
  EP8AUTOINLENH = 0x02;   //set the packet size 512
  SYNCDELAY;
  EP8AUTOINLENL = 0x00;
  SYNCDELAY;
               
  EP2BCL = 0x80;                // arm EP2OUT by writing byte count w/skip.
  SYNCDELAY;                    
  EP2BCL = 0x80;
  SYNCDELAY;   
}

使用特权

评论回复
liuzaiy| | 2018-5-18 10:40 | 显示全部楼层
下位机传到PC,属于IN传输,首先要确认IN Endpoint配置是否有问题。

使用特权

评论回复
pangb| | 2018-5-18 10:43 | 显示全部楼层

你可以设置成AUTOIN模式,EPxAUTOINLENH来设置要传输的数据大小。

使用特权

评论回复
ousj| | 2018-5-18 10:45 | 显示全部楼层
FIFO端点在Auto-In模式可以如下,数据手册也有说道:
1. Configure bits IFCONFIG[7:4] to define the behavior of
the interface clock.
2. Set bits IFCFG1:0=11.
3. Set REVCTL.0 and REVCTL.1 to ‘1’.
4. Configure EPxCFG.
5. Reset the FIFOs.
6. Set bit EPxFIFOCFG.3=1.
7. Set the size through the EPxAUTOINLENH registers.

使用特权

评论回复
ousj| | 2018-5-18 10:48 | 显示全部楼层
你是不是还在搞usb啊?这个好像是fifo满了吧,后面不能发送了

使用特权

评论回复
kangzj|  楼主 | 2018-5-18 10:52 | 显示全部楼层
嗯,那我按大家的说法挨个排查一下,先结贴啦,谢谢哈

使用特权

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

本版积分规则

672

主题

7007

帖子

2

粉丝