原创 PIC32 DMA工作原理简析

2010-2-16 23:06 7194 2 3 分类: MCU/ 嵌入式
DMA操作模式
    DMA用于无需CPU的介入而直接由专用控制器建立源与目的传输的应用,因此,在大量数据传输中解放了CPU。PIC32微控制器中的DMA可用于映射到内存空间中的不同外设,如从存储区到SPI,UART或I2C等设备。DMA特性详见器件参考手册,这里仅对一些基本原理与功能做一个简析。
    PIC32中DMA的传输涉及到几个基本的术语。
    Event:事件,触发控制器启动或停止DMA传输的操作;
    Transaction:事物,单字传输(最多可以到4个字节),由读/写组成;
    Cell transfer:元传输,单次共DCHXCSIZE个字节的数据传输。元传输由单个或多个事务组成。
    Block transfer:块传输,块传输总的字节数由DCHXSSIZ或DCHXDSIZ决定。块传输由单个或多个元传输组成。
    事件是触发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个字符,用户可以做如下配置。
    DCHXSSIZ配置为87字节(如果因为缓冲区溢出导致不期望情况出现,CPU会被中断,并做相应的处理);
    DCHXDSIZ设定为1个字节;
    目标地址写入Uart TXREG;
    DCHXDAT设定为匹配符0x00;
    CHSIRQ设定为UART 发送缓冲区空事件;
    SIRQEN设定为通道响应传输触发事件;
    设定DCHXSAD为源数据地址;
    使能CHEN通道;
    软件驱动DMA发起传输;
    UART发送缓冲区空会自动驱动DMA发起新一轮传输。
    传输模式三:通道链模式
    通道链模式用于两个具有联系功能的传输之间的耦合。通常一个为主通道(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,通道优先级别动作。
点击看大图
3、DMA传输中的字节对齐
    PIC32采用的数据总线是32位,4字节;无疑访问地址为4字节对齐的访问效率最高,但是,如果把所有的常量或变量存储地址都限制在4字节对齐显然是不可能的;DMA中在处理这个问题上采用的字节对齐方法(存储方式为LSB)。举例来说,如果当前物理地址与4的模为0,则取4字节;模为1,则取高3字节;模为2,则取高2字节;模为3,则取高1字节。
    物理地址为0x1230,模为0,则取从0x1230处4字节数据;
    物理地址为0x1231,模为1,则取从0x1231处3字节数据;
    物理地址为0x1232,模为2,则取从0x1232处2字节数据;
    物理地址为0x1233,模为3,则取从0x1233处1字节数据;
    读/写过程均采取相同的字节对齐机制。DMA传输中的字节对齐过程如图2.
点击看大图
    在本例中,源的基地址(存储在CHXSSA寄存器中,x代表通道)为0x1000,偏移量为9;目的的基地址(存储在CHXDSA寄存器中,x代表通道)为0x43F9,偏移量为11;传输数据量为9个字节
    从图中可以看出,偏移量的更新发生在写目的地址后。
    在Transaction 1中,要读取的数据地址为0x1009,与4的模为1,则从0x1009处读取高位3个字节的数据,即0x332211。而要写入的数据地址为0x440A,与4的模为2,因此3个数据中只能写入到0x440A起始地址处两个字节。写入后,偏移量更新(+2),剩下的一个字节再行写入。
    在Transaction 2中,要读取的数据地址为0x100C,与4的模为0,则从0x100C处读取4个字节的数据,即0x77665544。而要写入的数据地址为0x440D,与4的模为3,因此4个数据中只能写入到0x440D起始地址处3个字节。写入后,偏移量更新(+3),剩下的一个字节再行写入。
    在Transaction 3中,要读取的数据地址为0x1010,与4的模为0,则从0x1010处应读取2(共需传输9个字节,已经传输7个)个字节的数据,即0x9988。而要写入的数据地址为0x4411,与4的模为2,因此4个数据中只能写入到0x441起始地址处2个字节。写入后,偏移量更新(+2).



文章评论1条评论)

登录后参与讨论

用户377235 2013-1-28 21:16

你把手册的抄一遍干嘛?你这个呆逼

用户155195 2008-9-19 07:59

厉害!!

用户162720 2008-9-17 23:27

哈哈哈哈哈哈哈哈哈哈哈

用户656259 2008-9-9 12:51

haha

用户485340 2008-9-8 15:43

不错

jizzll_617398179 2008-9-8 00:26

嗯,我也要医药费,你的书,呵呵

sunke9_998892717 2008-9-5 21:17

哈哈........

用户461316 2008-9-4 18:54

这个好像在论坛上见过哦!!

用户1275742 2008-9-1 17:40

可以继续写下去!
相关推荐阅读
用户427513 2010-05-25 23:02
PIC32 Uart外设介绍
    PIC32 3-4系列微控制器集成了2个UART设备,而在5-7系列中则集成了多达6六个设备,减少了特定应用下功能扩展的必要,降低了系统设计的成本与复杂度,并且依靠高集成度提高了可靠性.   ...
用户427513 2010-05-04 22:51
ucos-ii for pic32的一点认识
    前些日子从某网站上下载了micrium公司在PIC32MX360平台下移植的uCOS-II操作系统代码,因对uCOS有一定兴趣,就对其中的部分代码做了一点程序设计总结,主要涉及到了了crt0....
用户427513 2010-01-26 19:30
PIC32 cache module功能原理的简单分析
    FLASH读取速度与CPU核的工作频率存在偏差,但基于FLASH的程序存储器又是大多数微控制器构成的一个部分.为了速率匹配,PIC32提供了访问FLASH等待周期的接口寄存器:CHECON,最...
用户427513 2010-01-21 10:30
32bit学习旅程的开始
    本人属于求知欲较强的那种,长时间从事8位单片机的工作,做了一点点事情(不算漂亮,只能说将就啦),厌倦了工具不能够成为利器,痴想搭上32位的列车。    经过磨蹭和准备,选定了pic32系列的单...
用户427513 2010-01-21 10:29
PIC32存储空间与链接器脚本文件小见
    PIC32MX采用了两种地址空间:虚拟和物理地址。两者的区分在于由CPU执行的程序凡涉及到对存储空间的访问都是虚拟地址,包括程序运行PC。涉及到DMA控制器、FLASH控制器对内存或外设的访问...
我要评论
1
2
关闭 站长推荐上一条 /2 下一条