zhangyanping
驱动小牛
驱动小牛
  • 注册日期2003-02-23
  • 最后登录2004-07-23
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:2175回复:18

flying,请过来接分!

楼主#
更多 发布于:2003-04-18 19:49
首先,还是感谢你对于我提的9054 DMA的回答,虽然现在我还是没有调出那个DMAISDONE信号,也不知道怎么回事,但我打算先用数字示波器看一下9054是不是产生了有效的ADS,HOLD和BLAST信号给CPLD,以及9054是不是接收到了CPLD的READY信号!

我用的板子是PLX公司阿9054测试版,CPLD的程序是些好的,我没有改动,但是我仿真看了那个时序,是正确的,所以,问题在那儿藏着呢?在继续调试吧!
flying
驱动小牛
驱动小牛
  • 注册日期2002-08-01
  • 最后登录2016-06-19
  • 粉丝0
  • 关注0
  • 积分197分
  • 威望70点
  • 贡献值0点
  • 好评度19点
  • 原创分0分
  • 专家分0分
  • 社区居民
沙发#
发布于:2003-04-18 22:49

我用的板子是PLX公司阿9054测试版,CPLD的程序是些好的,我没有改动,但是我仿真看了那个时序,是正确的,所以,问题在那儿藏着呢?在继续调试吧!


我也是用的PLX的RDK板,可以正常执行DMA的。
不过我没有注意那个DMAISDONE信号,不过我相信是对的。我明天去看看

你试 《PCI 9054RDK-LITE Hardware Reference Manual》第14上的DMA例子?这个或许有用
zhangyanping
驱动小牛
驱动小牛
  • 注册日期2003-02-23
  • 最后登录2004-07-23
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2003-04-19 09:35
flying,DMAISDONE信号是DMA结束时,9054自动设置的一个状态位,如果DMA正常结束了,就一定可以检测到这一位的,否则就失败了!

你的DMA调通了,有没有看读到PC内存的数据和SRAM里的数据是不是一样阿?

我现在想用数字示波器看一下CPLD的波形!
flying
驱动小牛
驱动小牛
  • 注册日期2002-08-01
  • 最后登录2016-06-19
  • 粉丝0
  • 关注0
  • 积分197分
  • 威望70点
  • 贡献值0点
  • 好评度19点
  • 原创分0分
  • 专家分0分
  • 社区居民
地板#
发布于:2003-04-22 20:08
我看过了,SRAM中的数据和DMA的数据是一样的!

你现在问题解决了吗?

你的CPLD是什么型号的?
Local Bus上的时钟为多少,是不是可能和你的CPLD器件有关?如该器件的速度等级不够等?
zhangyanping
驱动小牛
驱动小牛
  • 注册日期2003-02-23
  • 最后登录2004-07-23
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2003-04-22 20:50
flying,你是调试的块模式DMA吗?我调试通了块模式的,但是奇怪的是块最大尺寸只能到988个长字,读出的数据和SRAM里的是一样的,可是再增大尺寸,程序还是在等待DMAISDONE那里死掉了?你的可以一次读取多大的数据量阿?

后来,我又用了另一种分散/集中的方式,就是给DMAMODE的值变为0X243,我申请的buf为1024个长字,设置一个块尺寸是512,也就是只有两个块链接,结果可以接收到DMAISDONE信号,应该是DMA可以完成了,可是我看了读出的数据,只有前面127个是正确的,这是怎么回事阿!

请多多指导阿,我需要一次读取8K的数据量,用块模式也可以阿,可是现在不行,我用的SRAM是MT58LC32K32B的,时钟是50MHZ的,应该没有影响吧?
zhangyanping
驱动小牛
驱动小牛
  • 注册日期2003-02-23
  • 最后登录2004-07-23
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2003-04-22 20:54
对了,我得CPLD是EPM7064,时钟是50MHZ的,刚才忘了说了!

还有,flying,我现在看不到给分的按钮,只有另开贴给你分了,多谢了!
zhangyanping
驱动小牛
驱动小牛
  • 注册日期2003-02-23
  • 最后登录2004-07-23
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2003-04-23 15:03
flying,我的分散集中DMA调通了,一次可以DMA 16K 的数据,满足了设计要求,我现在要测试一下这个DMA的速度,你看,是不是直接就用定时器就行了?

多谢你那么多的指导了!
flying
驱动小牛
驱动小牛
  • 注册日期2002-08-01
  • 最后登录2016-06-19
  • 粉丝0
  • 关注0
  • 积分197分
  • 威望70点
  • 贡献值0点
  • 好评度19点
  • 原创分0分
  • 专家分0分
  • 社区居民
7楼#
发布于:2003-04-23 18:43
呵呵,不用客气,大家相互学习嘛~

我用的是Block DMA,分散/集中DMA我还没有试,因为我不打算用那种方式,
我用的是PLX的9054RDK板, 我的块长度可以达到RDK板上的SRAM的容量,我初略的看了一下,是对的!

还有就是你的说的那个测速度,是不是在Windows下,利用自己做的软件来测试?如果是的话,最好在纯DOS下,这样可能会准确些
zhangyanping
驱动小牛
驱动小牛
  • 注册日期2003-02-23
  • 最后登录2004-07-23
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2003-04-23 21:17
是的,我采用SYSTEMTIME结构,采用GetLocalTime()函数,在DMAStart前和后调用这个函数,然后相减,得到的时间差计算DMA传输速度的,可是很奇怪,我得到的结果失真了,每秒竟然可以传输八百多兆数据,肯定不对阿!

