stm32DMA

源和目标地址必须按数据传输宽度对齐

支持循环的缓冲器管理

可编程的数据传输数目:最大为65536

每一个通道都有一组寄存器

DMA_CPARx、DMA_CMARx是没有差别的,它们都可以存放外设的地址、内存的地址。只是名字取的不一样而已。

DMA的工作特点:

DMA进行数据传输的必要条件:

1.剩余传输数据量大于0

2.DMA传输通道使能

3.通道上DMA数据传输有事件请求

  • 外设到xx方向的传输:
  •    假设是ADC到存储器的数据传输,显然是ADC的DMA传输的源地址是ADC的数据寄存器,并不是说只要DMA通道传输使能后,就立即进行数据传输。只有当一次ADC转化完成,ADC的DMA通道的传输时件才有效,DMA才会从ADC的数据寄存器读出数据,写入目的地址。当DMA在读取ADC的数据寄存器时,同时使ADC的DMA通道传输事件无效。显然,必须等到下一次ADC转换完成后,才能启动再一次的数据传输。
  • 存储器对xx的访问:
  •   因为数据是直接准备好的,不像ADC还需要等待数据到位。所以,不需要对应通道的事件。只要使能DMA数据传输就移植传输,直到达到设定的传输量。

当外设以DMA方式进行正在数据传输时,不可能再响应cpu的软件控制命令。

DMA传输对于高效能 嵌入式系统 算法和网络是很重要的

在实现DMA传输时,是由DMA控制器直接掌管总线,因此,存在这一个总线控制权的转移问题。

DMA的传输涉及到的几个基本的术语:

event:事件,触发控制器启动或停止DMA传输的操作

Transaction:事务,单子传输(最多可以到4个字节),由读和写组成

Cell transfer:元传输,单次共DCHXCSIZE个字节的数据传输,元传输由单个或多个事务组成。

Block tansfer:块传输,块传输总的字节数由DCHXSSIZ或DCHXDSIZ决定。块传输由单个或多个元传输组成。

事件是触发DMA控制器产生动作的方式,分为,START EVENT->启动传输,ABORT EVENT->取消传输,STOP EVENT->停止传输。

一般而言,DMA控制器包括一条地址总线,一条数据总线,和控制寄存器。

每个DMA控制器都有一组FIFO,起到DMA子系统和外设或存储器之间的缓冲器的作用。传输的源端和目标端都有一组FIFO存在。当资源紧张而不能完胜数据传输的话,则FIFO可以提供数据的暂存区,从而提高性能。

猜你喜欢

转载自www.cnblogs.com/zzm1/p/9694862.html