DMA操作模式

DMA用于无需CPU的介入而直接由专用控制器建立源与目的传输的应用,因此,在大量数据传输中解放了CPU。PIC32微控制器中的DMA可用于映射到内存空间中的不同外设,如从存储区到SPI,UART或I2C等设备。DMA特性详见器件参考手册,这里仅对一些基本原理与功能做一个简析。

PIC32中DMA的传输涉及到几个基本的术语。

事件是触发DMA控制器产生动作的方式,分为,START EVENT->启动传输;ABORT EVENT->取消传输;STOP EVENT->停止传输;为了有一个完整的概念认识,可以把用户软件的操作,如置位启动传输位等也包含在事件范围内。由此,可以看处,任何一个DMA动作都是由事件触发完成的。用户在使用DMA控制器时只需设计好事件与DMA操作的关联即可。要充分的使用DMA控制器,熟悉DMA各种工作模式的原理是很有必要的。

PIC32的手册列举了5中模式,然而这5种模式并不是互斥的。为了解决不同的问题,可以将几种模式综合起来使用。

传输模式一:基本操作模式。

起始事件触发启动DMA;如有ABORT事件发生,则传输取消,源和目的指针复位;Cell Transfer事件发生,等待下一次Cell Transfer(前提是本次Block transfer没有结束)触发DMA;Block transfer结束,则传输停止(如果CHAEN没有使能);如果字符匹配使能的话,则发生字符匹配事件也会停止传输。

传输模式二:字符匹配终止模式

字符匹配模式用于传输不定长字节,而又有传输终止标识字节的应用环境中,Uart是这种模式的应用案例。举例如下。假设某系统有一串字符消息发送到外部主机,最大的信息长度为86个字符,用户可以做如下配置。

传输模式三:通道链模式

通道链模式用于两个具有联系功能的传输之间的耦合。通常一个为主通道(Master Channel),一个为从通道(Slave Channel)。两个通道肯定为优先级相邻的,即优先级0和1或1和2或2和3组成主从通道。在初始化操作中,从通道处于禁能状态下;主通道块传输完成后,产生 Channel Chain Event,触发从通道处于使能状态;DMA模块的通道具有侦听事件的能力,即使通道禁能,当CHAED置1时,通道仍旧能监听到事件,虽然不会做出反应(如果在chain模式下且监听事件相同,例如,都是监听A/D转换结束,主通道的最后一个动作会与从通道的第一个动作相同,即主从通道都将从AD中获取同一次采样的数据)。如果CHAED置0,则仅当模块使能时,事件才有意义。如果主从通道激励事件不一致,CHAED可置1,否则,要置0。

DMA通道的自动使能模式

DMA每个通道在正常的块传输、终结字符匹配后或者因异常ABORT后,通道自动禁能。如果该通道有多次的块传输,需要手动的使能通道;为了省却该操作,DCHXCON寄存器提供了允许自动使能通道的位CHAEN(channel auto enable)。通道使能位CHEN在取消传输或ABORT事件发生时会被置为0。

注: 1、通道起始/终止/停止中断事件独立于中断控制器,因此相应的中断无需使能,也无需在DMA传输后清除相应的位; 2、通道优先级和选择

DMA控制器每个通道有一个自然的优先级,CH0默认为最高,CH4默认为最低;通道寄存器DCHXCON中提供了修改优先级的控制位。优先级控制了通道的传输顺序。

具有最高优先级的通道往往优先占用资源完成Cell传输(前提是没有接着发生发起Cell transfer的事件);如果多个通道被设定为相同的优先级,控制器会在这个级别上平均分配总线访问资源;较高优先级别的通道在请求传输时,如果有较低先级别的通道在使用DMA通道,则会将本次传输完成,然后再切换。见图1,通道优先级别动作。