DMA相关知识汇总.docx
- 文档编号:11164088
- 上传时间:2023-02-25
- 格式:DOCX
- 页数:9
- 大小:40.59KB
DMA相关知识汇总.docx
《DMA相关知识汇总.docx》由会员分享,可在线阅读,更多相关《DMA相关知识汇总.docx(9页珍藏版)》请在冰豆网上搜索。
DMA相关知识汇总
DMA相关知识
直接存储器访问(DMA)模块是一种不需要CPU干涉而实现外设与内存之间的数据交换的方式。
直接存储器访问就是用硬件实现存储器与存储器之间,存储器与I/O口设备之间进行高速数据传送,极大的提高了批量数据的传送速度。
实现DMA传送的关键部位是DMA控制器(DMAC)。
DMAC和CPU都可以控制系统总线,从而控制总线的发送信息。
但是同一时刻,系统总线只能接受一个部件的控制。
由这两个部件之间的“联络信号”控制实现的。
DMA传送期间,CPU让出总线控制权,这可能影响诸如中断请求的及时响应和处理,同时DMA传送方式的高速度是以增加系统的复杂性和成本为代价的。
DMA模块的核心其实是一个与地址控制逻辑紧密关联的状态机,在数据传输过程中让数据块自动的重新配置,就好像两个缓冲器之间打乒乓球一样,我们把这种机制也叫作DMA的乒乓机制。
一.DMA主要特征如下:
1.具有独立中断控制6路DMA通道。
2.可作为DMA传送的触发信号有:
●ADC序列发生器1和序列发生器2;
●多路缓冲器串口McBSPA和McBSPB的发送和接收;
●XINT1~7和XINT13;
●CPU定时器;
●ePWM1~6,ADCSOCA和ADCSOCB信号;
●软件强制;
3.数据源及目标:
●L4~L716K×16位SARAM;
●所有XINTF区域;
●ADC存储器;
●McBSP-A和McBSP-B发送及接收数据缓冲器;
●ePWM1~6/HRPWM1~6处在外射单元3的寄存器。
4.字长:
16位或32位;
5.流量:
4周期每字;
二.DMA传送过程大致有以下几个步骤:
1.当外设输入数据准备好,外设向DMA发出一个选通信号,将数据送到数据端口;向DMA发出请求;
2.DMA控制器向CPU发出总线请求信号(HOLD)高电平;
3.CPU在现行总线周期结束后响应,向DMA发出响应信号(HLDA)高电平。
4.CPU待该总线周期结束时,放弃对总线控制,DMA控制器接管三态总线,接口将数据送上数据总线,并撤销DMA请求。
5.内存收到数据以后,给DMA一个回答,于是DMA修改地址指针,改变传送字节数,检查传送是否结束,没有结束,下次接口准备好数据,再进行一次新的传输。
6.当计数值为0,DMA传输过程便告结束。
DMA控制器撤销总线请求(HOLD变低),在下一个时钟周期上升沿使总线响应HLDA变低,DMA释放总线,CPU取得总线控制权。
三.F28335的DMA模块的触发机制
在外设中断触发的时候,首先通过各自通道的模式寄存器(MODE.CHX)的外设中断触发源的选择位(MODE.CHX(PERINTSEL))来选择触发源,,有效的中断触发后,控制寄存器的外设中断触发标志位(PERINTFLG)会被置位,如果相应DMA通道的模式寄存器中的外设中断允许位(MODE.CHX.[PERINTE])是使能的,并且控制寄存器中运行状态位(CONTROL.CHx[RUNSTS])是允许的,该DMA通道就能响应数据传输服务了,在接收完一个外设中断触发信号后,DMA会自动的发一个清除信号给中断源,这样后续的中断事件就会接着响应。
四.F28335的DMA模块的流水线机制
DMA进行数据传输时采用4级流水线,将数据传输主要分成如下工序:
产生数据源地址,输出数据源地址,读数据源数据,产生目的源地址,输出目的源地址,写目的源数据;例外情况:
1.当将McBSP作为数据源时,读取McBSPDDR寄存器的值时,会拖延DMA一个时钟周期
2.在每次数据传输之前要增加一个周期的延迟;
3.当从CH1高优先级中断返回时也会周期延迟;
4.32位传输速度是16位传输速度的两倍,传输一个32位的字与传输一个16位的字所花的时间是一样的;
5.与CPU的冲突可能增加延迟时间。
四.通道优先级
1.六个DMA通道具有2种优先级方案:
循环优先级和CH1高级优先级方案。
●循环优先方案
在此模式下所有DMA通道具有相同的优先级,且被使能的DMA通道以如下循环顺序进行访问:
CH1→CH2→CH3→CH4→CH5→CH6→CH1…。
在这种情况下,当一个通道完成一次突发传送,转而执行下一个通道,用户可以为每个通道设定每次突发传送的数据大小,一旦CH6被执行完,如果没有其他被挂起的DMA通道,那么进入空闲状态。
在空闲状态下,CH1(如果使能)将首先被执行,然而如果此时正在执行通道X,那么通道X到通道6之间被挂起的通道将先于CH1被执行,即将所有的通道具有相同的优先级。
另外,通过DMACTL[PRIORITYRESET]位可将循环状态机复位到空闲状态。
●CH1高优先级方案
在此模式下,CH1通道具有最高优先级,一旦CH1触发到来,其他通道完成当前字节传送后(一次突发传送未完成),此通道的执行被终止,CH1通道被执行,CH1执行完成后继而执行刚才中断的通道。
此模式下CH1具有最高的优先级,而其他通道仍遵循循环优先级方案:
高优先级:
CH1
低优先级:
CH2→CH3→CH4→CH5→CH6→CH1…
五.地址指针及发送控制
DMA模块的内部状态机是两级嵌套的循环解构,当一个外部设备的中断触发信号到来时,内部循环开始一次突发传送。
一次突发传送被定义为一次传送的最小单位,可通过BURST_SIZE(内部循环次数),寄存器为每个通道设定突发传送的数据量。
在突发传送开始前,BURST_SIZE的值被加载到BURES_COUNT寄存器中,每次完成一个字的传送,BURES_COUNT减1,直到归零时表明本次突发传送结束。
BURST_SIZE允许在一次突发传送中最多传送32个16位的字。
可通过TRANSFER_SIZE(外部循环次数)寄存器可设置每个外环的尺寸,并且定义在一次传送过程中突发传送的循环次数,由于TRANSFER_SIZE是一个16位的寄存器,所以在一次传送过程中总数据量可满足任何传送要求。
在每次传送的开始和结尾,可以产生一次CPU中断,这是由MODE.CHx[CHINTMODE]位决定的。
在MODE.CHx[CHINTMODE]位默认设置下,DMA在一次外设中断触发下仅产生一次突发传送。
当此次突发传送结束后,及时当前通道的触发信号再次到来,状态机也将根据优先级顺序移动到下一个通道,这样可防止一个通道独占DMA总线。
如果所要传输的数据一次突发传送无法完成,则通过设置MODE.CHx[ONESHOP]位来完成整个传输过程,不过,在此模式下会导致一次触发事件会占用绝大部分的DMA带宽。
六.DMA传输配置
1.数据传输单位。
(1)字节(Byte):
一个字节是DMA通道最小的数据传输单位;
(2)单元(Element):
若干个字节构成的数据传输单位称为一个单元,一个单元可以是8位、16位或32位的。
一个单元的传输是不能被中断的。
(3)帧(Frame):
若干个单元构成的数据传输单位称为一帧。
在一帧的传输过程中不能被中断。
(4)块(Block):
若干个帧构成的数据传输单位称为一个块,每个通道一次或多次传输一个块。
在块的传输过程中可以被中断。
对于DMA的每个通道,可以定义一块中包括帧的个数,一帧中单元的个数,一个单元中字节的个数。
2.数据打包
DMA控制器具有数据打包功能,比如选择8比特的数据传输而目的端口是32位的数据总线,可以将4个8比特的数据片打包成一个32比特的数据包进行传输,这样会提高DMA的传输速率。
DMA控制器的数据打包功能通过参数寄存器DMACSDP中的DST(SRC)PACK字段设定。
当DST(SRC)PACK=0时,不打包;
当DST(SRC)PACK=1时,对数据打包后再传输。
3.端口
DMA通道传输的目的端口和源端口由参数寄存器DMACSDP中的DST(SRC)字段来确定。
当DST(SRC)=xx00时,目的(源)端口为SARAM;
当DST(SRC)=xx01时,目的(源)端口为DARAM;
当DST(SRC)=xx10时,目的(源)端口为EMIF;
当DST(SRC)=xx11时,目的(源)端口为Peripheral。
4.数据源和目的地址
DMA控制器采用字节地址,一个DMA通道的数据源起始地址由源起始地址寄存器DMACSSAL和DMACSSAU指定,其中DMACSSAL存放低16位地址,DMACSSAU存放高位地址;目的起始地址由目的起始地址寄存器DMACDSAL和DMACDSAU指定,其中DMACDSAL存放低16位地址,DMACDSAU存放高位地址。
DMA通道在数据传输过程中的地址修改方式由DMACCR寄存器中的DST(SRC)AMODE字段确定。
当DST(SRC)AMODE=00时,目的(源)地址为固定地址,用于单元的传输;
当DST(SRC)AMODE=01时,目的(源)地址在每个单元传输完后自动增加。
根据数据的位数是8位、16位还是32位,地址分别增加1、2或4。
当DST(SRC)AMODE=10时,目的(源)地址在每个单元传输完后自动增加一个索引值,索引值由单元索引寄存器DMACEI/DMACSEI确定。
当DST(SRC)AMODE=11时,目的(源)地址在每个单元传输完后按单元索引和帧索引自动增加,索引值由单元索引寄存器DMACEI/DMACSEI和帧索引寄存器DMACFI/DMACSFI确定,又称为双索引。
七.通道和端口
DMA控制器有6个通道,用于4个标准端口之间的数据传送,每个通道可以从某个端口读取数据,也可以将数据写入某个端口。
每个通道有一个FIFO缓冲区。
如图所示,使数据的传输包括两个阶段:
端口读取和端口写入。
DMA先从源端口读取数据,并将其放到通道的FIFO缓冲区里,然后再从FIFO缓冲区取出写入目的端口。
DMA控制器的寄存器有两套:
一套是配置寄存器,供CPU写入所需的配置值;另一套是工作寄存器,供DMA工作时使用。
所以,DMA通道正在进行数据传输时,CPU可以写入下次传输的配置参数,而不影响正在进行的传输。
但是,寄存器DMACSDP,DMACCR,DMACICR,DMACSR,DMAGCR,DMAGSCR,和DMAGTCR不能使用这种方式配置。
传输数据时,配置寄存器的内容复制到工作寄存器,DMA控制器则使用工作寄存器的值来控制通道的工作。
只要使能DMACCR的en=1,就进行上述复制。
如果使用自动初始化模式DMACCR里的AUTOINIT=1,则该复制在块传输之间发生。
八.DMA源/目标地址改变的步长
1.源/目标突发传送步长SCR/DST_BURST_STEP。
每次突发传送,源地址及目标地址的增量步长由此寄存器设定。
寄存器中的值有符号二进制形式,地址按要求增加或减少。
倘若不要求增量步进,设置次寄存器为0。
(如访问McBSP)
2.源/目标传送步长SRC/DST_TLTRANSFER_STEP.定义了在当前突发传送完成后,下一个突发传送的地址偏移量。
当访问的寄存器或内存单元存在固定的地址间隔,可使用此功能。
3.源/目标返回步长SRC/DST_WRAP_STEP。
当返回计数器归零时,此寄存器定义了BEG_ADDR指针增加或减少字的个数,从而设定新的地址。
九.DMA两级循环状态机的运行模式:
1.单次触发模式(ONESHOT).在一次外设中断触发信号到来时,如果使能单次触发模式,则在TRANSFER_COUNT归零前DMA将连续执行突发传送,如果单次触发模式被禁止,则每次突发传送过程都要由中断触发信号进行触发,直到TRANSFER_COUNT归零。
2.连续触发模式(CONTINUOUS)。
如果连续触发模式被禁止,那么在传送结束后将CONTROL寄存器中的RUNSTS位清零,禁止DMA通道工作。
如果要在此通道发起又一次传送过程,则首先要将CONTROL寄存器的RUN位置1,以重新启动通道,如果连续触发模式被使能,则RUNSTS位在每次传送结束不会被清除。
3.通道中断模式。
用来定义DMA中是在传送开始时发生还是在传送结束时发生。
如果要用连续模式实现“乒—乓”操作,则中断应在传送开始时发生;如果DMA没有工作在连续模式,则中断通常在传送结束时发生。
十.DMA相关函数配置
voidDMACH1AddrConfig(volatileUint16*DMA_Dest,volatileUint16*DMA_Source)
源地址有两个,一个A为用于传输时(随每个字节递增),另一个B作为返回的备份(当一帧结束后,重新装载入A),目的地址有两个,一个A为用于传输时(随每个字节递增),另一个B作为返回的备份(当一帧结束后,重新装载入A)每次启动DMA相应通道,都会把B装载入A
voidDMACH1BurstConfig(Uint16bsize,int16srcbstep,int16desbstep)
Bsize:
每一个脉冲传递的字的个数,实际脉冲数为bsize+1
Srcbstep:
每传递一个字后,源地址A增量
Desbstep:
每传递一个字后,目的地址A增量
voidDMACH1TransferConfig(Uint16tsize,int16srctstep,int16deststep)
Tsize:
每一帧的脉冲个数,脉冲递减到0时(即一帧传递完成,也是DMA传递完成),产生DMA中断。
实际帧数为tsize+1
Srctstep:
每个脉冲的最后一个字传递结束后,源地址A增量
Deststep:
每个脉冲的最后一个字传递结束后,目的地址A增量
voidDMACH1WrapConfig(Uint16srcwsize,int16srcwstep,Uint16deswsize,int16deswstep)
Srcwsize:
当已经传递的脉冲数为srcwsize+1的整数倍时,源地址(B)增加srcwstep(常为0),并装载入源地址A
Deswsize:
当已经传递的脉冲数为deswsize+1的整数倍时,目的地址(B)增加deswstep(常为0),并装载入目的地址A
voidDMACH1ModeConfig(Uint16persel,Uint16perinte,Uint16oneshot,Uint16cont,Uint16synce,Uint16syncsel,Uint16ovrinte,Uint16datasize,Uint16chintmode,Uint16chinte)
Persel:
选择触发DMA的外设中断源
Perinte:
外设中断使能,
Oneshot:
使能时,外设产生一次中断,就能够把一帧传递完。
禁止,外设产生一次中断,只能传递一个脉冲
Cont:
使能时,每次DMA结束后,需要再次启动DMA时,就不需要调用voidStartDMACH1(void)。
禁止时,重启DMA,需要调用voidStartDMACH1(void)
Datasize:
设置每个字是16位或者32位
Chintmode:
设置DMA中断是在DMA启动或者结束时产生
Chinte:
DMA相应通道的中断使能(外设级)。
注:
Perinte和Chinte同时使能时,才能进入DMA通道中断,仅Perinte使能,可以传输数据,但是不进入通道的中断程序
voidStartDMACH1(void)
首次启动DMA,若Cont为禁止,每次DMA结束后,需要再次启动DMA时需要调用,只开启相应用于触发的外设级中断,不开启PIE对应位,则能够触发DMA而不触发CPU的中断程序,经过DMACH1ModeConfig配置的中断,DMA会自动清除相应外设级的中断标志位,不用程序清除。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- DMA 相关 知识 汇总