在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
EETOP诚邀模拟IC相关培训讲师 创芯人才网--重磅上线啦!
查看: 3156|回复: 2

9054读取数据不正确,不知道什么地方出问题,希望帮助

[复制链接]
发表于 2007-8-6 21:08:55 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
9054板卡采用的是plx_sdk的驱动,写了个应用程序,读取文件大约1Mbyte大小,存到片外sdram中,
然后再读回来。采用的是scatter/gather DMA方式。
  我先在vc程序中把分配的内存,全初始化为“c”,然后装载文件,这部分内存就被文件内容覆盖,
然后通过sglDMA传入sdram,(当然写的内存被释放了的)。等传完了才读取。读取分配的内存我初始化
为“f”,然后等sdram传入的数据来进行覆盖,最后把这段分配的内存用writehuge()还原文件,然后
和原文件比较,发现只要有不同的地方都是“f”,说明这段内存没有被影响,就是说没有数据覆盖,
其他的地方都是正确的。我采用的是40M的时钟频率,9054采用C模式。
具体表现如下:

0001252fh: 62 53 46 59 68 92 64 68 94 92 45 12 0A F5 CD 69
00012530h: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
...........
0001253ah: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF  //有11行的FF
0001253bh: B1 68 C8 07 5E 4F 4A C4 0D 86 EB 57 AD 65 39 14
........
0001254bh: 3C 9F C6 BA 7A 63 BF 4A 6B E3 A8 3C 51 B0 74 25  //这17行都是正确的和原文件对应的
0001254ch: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
.........
00012556h: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF  //又出现11行的FF,极少时候又有数据
00012557h: FA 52 39 07 A5 4B 64 31 AE 41 E0 1E 71 4E 52 F5
.......又隔一段(长度不确定)再出现上面的情况

其中有数据的都是和原文件对应的,没有错位的情况,我想问一下那些中间的数据到哪去了?
如果我的SDRAM有问题,至少也应该把FF给覆盖掉。
因为我用的是scatter/gatter DMA
控制9054内部FIFO的空满状态局部端用的是LHOLD和blast(都是由9054发出)控制的,
而host端口是9054内部和PCI端口就协议好的吧
我采用的驱动,是PLX自己带的api函数
我曾经就是想问题就可能出现在9054内部FIFO空满的时候,但是我修改eeprom的值:
比如: Local register(08):Enable Pause Timer ,Pause Timer我给的为08
                                              Release Bus on FIFO Full(read)/Empty(write);
      防止内部FIFO出现空满的时候丢失数据

下面的是VC中初始化DMA的情况
// Initialize the DMA channel
DmaDesc.EnableReadyInput        = 1;
DmaDesc.EnableBTERMInput        = 0;
DmaDesc.EnableIopBurst          = 1;
DmaDesc.EnableWriteInvalidMode  = 0;
DmaDesc.EnableDmaEOTPin          = 0;
DmaDesc.DmaStopTransferMode      = AssertBLAST;
DmaDesc.HoldIopAddrConst        = 0;
DmaDesc.HoldIopSourceAddrConst  = 0;
DmaDesc.HoldIopDestAddrConst    = 0;
DmaDesc.DemandMode              = 1;
DmaDesc.EnableTransferCountClear = 0;
DmaDesc.WaitStates              = 0;
DmaDesc.IopBusWidth              = 3;  // 32-bit
DmaDesc.EOTEndLink              = 0;
DmaDesc.ValidStopControl        = 0;
DmaDesc.ValidModeEnable          = 0;//
DmaDesc.EnableDualAddressCycles  = 0;
DmaDesc.Reserved1                = 0;
DmaDesc.TholdForIopWrites        = 0;
DmaDesc.TholdForIopReads        = 0;
DmaDesc.TholdForPciWrites        = 0;
DmaDesc.TholdForPciReads        = 0;
DmaDesc.EnableFlybyMode          = 0;
DmaDesc.FlybyDirection          = 0;
DmaDesc.EnableDoneInt            = 0;  
DmaDesc.Reserved2                = 0;
DmaDesc.DmaChannelPriority      = Channel0Highest;*/
9054局部端控制模块使用FPGA写的,我没有用到中断,全部是用ADS_n,Blast_n,LHOLD,LHOLDA控制的
望兄弟姐妹们帮帮忙,看我哪儿错了,问题有可能出现在哪?给我点建议:兄弟我万分谢谢

[ 本帖最后由 lorchid 于 2007-9-10 16:24 编辑 ]
发表于 2007-8-26 11:54:47 | 显示全部楼层
synopsys dc 中文ppt教材
 楼主| 发表于 2007-9-10 16:27:27 | 显示全部楼层
版主大哥,帮帮忙啊!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /1 下一条


小黑屋| 手机版| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-11-9 09:41 , Processed in 0.020733 second(s), 10 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表