DMA简介
DMA控制器的作用不仅在增强系统性能并减少处理器的中断生成,而且还针对32位MCU应用程序专门优化设计。DMA控制器为存储器到存储器,存储器到外设和外设到存储器的传输提供了7个通道。每个通道都支持外设的DMA请求映射到任意通道上。图1. DMA控制器架构
DMAMUX简介
对于如何将外设的DMA请求映射到任意的数据流通道上,就需要使用到DMAMUX。DMAMUX针对每个外设都设计了独有的ID号,使用者只需要将此ID号写入对应的寄存器中并打开DMAMUX功能即可。DMAMUX的引入,使得DMA相较于传统DMA控制器变得更加灵活,使用者可以随意的分配7个通道的使用情况,不必再纠结与某个IP的DMA请求只能固定使用在某个或某几个通道上。各IP对应ID号如下表:表1. 各IP对应ID号列表注:表格中“DMAMUX请求”为ID号;“来源”为各IP的DMA请求。
DMA功能解析
可编程数据宽度
DMA控制器的通道可支持传输不同数据宽度,byte/halfword/word。通过DMA_CxCTRL中的PWIDTH和MWIDTH位可以对源数据和目标数据的数据宽度进行编程,通常情况下需要设置PWIDTH和MWIDTH位相等,当PWIDTH不等于MWIDTH时,会依据PWIDTH/MWIDTH设定将资料对齐。图2. PWIDTH:byte, MWIDTH: half-word图3. PWIDTH: half-word, MWIDTH: word
配置DMAMUX
在M2P与P2M模式下,必须配置DMAMUX,否则DMA不会响应外设DMA请求。DMAMUX的作用是为外设的DMA请求复用通道,即任何一个外设的DMA请求可以映射到DMA1/DMA2的任意通道,这大大增加了DMA通道分配的灵活性。配置DMAMUX比较简单,只需调用专门提供的两个接口函数即可:
配置请求生成器模块
在配置了DMAMUX时,可选择配置DMA请求生成器模块,模块一共有4个请求生成器通道。此模块无需任何传统外设(如TIMER、SPI等)提供DMA请求,可通过外部EXINT输入作为DMA请求源输入。配置请求生成器模块较为简单,只需调用专门提供的接口函数即可:
配置请求同步模块
在配置了DMAMUX时,可选择配置DMA同步模块,模块一共有7个同步通道。使能此功能后,当外设产生DMA请求时,DMA不会马上响应并传输数据,而是要等待同步信号的到来,当接收到同步信号后,DMA才会根据配置传输数据;同步信号可由外部EXINT输入提供配置同步模块较为简单,只需调用专门提供的接口函数即可:
DMA配置解析
以下对DMA的配置接口及流程进行说明。
函数接口
表2. 通道配置函数列表
数据流配置
数据流配置(CxCTRL寄存器)
包含通道优先级,数据传输的方向、宽度、地址增量模式、循环模式和中断方式。
优先级(CHPL)
分为4个等级,最高优先级、高优先级、中等优先级和低优先级。
若有2个流优先级设定相同,则较低编号的流有较高的优先权。举例,流1优先于流2。
配置流程
全部0条评论
快来发表一下你的评论吧 !