DMA

DMA 控制器允许 Blackfin 或者外设指定数据传送操作,然后返回正常操作中。 DMA 控制器传送数据的过程独立于处理器的活动

DMA 控制器传送数据的方式有下面几种:

l  存储器 <-> 存储器 MemDMA );

l  存储器 <-> 串行外设接口;

l  存储器 <-> 串行接口;

l  存储器 <-> UART 口;

l  存储器 <-> USB 口;

DMA 系统有包括 DMA 控制器( MemDMA )在内的 8 DMA 兼容外设,图 5.1 12 个通道和总线控制器,其中 DMA 传送可以使基于描述符 的,也可以是基于自动缓冲 的。

 

DAB, DCB, DEB Master

默认仲裁优先级

PPI

0-highest

SPORT0 RCV DMA Controller

1

SPORT1 RCV DMA Controller

3

SPORT0 XMT DMA Controller

2

SPORT1 XMT DMA Controller

4

SPI DMA Controller

5

UART RCV Controller

6

UART XMT Controller

7

Memory DMA0(dest) Controller

8

Memory DMA0(source) Controller

9

Memory DMA1(dest) Controller

10

Memory DMA1(source) Controller

11-lowest

5.1 12 个通道和总线控制器

 

1 基于描述符的 DMA 传送

基于描述符的 DMA 传送是 Blackfin 控制 DMA 最普通的方法。使用该方法时, DMA 通道需要一组称为 DMA 描述符的参数,该参数存储在存储器中。每个描述符包含特定 DMA 传送序列所需要的所有信息,其组成结构如下:

(1)       要传送数据块的 32 位起始地址;

(2)       要传送的数据量

(3)       其他各种控制信息——如该 DMA 做什么,传送何时完成等配置信息;

(4)       指向下一个描述符的指针。

 

下面步骤是设置基于描述符的 DMA 的典型时序。在进行这些步骤之前,必须将描述符基地址( BASE+0 )的高 16 位设置到 DMA 描述符的基址指针寄存器( DMADBP )中。

 

(1)       DMA 配置字(其 15 位置为 1 ), DMA 传送计数, DMA 起始地址( 15:0 ), DMA 起始地址( 31:16 )以及下一个描述符指针( 15:0 ),写入描述符存储器地址 BASE+0~BASE+8 中。如果描述符是链表中的最后一个元素,或者是链表中的唯一元素,那么该描述符中的下一个描述符指针应该指向下一个存储单元,该存储单元的 15 位必全为零。基于上述要求,下一个描述符指针可以指向当前描述符的基地址 BASE+0 。在 DMA 传送序列完成之后, DMA 配置字的位 15 被清零。控制器返回给处理器。

(2)       将描述符基地址( BASE+0 )的低 16 位写到相应外设的下一个描述符寄存器中。

(3)       设置相应外设的 DMA 配置寄存器中 DMA 使能位。

(4)       仅在单个 DMA 传送序列或链表中的第一个 DMA 传送序列需要进行写操作。


 

 

5-2 设置基于描述符的 DMA 的典型时序

 

2 基于自动缓冲的 DMA 传送

基于自动缓冲的 DMA 操作,除了不需要存储器中的描述符外,与基于描述符的 DMA 相同。在自动缓冲模式中, DMA 控制器是可写的,并且可以被处理器直接编程以发起一个 DMA 传送过程。一旦传送完成,控制寄存器被他们的原始设置值重载,以备下一次传送。这将产生一个循环缓冲区,并且不断地传送数据,直到通过将外设 DMA 配置寄存器的 DMA 使能位清零,才被禁止。如果允许中断,在传送过程进行一半完成 时,将产生中断。

 

下面是设置基于自动缓冲 DMA 的典型步骤:

 

(1)       DMA 配置寄存器中的自动缓冲使能位置 1

(2)       初始化 DMA 传送计数器, DMA 起始地址高位寄存器, DMA 起始地址低位寄存器;

(3)       DMA 配置寄存器,对 DMA 传送进行设置,并将 DMA 使能位置 1. 这一部将启动基于自动缓冲的 DMA 的传送过程。

(4)       要停止 DMA 的传送,需要将寄存器中的 DMA 使能位清零,正在传送期间将位清零,不会像基于描述符的 DMA 那样引起 DMA 错误结束,一旦检测到 DMA 使能位被清零, DMA 传送寄存器 可以用来监视 DMA 传送状态。

 

3 存储器 DMA

       存储器 DMA MemeDMA )控制器提供在 Blackfin 存储空间中存储器对存储器的 DMA 数据传送。这些存储空间包括外设组件互连( PCI )地址空间、 L1 L2 以及外部的同步 & 异步存储器。

       MemDMA 控制器由两个通道组成。一个是源通道,用于读存储器,另一个是目的通道,用于写存储器。两个通道共享 一个可以存放 16 条记录的 32 FIFO 。源 DMA 通道写 FIFO ,目的 DMA 通道读 FIFO FIFO 深度大大改善了内部与外部存储器之间的数据传送流量。 FIFO 支持 8 位、 16 位和 32 位的传送。但是,在 8 位和 16 位传送中,仅使用 32 位数据总线的一部分,因此,这两种传送的流量要比 32 位的 DMA 操作低。

       MemDMA 控制器不支持基于自动缓冲的 DMA ,使用 MemDMA 控制器的传送必须是基于描述符的 DMA 。而且要有两个独立的描述符列链表,一个用于源 DMA 通道,另一个用于目的 DMA 通道。

       因为源 DMA 和目的 DMA 通道共享一个 FIFO 缓冲,两个描述符中的传送计数必须设置为相同值,数据尺寸也设置为相同值。

 

4 二维 DMA

Blackfin-533 支持二维 DMA 的传送操作,其相关寄存器和功能如下:

(1)       配置寄存器( DMAx-CONFIG_yy_CONFIG

设置二维 DMA 方式使能,中断产生的方式,其中中断可以在一行结束时产生,也可以在整个 DMA 结束时产生。

(2)       内层循环计数寄存器( DMAx_X_COUNT/MDMA-yy_X_COUNT

在二维 DMA 时保存二维 DMA 内层循环的数目(行数)必须大于等于 2

(3)       内层循环地址增量寄存器( DMAx_X_MODIFY/MDMA_yy_X_MODIFY

在二维 DMA 时保存每一次内层循环计数器加 1 DMA 操作(读或者写)地址在内存中的增量,此增量应该是二维 DMA 操作的数据单元长度的整数倍,比如二维 DMA 进行 16 位读 / 写,则此增量必须是 2 N 倍。

(4)       外层循环计数寄存器( DMAx_Y_COUNT/MDMA-yy_Y_COUNT

在二维 DMA 时保存二维 DMA 外层循环的数目(列数)。

(5)       外层循环地址增量寄存器( DMAx_Y_MODIFY/MDMA_yy_Y_MODFIY

在二维 DMA 时,保存每一外层循环计数器加 1 DMA 操作(读或者写)地址在内存中的增量,可以使负值,此增量应该是二维 DMA 操作的数据单元长度的整数倍。

 

参考书籍:《 ADI Blackfin 系列 DSP 处理器试验指导书》

 

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值