关于plx9656使用中DMA块block传输与sg传输的理解
这2种传输模式都能同时启用dma0和dma1,唯一的区别就是sg可以链接
用户空间分配的诸多不连续物理内存页,block块是sg的一个特例而已,
这段时间一直困扰的问题:plx9656不能同时启动dma0和dma1传输,
的问题已经找到答案[luther.gliethttp],
原:dwritel(dma_cmd, plx9656_base + PLX_ADDR_DMA0_CMDSTS);
新:dwriteb(dma_cmd, plx9656_base + PLX_ADDR_DMA0_CMDSTS);
原:dwritel(dma_cmd, plx9656_base + PLX_ADDR_DMA1_CMDSTS);
新:dwriteb(dma_cmd, plx9656_base + PLX_ADDR_DMA1_CMDSTS);
原:dwritel(PLX_CMDSTS_CLRINT, plx9656_base + PLX_ADDR_DMA0_CMDSTS);
新:dwriteb(PLX_CMDSTS_CLRINT, plx9656_base + PLX_ADDR_DMA0_CMDSTS);
原:dwritel(PLX_CMDSTS_CLRINT, plx9656_base + PLX_ADDR_DMA1_CMDSTS);
新:dwriteb(PLX_CMDSTS_CLRINT, plx9656_base + PLX_ADDR_DMA1_CMDSTS);
所有对PLX_ADDR_DMA0_CMDSTS(0xA8)和PLX_ADDR_DMA1_CMDSTS(0xA9)
寄存器的操作地址宽度都改为单字节操作,以前的4字节操作导致0xA9被0xA8的高24位
数据填充为0,而对0xA9填充0,表示将pause DMA1的传输,直到写1才能恢复[luther.gliethttp]
阅读(3465) | 评论(0) | 转发(0) |