wwenguang
驱动小牛
驱动小牛
  • 注册日期2002-08-12
  • 最后登录2005-08-22
  • 粉丝0
  • 关注0
  • 积分1分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1073回复:2

写9054DMA驱动,用DS,BytesRemaining()该怎么用

楼主#
更多 发布于:2003-11-07 10:59
用DMA写数据:
if ((ULONG) pXfer->BytesRemaining() == I.WriteSize())
{
   StartDMA(ptd->td_PhysAddr.LowPart,ptd->td_Length);
}
运行时会出现:break due to page fault(0eh) fault=0000
如果把判断条件改为
  if ((ULONG) pXfer->BytesRemaining() == number)
number 为具体的一个数值,就不出错,这是怎么回事?
CYoung
驱动中牛
驱动中牛
  • 注册日期2003-06-10
  • 最后登录2005-01-04
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2003-11-07 11:06
当然会出错了,你第一种情况调用的WriteSize()函数返回的是一个status,而你的条件语句判断的是字节数,当然会出错。
答得好的话,请兄弟们加点分,那是对我的肯定
wwenguang
驱动小牛
驱动小牛
  • 注册日期2002-08-12
  • 最后登录2005-08-22
  • 粉丝0
  • 关注0
  • 积分1分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2003-11-07 11:24
我觉得I.WriteSize()返回的是一个数值,因为我用
t <<  \"I.WriteSize()= \" << I.WriteSize() <<EOL;
可以看到.
并且还有一个问题,把上面的判断注释掉,做完DMA后看到
BytesRemaining() 仍然对于传输前的值,没有变为0.
游客

返回顶部