微处理器的DMA应用 | 您所在的位置:网站首页 › DMA的功能 › 微处理器的DMA应用 |
DMA 应用说明:
DMA 使用三态有限状态机进行数据搬运操作,三种状态如下
1.
初始态, DMA 等待 DMA 的请求(可以软件的请也可以为内部设备的请求,也可以外部的引脚请 求) ,如果有请求的话将进行状态 2 ,否则 DMA ACK 与 INT REQ 信号值为 0 即为空闲状态;
2.
同步加载状态, DMA ACK 变为 1 状态,初始计数值被加载到 CURR_TC 中;
3.
数据搬运状态, DMA 完成原子态的数据搬运初始化, 状态机完成从源中读取数据并写入到目标设 备地址中。 在 whole service mode 下操作直到 CURR_TC 递减为 0 时才会停止操作, 而 Single service mode 模式下将完成一个原子操作后就停止操作。其中 DMA ACK 的变化条件如下
a)
在 whole service mode 下,当 CURR_TC 值变为 0 时,
b)
在 single service mode 下,当一个原子操作完成后。
当上述两种情况出现时的 ACK 线的状态为 HIGH 即为 1 。
DMA 总结占用情况
每两连续的 DMA 原子传输操作,期间 DMA 均会释放一次总线,并重新申请总线的使用权,以防止 DMA 进行大数据量传输过程中,使 CPU 过长时间等待,而使程序进入一种不可控的饥饿状态。
DMA 请求与握手模式区别
1.
请求模式,在操作完成后,如果 DREQ 仍然有效的话,将会继续下次的操作;
2.
握手模式, 在操作完成后, 不管 DREQ 是否有效都将停止当前的操作等待下一次的 DREQ 请求操作。
该模式主要是控制 DMA 的传输启动条件,并不会影响具体的每次的传送数据流程。
DMA 的服务模式
1.
单次服务,每次有效的启动 DMA 传输操作,只完成一次的操作 unit 或 burst 4 操作后即停止,并 将 ACK 清零;
2.
完全服务,每次有效的启动 DMA 传输操作,将按 CURR_TC 设置的数据量完成一次完整的数据传 输操作,直到 CURR_TC 为 0 才停止本次操作。
该模式主控制每次有效的请求到来时 DMA 的具体的操作过程,即每次传输的数据的方法。
DMA 操作编程流程
DMA 的操作具体流程, 分为初始值的配置, 设置请求源, 设置源与目标地址及源与目标所在总线信息, 设置工作模式,与握手模式等信息。
1
配置 DMA 通道的工作属性
1.1
设备握手模式为 handshake 还是 Demand 模式
1.2
设置 DREQ 与 DACK 信号同步的时钟源为 PCLK 还是 HCLK 。
1.3
设置是否使有 DMA 的通道的相应的中断功能
1.4
设置操作的数据宽度及每个原子操作的单位是为 UNIT 模式还是 BURST 模式
1.5
设置 DMA 的服务模式为 SINGLE 还是 WHOLE 模式
1.6
设置 DMA 的请求源为软件还是硬件设备请求, 如果是硬件请求源, 还要确定外部源的类型
1.7
设置传送的总的原子数量
1.8
设备自动功能(启用自动操作时,当 ACK=1 , CURR_TC 为 0. 如果此时的模式为 DEMAND 的 话此会再次启动新一轮的操作,可以通过本功能完成一些设备的自动周期更新功能,如果 不使能的话,当 CURR_TC 为 0 时即本轮的操作彻底结束时,将不会将数据加载到相应的寄 存器中,而且当前 DMA 通道也处于关闭状态)
2
配置 DMA 操作的源与目标设备的地址,及源与目标设备的总线类型(是 APB 还是 AHB )
2.1
配置初始地址值
|
CopyRight 2018-2019 实验室设备网 版权所有 |