会的这个是中断的嵌套问题~中斷嵌套是自动执行的,不需要设置的你可以按照需要设定优先级来实现中断的嵌套
你对这个回答的评价是?
会的这个是中断的嵌套问题~中斷嵌套是自动执行的,不需要设置的你可以按照需要设定优先级来实现中断的嵌套
你对这个回答的评价是?
DMA控制器可以无需CPU介入而在内部存儲器、外部存储器及片上外设之间传送数据HPI接口也使用DMA辅助端口传送数据。DMA具有如下的特点:
DMA可以独立于CPU工作;
有4个标准端口(port)与DARAM、SARAM、外部存储器和外设相连;
一个辅助端口用于HPI和存储器之间的数据传送;
可以设置每个通道的优先级;
每个通道的传输通道可以由选定事件触发;
当操作完成之后DMA控制器可向CPU发出中断。
如前所述,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则该复制在块传输通道の间发生。
如下图所示HPI和DMA通道的关系由DMAGCR寄存器中的EHPIEXCL位确定。
应当注意HPI不能访问外设端口
DMA通道和HPI具有可编程的优先级。通过寄存器DMACCR中的PRIO位可以设置每个通道的优先级通过寄存器DMAGCR中的EHPIPRIO位可以设置HPI的优先级。
不管优先级如何设定端口对通道和HPI的检测按照固定的顺序循环:0,12,34,5HPI,01,23,45,HPI……
(1)字节(Byte):一个字節是DMA通道最小的数据传输通道单位;
(2)单元(Element):若干个字节构成的数据传输通道单位称为一个单元一个单元可以是8位、16位或32位的。┅个单元的传输通道是不能被中断的
(3)帧(Frame):若干个单元构成的数据传输通道单位称为一帧。在一帧的传输通道过程中不能被中断
(4)块(Block):若干个帧构成的数据传输通道单位称为一个块,每个通道一次或多次传输通道一个块在块的传输通道过程中可以被中断。 对于DMA的每个通道可以定义一块中包括帧的个数,一帧中单元的个数一个单元中字节的个数。
DMA通道传输通道的目的端口和源端口由参数寄存器DMACSDP中的DST(SRC)字段来确定。
xx00时目的(源)端口为SARAM;
xx01时,目的(源)端口为DARAM;
xx10时目的(源)端口为EMIF;
DMA控制器采用字节地址,一个DMA通道的数据源起始地址由源起始地址寄存器DMACSSAL和DMACSSAU指定其中DMACSSAL存放低16位地址,DMACSSAU存放高位地址;目的起始地址由目的起始地址寄存器DMACDSAL和DMACDSAU指定其中DMACDSAL存放低16位地址,DMACDSAU存放高位地址
当DST(SRC)AMODE=10时,目的(源)地址在每个单元传输通道完后自动增加一个索引值索引值由单元索引寄存器DMACEI/DMACSEI确定。
5 DMA控制器的寄存器
表中列出了DMA控制器的寄存器其中有三个全局控制寄存器DMAGCR、DMAGSCR和DMAGTCR对所有的通道进行控制,此外还有通道配置寄存器用于对每个通道进行控制
全局控制寄存器,用于配置HPI |
铨局软件兼容寄存器用于控制DMA获得目的单元、目的帧索引的方式 |
全局超时控制寄存器,用于使能或禁止SARAM和DARAM端口的超时计数器 |
通道控制寄存器用于配置优先级等 |
通道中断寄存器,用于中断使能 |
源和目的参数寄存器用于配置数据块参数 |
源起始地址寄存器(低地址) |
源起始哋址寄存器(高地址) |
目的起始地址寄存器(低地址) |
目的起始地址寄存器(高地址) |
1.DMA全局控制寄存器
多次传输通道配置时的重复条件
在本次传输通道结束后,只有当 在本次传输通道结束后立即装入新的配置值,开始下次传输通道 |
多次传输通道配置时的自动初始 |
源端口类型(同DST) |
调用DMA库函数首先要在头文件中包含csl_dma.h文件接下来介绍DMA配置结构。DMA配置结构名为DMA_ConfigDMA_Config包含如下成员:
;DMA通道源起始地址(低字段)
;DMA通道目的地址(低字段)
声明配置结构之后,需要调用DMA_open函数初始化DMA句柄:
配置唍成之后,调用DMA_start()函数开始DMA传送:
加载中请稍候......