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

9054的DMA中,ready#信号怎么使用?

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


       我用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寄存器大概又是做什么用的呢?

     谢谢您的关注,如果能得到您的一点提示,对苦难中的我来说都是极大
的帮助.还请各位有经验的大侠多多提点.
zzzmy2003
驱动牛犊
驱动牛犊
  • 注册日期2003-05-18
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分44分
  • 威望5点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2005-08-04 21:11
我现在的问题和你的几乎一模一样,只不过,我是pci->local,所以需要一个信号阻止dma,使得fifo读空后,才能继续DMA操作! 共同探讨,现在的想法是想通过中断,不知道行不行?
prattle
驱动牛犊
驱动牛犊
  • 注册日期2004-04-01
  • 最后登录2005-08-07
  • 粉丝0
  • 关注0
  • 积分45分
  • 威望8点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2005-08-05 17:42
这个问题我解决了.
        通过本地端给9054一个Breqi信号.申请占用本地总线.
这样DMA仲裁就会置低lhold,放弃本地总线.从而暂停DMA操作.
 
希望能和你进一步交流.
我QQ 14183938
zzzmy2003
驱动牛犊
驱动牛犊
  • 注册日期2003-05-18
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分44分
  • 威望5点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
地板#
发布于:2005-08-05 18:04
那么什么时候又继续DMA操作呢?
因为暂停DMA后,数据并没有传输完,是不是在把Breqi信号置无效dma就又开始接着传输?
9054可以完成这样的智能操作嘛?如果可以那简直太好了,我得问题就解决了
可不可以这样操作,你们这样是否已经成功?先谢谢了
刚刚加你,你好像不在,顺便留下我得:191143771,希望共同探讨!
prattle
驱动牛犊
驱动牛犊
  • 注册日期2004-04-01
  • 最后登录2005-08-07
  • 粉丝0
  • 关注0
  • 积分45分
  • 威望8点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2005-08-05 18:27
对,就是这样
dreamtown
驱动小牛
驱动小牛
  • 注册日期2004-05-12
  • 最后登录2006-01-16
  • 粉丝0
  • 关注0
  • 积分26分
  • 威望5点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2005-08-06 21:10
用READY#信号也可以,READY#信号的目的就是这个
当READY#信号无效后,数据传输就自动中止,等到有效后,会自动再开始
9054中有个寄存器位来使能这个功能,别忘了使能这个功能
prattle
驱动牛犊
驱动牛犊
  • 注册日期2004-04-01
  • 最后登录2005-08-07
  • 粉丝0
  • 关注0
  • 积分45分
  • 威望8点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2005-08-07 17:41
多谢,下次有机会试试
yuerlxl
驱动牛犊
驱动牛犊
  • 注册日期2005-05-11
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分8分
  • 威望2点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2005-08-10 14:52
你们有没有人是采用中断方式下的DMA传输?我们的中断信号为什么一直没有效呢?
jufeng27
驱动牛犊
驱动牛犊
  • 注册日期2007-03-01
  • 最后登录2007-03-01
  • 粉丝0
  • 关注0
  • 积分20分
  • 威望3点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2007-03-01 00:57
9054是干什么用的 好玩吗
游客

返回顶部