DMA
可实现内存到内存、内存到外设、外设到内存的数据传输,传输过程由DMA控制器完成,无需
处理器干预。内存指的是单片机上的ram或者rom空间,外设指的是soc上的串口控制器、定时器
等功能模块。在对ram操作时ram对应的地址自动增加,外设地址一般是控制器的一个读或者写的
寄存器地址。内存到内存传输模式数据传输过程,选择好通道并正常配置后,通道优先级为最高
状态时,DMA控制器将自动将数据从源地址拷贝到目的地址,操作完成后通道将关闭。每次传输
完成后DMA通道将自动关闭,下次使用时需要从新选择以及配置通道。
DMA 相关术语
DMA request signals
外设使用请求信号indicate是否有数据需要进行传输。SREQ、BREQ、LBREQ、LSREQ.
DMA response signals
用于indicate a complete packet has been transferred。
CLR:DMA主机告诉从机已经收到 request signal。
TC: DMA主机告诉从机已经完成数据发送。
DMA Enable Channel Register
指示通道是否已经使能,传输完成后使能位自动清零。
DMA Software Burst Request register
软件触发 Burst Request,也可由外设主动触发请求,两种请求不能同时使用。
DMA Channel registers
SRCADDR DESTADDR LLI CONTROL CONFIG,执行scatter/gather DMA,前四个寄存器自动更新。
DMA 操作示例
使用nxp官方驱动库。
/* Initialize GPDMA controller */
Chip_GPDMA_Init(LPC_GPDMA);
/* Get DMA channel */
dmaCh = Chip_GPDMA_GetFreeChannel(LPC_GPDMA, GPDMA_CONN_MAT0_0);
/* Setup DMA transfer */ //每次transfer完成后,下次传输还需要调用transfer接口
Chip_GPDMA_Transfer(LPC_GPDMA, dmaCh,
(uint32_t) &source[0], (uint32_t) &dest[0],/*GPDMA_CONN_MAT0_0, //*///源地址以及目的地址设置
GPDMA_TRANSFERTYPE_M2M_CONTROLLER_DMA, //内存到内存传输
sizeof(source));//发送数据长度。