我不知道该怎么在纯DOS下测试阿,你知道WINDOWS 2000没有纯DOS的阿!
flying
驱动小牛
驱动小牛
  • 注册日期2002-08-01
  • 最后登录2016-06-19
  • 粉丝0
  • 关注0
  • 积分197分
  • 威望70点
  • 贡献值0点
  • 好评度19点
  • 原创分0分
  • 专家分0分
  • 社区居民
9楼#
发布于:2003-04-26 11:09
你用的是WinDriver产生的驱动吧?
我用的是Plx 的RDK中提供的驱动,而且用的时间函数也和你不一样,我记得好像是“ftime()”吧,可以测试到ms级。
SYSTEMTIME结构我没有用过
zhangyanping
驱动小牛
驱动小牛
  • 注册日期2003-02-23
  • 最后登录2004-07-23
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2003-05-01 21:47
是啊,我使用的WINDRIVER的框架程序,好像WINDRIVER没有现成的测试时间的函数让我使用的,所以,只有另外想办法,可是我使用OS的API函数测试的时间都不对的,速度竟然超过了PCI的最高速度!

请同志们多多帮忙阿,是不是使用的方法不对阿?难道我测试的不是DMA的运行时间?
flying
驱动小牛
驱动小牛
  • 注册日期2002-08-01
  • 最后登录2016-06-19
  • 粉丝0
  • 关注0
  • 积分197分
  • 威望70点
  • 贡献值0点
  • 好评度19点
  • 原创分0分
  • 专家分0分
  • 社区居民
11楼#
发布于:2003-05-02 09:11
要不 这样吧
我把我的测试程序发给你,你再试试看,是不是还是这个样子?

不过,我用的是PLX的驱动,我现在对WinDriver没有多少好感!
因为我用过Windows,Linux,VxWorks版的WinDriver,感觉有些“恶心”,呵呵
zhangyanping
驱动小牛
驱动小牛
  • 注册日期2003-02-23
  • 最后登录2004-07-23
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
12楼#
发布于:2003-05-02 09:46
flying,那就太感谢你了!

我的邮箱是:zhangyanping115@163.com

如果可以成功,一定在谢了!不过,我也感觉WINDRIVER越用越不方便了!可是,事以至此还是要给老板一个交代阿!
fannwong
驱动牛犊
驱动牛犊
  • 注册日期2003-01-31
  • 最后登录2016-01-07
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
13楼#
发布于:2003-06-03 14:39
zhangyangping:
你好,我的情形与你以前一样,single次的读写正确!
但:1)我读大量数据时,发现是多次single的重复,的非burst方式(ads的数量与dword数量一样多)。2)我的DMA也无法完成,发现local端时序正确(有ads 和ready),但测不到PCI端的REQ#,GNT#信号,且DMATHR中的监测位均为0(DMA FIFO 为空).

请指教!
zhangyanping
驱动小牛
驱动小牛
  • 注册日期2003-02-23
  • 最后登录2004-07-23
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
14楼#
发布于:2003-06-03 16:47
不知道我的情况和你的是不是一样,我用的是分散集中DMA,一次可以读出16K或者更多的数据,而且,我分段显示的读出的数据,和板卡上SRAM中的数据比较了,的确是把数据都读出来了,但是,就是测试的速度不对,所以,我不知道是什么原因,你的只是重复读一块数据吗?
我的LOCAL端的时序我仿真出来是正确的!但是没有用逻辑分析仪看!
fannwong
驱动牛犊
驱动牛犊
  • 注册日期2003-01-31
  • 最后登录2016-01-07
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
15楼#
发布于:2003-06-04 10:05
我单次dma也无法实现,但local端有操作产生(有ads,ready)
而PCI端无操作(req#=1,gnt#=半高不低).
且若dma的size小于32dword(9054的dma fifo大小),local端
有同数量的ads,ready;且若dma的size大于32dword,local端
只有32个ads,ready;所以我怀疑local数据已读入9054,但
未写入pci目标处,但DMATHR中的监测位均为0(DMA FIFO 为空).
为什么?????????


zhangyanping
驱动小牛
驱动小牛
  • 注册日期2003-02-23
  • 最后登录2004-07-23
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
16楼#
发布于:2003-06-04 10:25
没有REQ和GNT信号,说明你PCI总线这边没有及时响应,所以,你看到的PCI内部的寄存器的内容应该也不是正确的了,在检查一下金手指这边是不是接好没有问题,在看LOCAL端,我想如果你的控制时序正确,LOCAL端应该没有问题,问题在PCI总线这边。

在看看,祝好运!
fannwong
驱动牛犊
驱动牛犊
  • 注册日期2003-01-31
  • 最后登录2016-01-07
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
17楼#
发布于:2003-06-04 16:58
可是single次的读写均正确,pci端引脚连线应该正确。
且pci配置信息也正确。
zhzjjx
驱动牛犊
驱动牛犊
  • 注册日期2007-06-06
  • 最后登录2008-09-07
  • 粉丝0
  • 关注0
  • 积分1分
  • 威望2点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
18楼#
发布于:2008-09-06 21:08
引用第6楼zhangyanping于2003-04-23 15:03发表的  :
flying,我的分散集中DMA调通了,一次可以DMA 16K 的数据,满足了设计要求,我现在要测试一下这个DMA的速度,你看,是不是直接就用定时器就行了?

多谢你那么多的指导了!
zhzjjx
游客

返回顶部