DMA相关知识汇总Word下载.docx

上传人:b****3 文档编号:7300771 上传时间:2023-05-08 格式:DOCX 页数:9 大小:40.59KB
下载 相关 举报
DMA相关知识汇总Word下载.docx_第1页
第1页 / 共9页
DMA相关知识汇总Word下载.docx_第2页
第2页 / 共9页
DMA相关知识汇总Word下载.docx_第3页
第3页 / 共9页
DMA相关知识汇总Word下载.docx_第4页
第4页 / 共9页
DMA相关知识汇总Word下载.docx_第5页
第5页 / 共9页
DMA相关知识汇总Word下载.docx_第6页
第6页 / 共9页
DMA相关知识汇总Word下载.docx_第7页
第7页 / 共9页
DMA相关知识汇总Word下载.docx_第8页
第8页 / 共9页
DMA相关知识汇总Word下载.docx_第9页
第9页 / 共9页
亲,该文档总共9页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

DMA相关知识汇总Word下载.docx

《DMA相关知识汇总Word下载.docx》由会员分享,可在线阅读,更多相关《DMA相关知识汇总Word下载.docx(9页珍藏版)》请在冰点文库上搜索。

DMA相关知识汇总Word下载.docx

●软件强制;

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会自动清除相应外设级的中断标志位,不用程序清除。

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 医药卫生 > 基础医学

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2