阅读:1863回复:6
ISP1581 MDMA 如何读出大于512字节的数据!
使用ISP1581 MDMA,读出512字节及以下的数据,正常;读出超过512字节的数据时,比如1024,2048,只能读出前512字节,何故?
该批量端点为双缓冲,且端点最大FIFO为1024; DMA传输计数器为1024或2048或4096; |
|
|
沙发#
发布于:2004-11-21 09:55
你是用BULK传输的吗?BULK好象最大只能512吧,不记的了.
你在一个DMA传输完后看看DMA计数器里的数值是多少,是否还有余. 在DMA一次传完后要相应的写和读,不将BUFFER里的东西读完是不会再 往里边写的. |
|
|
板凳#
发布于:2004-11-21 13:54
你是外接的DMA控制器么?
|
|
地板#
发布于: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操作是否每包都要进行某种操作呢? |
|
|
地下室#
发布于:2004-11-28 20:48
只有传输计数器为零时1581mdma方式才产生中断。1581的fifo空满是自动产生的,建议你看看你的固件程序和驱动程序中关于数据处理部分是否正确。
|
|
5楼#
发布于:2004-11-29 09:25
MDMA操作期间没有DMA中断发生,真是奇怪!明明允许DMA中断,至少512字节传送完毕应该有个中断吧?错了,是在DMA传输完成后产生中
断,即你的传输计数器减到0才产生. 给你个建议:先等待数据传输(TX?中断),来了后启动DMA传输.同时读 取该端点的BUFF(读到哪无所谓,只要反复的读),直到收到DMA中断. |
|
|
6楼#
发布于:2004-11-29 14:56
问题已经解决了,原来是驱动程序的问题。
在WinDriver下,可以连续读出4096字节,并且在4096字节传送完毕生成中断DMA_XFER_OK。 可能是原来的驱动程序有512字节的限制。 我用的是伊甸科技的驱动程序和应用程序及固件程序。 其应用程序读写板上的RAM,最多每次512字节;为读出更多字节,修改了512字节的限制,导致超过512字节的数据是垃圾数。 此时,读出传输计数器的内容,只与要求值减少了512字节,不为0,自然不会产生中断。 只是不知道如何修改驱动程序,取消512字节的限制。 另外,WinDriver设置块传输包最大值为64,是否是全速状态,板子上的高速灯也亮了,应该是高速状态,如何修改块传输包最大值为512? 我用的是WinDriver4.32 |
|
|