dfli861
驱动牛犊
驱动牛犊
  • 注册日期2004-05-19
  • 最后登录2004-12-02
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1865回复:6

ISP1581 MDMA 如何读出大于512字节的数据!

楼主#
更多 发布于:2004-11-20 16:49
使用ISP1581 MDMA,读出512字节及以下的数据,正常;读出超过512字节的数据时,比如1024,2048,只能读出前512字节,何故?
该批量端点为双缓冲,且端点最大FIFO为1024;
DMA传输计数器为1024或2048或4096;
dfli
dfli861
驱动牛犊
驱动牛犊
  • 注册日期2004-05-19
  • 最后登录2004-12-02
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2004-11-29 14:56
问题已经解决了,原来是驱动程序的问题。
在WinDriver下,可以连续读出4096字节,并且在4096字节传送完毕生成中断DMA_XFER_OK。
可能是原来的驱动程序有512字节的限制。
我用的是伊甸科技的驱动程序和应用程序及固件程序。
其应用程序读写板上的RAM,最多每次512字节;为读出更多字节,修改了512字节的限制,导致超过512字节的数据是垃圾数。
此时,读出传输计数器的内容,只与要求值减少了512字节,不为0,自然不会产生中断。
只是不知道如何修改驱动程序,取消512字节的限制。
另外,WinDriver设置块传输包最大值为64,是否是全速状态,板子上的高速灯也亮了,应该是高速状态,如何修改块传输包最大值为512?
我用的是WinDriver4.32
dfli
metalwing
驱动中牛
驱动中牛
  • 注册日期2003-10-13
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分178分
  • 威望58点
  • 贡献值0点
  • 好评度17点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2004-11-29 09:25
MDMA操作期间没有DMA中断发生,真是奇怪!明明允许DMA中断,至少512字节传送完毕应该有个中断吧?错了,是在DMA传输完成后产生中
断,即你的传输计数器减到0才产生.
给你个建议:先等待数据传输(TX?中断),来了后启动DMA传输.同时读
取该端点的BUFF(读到哪无所谓,只要反复的读),直到收到DMA中断.
新手上路,请多关照.
lhm_as
驱动牛犊
驱动牛犊
  • 注册日期2004-03-08
  • 最后登录2006-04-19
  • 粉丝0
  • 关注0
  • 积分4分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2004-11-28 20:48
只有传输计数器为零时1581mdma方式才产生中断。1581的fifo空满是自动产生的,建议你看看你的固件程序和驱动程序中关于数据处理部分是否正确。
dfli861
驱动牛犊
驱动牛犊
  • 注册日期2004-05-19
  • 最后登录2004-12-02
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2004-11-28 16:27
采用MDMA读目标板上数据采集器使用的FIFO的内容,读超过512字节的数据,如1024,2048,4096字节等。
采用端点FIFO双缓冲时,读1024字节后(正确读出512字节),读ISP1581传输计数器的内容,为0170H(368);
采用端点FIFO单缓冲时,读1024字节后(正确读出512字节),读ISP1581传输计数器的内容,为0200H(512);
为何双缓冲时剩余368字节,144字节扔到那里去了?
单缓冲时剩余512字节,倒可以理解,如何传送剩余的512字节?是否写满FIFO后MDMA自动停了下来?FIFO空了为何不会自动开始呢?
MDMA操作期间没有DMA中断发生,真是奇怪!明明允许DMA中断,至少512字节传送完毕应该有个中断吧?

超过最大包长度的DMA操作是否每包都要进行某种操作呢?
dfli
liulin
驱动牛犊
驱动牛犊
  • 注册日期2003-01-28
  • 最后登录2009-06-19
  • 粉丝0
  • 关注0
  • 积分2分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2004-11-21 13:54
你是外接的DMA控制器么?
metalwing
驱动中牛
驱动中牛
  • 注册日期2003-10-13
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分178分
  • 威望58点
  • 贡献值0点
  • 好评度17点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2004-11-21 09:55
你是用BULK传输的吗?BULK好象最大只能512吧,不记的了.
你在一个DMA传输完后看看DMA计数器里的数值是多少,是否还有余.
在DMA一次传完后要相应的写和读,不将BUFFER里的东西读完是不会再
往里边写的.
新手上路,请多关照.
游客

返回顶部