prattle
驱动牛犊
驱动牛犊
  • 注册日期2004-04-01
  • 最后登录2005-08-07
  • 粉丝0
  • 关注0
  • 积分45分
  • 威望8点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:2930回复:5

Tom.cat或者懂得9054DMA传输的朋友救救命呀!9054 DMA 中ready#信号怎么用?

楼主#
更多 发布于:2005-08-02 10:17
谢谢您的关注,如果能得到您的一点提示,对苦难中的我来说都是极大的帮助.还请各位有经验的大侠多多提点


       我用9054实现从local端到PC端的DMA传输.PC端配置9054控
制字发起DMA传输,local端是fifo.

       现在系统可以DMA方式传输数据,但由于DMA速度高于fifo写入
速度,所以DMA一段时间之后,fifo会读空,直到fifo深度高过阈值后,才
能向PC传递正确的信息.这样的话,就会出现问题,比如我传输1M数据,
我fifo深度是1K,那么我得到的1M数据中,每过若干K后,fifo被读空,
PC得到的数据就会出现一片重复的无用数据,直到,fifo深度再次高过
阈值后,PC端读到的数据才会刷新,开始新的一轮循环.

       打个比方,比如我要传的数据是:
0x00 0x01 0x02 0x03 0x04 0x05 0x06 0x07 0x08 0x09 a0x0 0x0b 0x0c 0x0d 0x0e 0x0f
0x00 0x01 0x02 0x03 0x04 0x05 0x06 0x07 0x08 0x09 a0x0 0x0b 0x0c 0x0d 0x0e 0x0f
0x00 0x01 0x02 0x03 0x04 0x05 0x06 0x07 0x08 0x09 a0x0 0x0b 0x0c 0x0d 0x0e 0x0f
......
0x00 0x01 0x02 0x03 0x04 0x05 0x06 0x07 0x08 0x09 a0x0 0x0b 0x0c 0x0d 0x0e 0x0f
    
     目前状态下,我得到的数据会是:
0x00 0x01 0x02 0x03 0x04 0x05 0x06 0x07 0x08 0x09 a0x0 0x0b 0x0c 0x0d 0x0e 0x0f
......
0x00 0x01 0x02 0x03 0x04 0x05 0x06 0x07 0x08 0x09 a0x0 0x0b 0x0c 0x0d 0x0e 0x0f
0x0f  0x0f  0x0f  0x0f  0x0f  0x0f  0x0f  0x0f  0x0f  0x0f  0x0f  0x0f  0x0f  0x0f  0x0f 0x0f  0x0f
......
0x0f  0x0f  0x0f  0x0f  0x0f  0x0f  0x0f  0x0f  0x0f  0x0f  0x0f  0x0f  0x0f  0x0f  0x0f 0x0f  0x0f

0x00 0x01 0x02 0x03 0x04 0x05 0x06 0x07 0x08 0x09 a0x0 0x0b 0x0c 0x0d 0x0e 0x0f
......
0x00 0x01 0x02 0x03 0x04 0x05 0x06 0x07 0x08 0x09 a0x0 0x0b 0x0c 0x0d 0x0e 0x0f
    
      红色字段就是由于fifo读空,没有新数据刷新而产生. 我想能不能通
过使用ready#信号,告知DMA控制器local端数据是否就绪,若ready#
为高,则DMA一直等待.

     另外,9054 DMAMODE0[13] Memory Write and Invalidate
 Mode  寄存器是什么意思?"写并无效"?还有,9054中的 Local Bus
 Latency and PauseTimers寄存器大概又是做什么用的呢?

     谢谢您的关注,如果能得到您的一点提示,对苦难中的我来说都是极大
的帮助.还请各位有经验的大侠多多提点.
prattle
驱动牛犊
驱动牛犊
  • 注册日期2004-04-01
  • 最后登录2005-08-07
  • 粉丝0
  • 关注0
  • 积分45分
  • 威望8点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2005-08-02 14:27
又仔细看了一下9054的databook
看来 Local Bus LatencyTimer 和Local Bus Pause Timer两个寄存器就是干这个的.
可以通过控制这两个寄存器来调整本地总线占用时间,间接可以解决我遇到的问题.
不知对否.
另外,老问题,ready_在DMA操作中起什么作用呢?好像用处不大的样子.
prattle
驱动牛犊
驱动牛犊
  • 注册日期2004-04-01
  • 最后登录2005-08-07
  • 粉丝0
  • 关注0
  • 积分45分
  • 威望8点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2005-08-02 16:38
还有,PCI协议中,写并无效是个什么含义??
不懂.

自问自答~

\\\\///
  |@|@|
  [_~_]
prattle
驱动牛犊
驱动牛犊
  • 注册日期2004-04-01
  • 最后登录2005-08-07
  • 粉丝0
  • 关注0
  • 积分45分
  • 威望8点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2005-08-05 18:26
问题已解决,谢谢关注
x810421
驱动牛犊
驱动牛犊
  • 注册日期2004-10-08
  • 最后登录2006-04-15
  • 粉丝0
  • 关注0
  • 积分42分
  • 威望7点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2005-08-08 19:59
如何解决的?提供参考
zengshanhua
驱动牛犊
驱动牛犊
  • 注册日期2011-06-22
  • 最后登录2011-07-25
  • 粉丝0
  • 关注0
  • 积分8分
  • 威望71点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2011-07-19 16:18
遇到相同的问题,咋解决的,那两个参数设置成多少,怎么计算,求解释。
游客

返回顶部