DMA
介绍DMA控制器的配置和dma-slave使用dma的方法
模块介绍
DMA(Direct Memory Access),是一种无需CPU直接控制传输,通过硬件为source和destination之间开辟一条传输数据的通路的方法。 本模块为DMA-controller,即DMAmaster,负责连接dma-channel和完成数据搬运。
功能介绍
通过DMA框架和K1 dma控制器驱动,实现了内存到内存,内存到外设,外设到内存三种传输方向。并实现了内存搬运,散列表传输和环形buffer的传输。
源码结构介绍
dma控制器驱动代码在drivers/dma目录下:
drivers/dma
|--dmaengine.c dmaengine.h #内核dma框架代码
|--dmatest.c #内核dma测试代码
|--mmp_pdma_k1x.c #k1 dma控制器驱动
关键特性
特性
支持内存到内存,内存到外设,外设到内存传输 16路channel可用 burst数支持8 16 32 64 每个传输描述符最大支持8191B传输
性能参数
dma进行内存到内存方向的数据搬运的极限速度为220MB/s
测试方法:可使用dmatest.c进行测试,具体工具使用方法见debug章节
配置介绍
主要包括驱动使能配置和dts配置
CONFIG配置
CONFIG_DMADEVICES 此为内核平台dma框架提供支持,支持k1 dma驱动情况下,应为Y
Symbol: DMADEVICES [=y]
Device Drivers
-> DMA Engine support (DMADEVICES [=y])
在支持平台层dma框架后,配置CONFIG_MMP_PDMA_SPACEMIT_K1X为Y,支持k1 dma控制器驱动
Symbol: MMP_PDMA_SPACEMIT_K1X [=y]
->Spacemit mmp_pdma support (MMP_PDMA_SPACEMIT_K1X [=y])
dts配置
dma的使用方法是选择一个通道并指定起始地址和目标地址,如内存到内存,内存到外设等。 故本节介绍使能dma控制器的dts配置和其他设备如uart使用dma时的dts配置