现有一块开发板,上面有一个FPGA,FPGA中有一个FIFO,现在采用DMA把FIFO中的数据传输到内存中。现用工具是DS。假如FIFO为1K大小,我现在有2.6K的数据陆续传到FIFO中,然后DMA到物理内存中。
开发板提供了一段代码,在StartDMA例程中有这两句:m_IoPortRange0.outd(0x8,PAddress);(写dma传送首地址)和m_IoPortRange0.outd(0xc,NBytes);(写dma传送字节数),写完这两句就自动把FIFO中的数据传到PAddress指定的物理内存中了。然后在OnDmaReady例程中有if(pXfer->BytesRemaining() == 0)一句话,就是判断还有没有剩余的字节要传送,我的问题是这里的“剩余的字节”是指什么,指的是FIFO中还有没有剩余的字节,还是我要传送的那2.6K字节有没有剩余?还是别的什么意思?
另外NBytes是传输的字节数,在武安河的DMA例子中也有,但是我不知道这个大小是怎么确定的?能不能改呢?
谢谢!!!
我没有用过这颗ic。但是一般的dma都会有一个判断是否完成数据传输的flag。剩余的应该是还没有传输完成的。 NBbtyes一般是可以修改的,就是你一次通过dma传输的byte数
pXfer->BytesRemaining()
是我要传送的那2.6K字节有没有剩余。
这个涉及到DMA传输分片的问题。如果数据大小超过了一个PAGE,需要分多次进行传输。
PS:使用物理连续内存可以避免多次。