基于旗芯微FC4150系列的DMA模块介绍

目录

1.概述

1.1 旗芯微FC4150系列芯片DMA特征

1.2 总结

2.功能介绍

2.1 DMA初始化

1)通过配置CR寄存器来得到想要的配置

2)配置DCHPRIn寄存器来配置通道的固定优先级

3)配置EEI寄存器可选通道的使能错误中断

4)配置32字节的CFG寄存器来确定通道请求的服务

5)配置ERQ寄存器来选择通道是否由硬件触发

6)开始通道服务通过配置CFG_CSRn[START]或者硬件请求信号生成

2.2 流程框图

2.3 相关操作

2.3.1 单次请求

2.3.2 多次请求

2.4 DMAMUX

2.4.1 DMAMUX通道模式

2.4.2 DMAMUX配置请求源

2.5 通道触发

2.5.1 inner loop channel trig

2.5.2 out loop channel trig

3.MCAL配置介绍

3.1 EB参数配置介绍

3.2 应用层初始化配置介绍

3.2.1 DMA初始化

3.2.2 使能DMA通道中断

3.2.3 配置DMA通道

3.2.4 使能DMA通道


1.概述

DMA的中文名称是直接内存访问,它不需要CPU的参与,实现数据传输的技术(但是也会占用总线带宽,所以有时候使用DMA虽然会降低CPU负载,但提高访问数据速度并不高)。

1.1 旗芯微FC4150系列芯片DMA特征

·所有数据的传输都是从源地址写入到目标地址,源地址和目标地址以及传输大小都是可编程的

·支持不同地址模式并且支持源地址和目标地址不对齐模块

·通过配置传输配置模块(CFG)实现两层嵌套传输操作,通过定义 inner loop count来设置内部数据传输循环的次数,通过定义 outer loop count来设置外部数据传输循环的次数

·32字节的传输配置模块(CFG)存储在DMA外设的内部内存中为DMA的每个通道服务(即每个DMA通道具有32字节的CFG配置)

·支持三种方式激活DMA的通道

 直接通过软件初始化

 通过连续转换中的通道连接机制进行初始化

 每个通道一个外设请求的硬件机制

·支持通道固定优先级和通道轮询仲裁

·支持可编程的中断请求报告通道完成情况

每个通道都可以独立产生中断,可以在主循环计数完成(或者达到一半主循环完成次数)时产生断言

每个通道的可编程错误结果,被逻辑地加在一起形成一个中断控制器的错误中断

·支持前四个通道的周期性触发方式

·支持多达61个外设卡槽和两个常用卡槽路由到16个DMA通道上通过DMAMUX

·支持DMA ECC功能

1.2 总结

直接存储器访问(DMA)控制器模块,作为一个高度可编程的数据传输引擎,有能力执行复杂的数据传输,从主机处理器的干预最小。它可以灵活地传输数据。主要硬件微控制器构包括三个部分:

·一个DMA引擎,进行源地址和目的地址的计算,并进行从源地址到目的地址的数据移动。

·本地存储器包含16个通道中的每个通道的传输配置。在访问本地内存之前必须初始化。内存的取值范围从CFG_SADDRn到CFG_BLC_CHTRGENYESn (N: 0 ~ 15)。

·直接内存访问多路复用器(DMAMUX)将DMA源路由到16个DMA通道中的任何一个。

2.功能介绍

2.1 DMA初始化

1)通过配置CR寄存器来得到想要的配置

                                                                        图1

寄存器解读:

ACTIVE:   DMA激活状态位:

0:DMA处于空闲状态 

1:DMA处于激活状态,有通道在执行任务

CX: 取消传输位:

0:正常操作,不取消   

1:取消正在传输的DMA,内部循环传输被强制终止,该bit位在取消执行完成后自动清除,取消的作用就像通道正常完成内部转换后一样

ECX: 取消传输产生错误状态位:

0:正常操作,不取消   

1:和CX的区别是该位被置起后会产生错误状态更新到错误状态寄存器里面,如果使能了对应的中断会产生错误中断

EILM:使能内部循环映射:

0:失能内部循环映射,这会导致 DMA_CFG_NBYTES_MLNOn被定义为一个32bits的NBYTES表格,如下图2所示                           

 1:使能内部循环映射,这会使得DMA_CFG_NBYTES_MLOFFYESn被重新定义为一个包含独立使能,offset,以及 NBYTES的表格,如图3所示,细心的朋友会发现这两个表格寄存器的地址是重复的,偏移地址都是0x1008h,所以EILM是否使能决定了你应用哪个表格

                                                                    图2

                                                                    图3

CTM: 连续触发模式 :

0:失能连续触发模式,触发信号会进入通道仲裁来选择哪个通道工作

1:使能连续触发模式,当一个inner loop完成的时候,这时候不会再使用通道仲裁来选择通道,会直接触发通道本身

HALT:                         

0: 正常工作模式                 

1:停止一切新的通道开启,会让上一个通道数据传输完成,手动清0会再次恢复正常工作

HOE:

0:正常工作模式     

1:使能这个位的时候任何产生的错误都会让HALT置位

ERCA:

0: 使用固定通道优先级来仲裁通道   

1:使用轮询仲裁来选择通道

DBGS:

0:在debug模式的时候DMA保持工作 

1:在debug模式的时候会停止新的通道服务,之前的通道会继续执行完成,离开调试模式或者手动清除该bit位会恢复 

2)配置DCHPRIn寄存器来配置通道的固定优先级

                                                                         图4

如图4所示,每个通道(16个通道)都有对应的寄存器设置固定优先级,优先级最大可以设置到16,数值越大,优先级越高

3)配置EEI寄存器可选通道的使能错误中断

                                                                               图5

4)配置32字节的CFG寄存器来确定通道请求的服务

                                                                 图6

5)配置ERQ寄存器来选择通道是否由硬件触发

                                                                           图7

6)开始通道服务通过配置CFG_CSRn[START]或者硬件请求信号生成

2.2 流程框图

通道根据配置的CR[ERCA]bit位确定通道仲裁是固定通道优先级还是轮询仲裁来选择通道。DMA引擎读取整个CFG到所选通道的内部地址路径模块中。在内部总线上作为CFG初始化第一次传输,除非检测到通道配置错误。从源(由CFG_SADDRn定义)到目标(由CFG_DADDRn定义)的传输一直持续到传输CFG_NBYTESn定义的字节数为止。
传输完成后,DMA引擎的本地CFG_SADDRn、CFG_DADDRn和CFG_CLCn被写回主CFG内存并且内部循环通道触发中断(如果启用)。如果外部循环完成,则执行进一步的后处理,如外部循环通道触发中断(如果启用)。
下图解释了DMA请求在没有CPU干预的情况下启用一个内部循环传输的过程。DMA仲裁在每个内部循环之后发生,并且可以抢占内部循环。开始循环计数(BLC)设置外部循环中内部循环的数量。

                                                                 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值