我们有个外部ADC采样的DMA传输,需要在Linux下用dmaengine API实现
大概目标是:
源数据来自GPMC,可看做是一个ADC[8]数组
目标数据是内存,可看做是RES[8][xxx]的二维数组
每次外部GPIO中断时,需要触发DMA进行一次数据搬运,将GPMC上连续的8个地址分散存储在RES[0][n] … RES[7][n]的位置上
连续xxx次GPIO事件后完成整个DMA传输,触发DMA完成中断
在DSP及其他系统上,我们通过直接操作裸的PaRAM寄存器可以实现这个功能
但是在Linux下,我们希望能充分利用dmaengine原生的API,能否实现这种效果呢?
我大概是考虑scatter/gether的方式,但没找到一个简单的例子,还是没有头绪
能否指教一下?
谢谢
DachuanLiu:
还有就是,用GPIO触发DMA,每触发一次,都需要向GPIO_EOI寄存器写0才能发送下一个dma请求。我们希望在一次gpio dma request能完成8次gpmc的数据传输再额外链接一个向GPIO_EOI寄存器写0的操作,这种chain的操作能通过dmaengine的api实现么?