CY7C68013 gpif的问题

[复制链接]
4591|5
 楼主| crystal28 发表于 2010-10-14 21:28 | 显示全部楼层 |阅读模式
我采用如下代码(基本按照fifo的例子)实现FIFO Read Transaction,但是发现
1)若FIFO Read执行一次(TC为1280(0x500)),上位机读到1024字节;
2)若FIFO Read执行两次(TC为1280*2(0x500*2)),上位机读到2048字节;
3)若FIFO Read执行三次(TC为1280*3(0x500*3)),上位机读到2560字节;
4)若FIFO Read执行四次(TC为1280*4(0x500*4)),上位机读到3072字节
总是不能全部读到,为什么?请大家帮忙看一下,谢谢。
关于gpif的决定点,我是判断如果TCExpire为真,就进入IDLE,否则原地跳转到原来的状态
  1. if(in_enable) // if IN transfers are enabled
  2. {
  3. if ( GPIFTRIG & 0x80 ) // if GPIF interface IDLE
  4. {
  5. if ( EXTFIFONOTEMPTY ) // if external FIFO is not empty
  6. {
  7. if ( !( EP24FIFO**S & 0x01 ) ) // if EP2 FIFO is not full
  8. {
  9. if(enum_high_speed)
  10. {
  11. SYNCDELAY;
  12. GPIFTCB1 = 0x05;
  13. SYNCDELAY;
  14. GPIFTCB0 = 0x00;
  15. SYNCDELAY;
  16. }
  17. else
  18. {
  19. SYNCDELAY;
  20. GPIFTCB1 = 0x05;
  21. SYNCDELAY;
  22. GPIFTCB0 = 0x00;
  23. SYNCDELAY;
  24. }
  25. Setup_FLOWSTATE_Read(); // setup FLOWSTATE registers for FIFO Read operation
  26. SYNCDELAY;
  27. GPIFTRIG = GPIFTRIGRD | GPIF_EP2; // launch GPIF FIFO READ Transaction to EP2 FIFO
  28. SYNCDELAY;
  29. while( !( GPIFTRIG & 0x80 ) ) // poll GPIFTRIG.7 GPIF Done bit
  30. {
  31. ;
  32. }
  33. SYNCDELAY;
  34. }
  35. }
  36. }
  37. }
如履薄冰 发表于 2010-10-16 18:45 | 显示全部楼层
上位机进行读的时候,本来就是按照这个方法进行读的,1块满了就开始读了,等到下一块满了再读下一块。
 楼主| crystal28 发表于 2010-10-17 21:36 | 显示全部楼层
那我还有个问题,决定点里的Loop Re-Execute是做什么用的。比如gpif designer自带的那个Fifo例子,决定点判断TCXpire标志不为真,那就在原来的状态循环。按理说这种情况应该选择Re-Execute功能,因为每次循环都要在FD[15:0]输出数据,但是Fifo例子里没有勾选,是怎么回事,我的理解是否正确?谢谢!
 楼主| crystal28 发表于 2010-10-22 10:56 | 显示全部楼层
用gpif读取图像传感器ov7670,传输到上位机,结果是这样的,为什么几行数据之后就会错位呢,偏差总是512字节的倍数。求解!
 楼主| crystal28 发表于 2010-10-23 09:47 | 显示全部楼层
 楼主| crystal28 发表于 2011-1-24 13:52 | 显示全部楼层
忘了结贴了。
这个已经改成slave fifo了,gpif遇到问题解决不了,没办法
您需要登录后才可以回帖 登录 | 注册

本版积分规则

12

主题

45

帖子

2

粉丝
快速回复 在线客服 返回列表 返回顶部