一乐电子

 找回密码
 请使用微信账号登录和注册会员

QQ登录

只需一步,快速开始

微信扫码登录

搜索
查看: 8908|回复: 0

DMA 内核

[复制链接]
发表于 2009-1-2 17:54 | 显示全部楼层 |阅读模式
DMA RCON + X6 b3 [5 \$ b9 ~
具有Avalon接口的直接存储器访问(DMA)控制器内核执行大块的数据传输, 从一个源地址范围读数据,写数据到不同的地址范围。Avalon主外设,如CPU,能够将存储器传输任务下放给DMA控制器。而DMA控制器执行存储器传输,主外设能够并行地执行其它的任务。 - Y+ [/ ~$ k" p" d* [! B
        DMA控制器尽可能高效地传输数据,以源存储器和目的存储器所能允许的最大的速率读和写数据。DMA控制器能够执行具有流控制的Avalon传输,使得它能自动地以外设允许的最大速率,向/从一个具有流控制的低速外设传输数据。DMA控制器在SOPC Builder提供,并且很容易集成到系统中去。 , C2 K4 K$ W' |0 v! b6 p7 ~
7.6.1 功能描述 , x$ `+ y2 }" V$ ?6 K3 w1 g8 @
        DMA控制器用于执行从源地址空间到目的地址空间的直接存储器访问数据传输。源和目的可以是Avalon从外设(即,固定的地址)或是存储器内的一段地址范围。DMA控制器可以同具有流控制的外设联合使用,可以进行有固定和可变长度的数据处理。当DMA传输结束,DMA控制器可以发一个中断请求信号。 DMA数据传输定义为一个或多个由DMA控制器内核发起的Avalon传输的序列。DMA控制器具有两个Avalon主端口:一个主读端口和一个主写端口,和一个Avalon从端口用于控制DMA,如图7-6所示。 2 D, g2 X% j2 X8 ^/ C% R
典型的DMA处理过程如下::
" ], ^! T) p; h# R: |# n1. CPU通过写控制端口来使DMA控制器为一次处理做好准备。
5 m7 k. T% B4 A& g8 F, x2. CPU使能DMA控制器。DMA控制器可以开始不受CPU的干预进行传输数据。DMA的主端口从源地址读数据,源地址可以是存储器或外设。主写端口写数据到目的地址,目的地址也是可以是存储器或外设。主读端口和主写端口之间有FIFO来缓存数据。 1 ^" R, o8 j+ T
3. 当传输了设定的数目比特(固定长度的DMA数据传输),或者end-of-packet信号被发送器或接收器置为有效(可变长度的DMA数据传输),DMA数据传输结束。 在DAM传输结束时,DMA控制器产生一个中断请求(如果CPU设置DMA控制器可以产生中断)。
3 n4 P6 [+ d; S! g4. 在DMA数据传输期间或之后,CPU可以判断一个DMA数据传输是否正在进行或已经完成,通过检查DMA控制器的状态寄存器。Avalon主外设通过控制端口写寄存器来建立和发起DMA传输。Avalon主外设设置DMA引擎使用字节对齐的地址。主外设配置如下的选项: 0 ~" [- h$ O: t

4 [5 U+ W5 d  U8 I  q
  • 读(源)地址位置
  • 写(目的)地址位置
  • 传输的宽度:Byte (8-bit)、半字 (16-bit)、字(32-bit)、双字 (64-bit) 或四字 (128-bit)
  • DMA传输完成后使能中断
  • 使能源或目的外设使用endofpacket信号来结束DMA传输。
  • 指定源或目的是外设还是存储器。
主外设然后设置控制寄存器的一位来发起DMA传输。DMA控制器通过主读端口从源地址读数据,然后通过主写端口写数据到目的地址。DMA控制器使用字节地址编程。读和写的起始地址应该和传输宽度对齐。例如,要传输数据字,如果 起始地址为0,地址应该增加到4、8和12。 对于具有很多不同宽度的从设备的系统,读和写主设备匹配的数据宽度为被读或写主外设寻址的从地址中最宽的数据宽度。对于突发传输,突发传输长度设置成DMA传输长度,突发计数端口则要经过单位的转换。例如,32-bit数据宽度的DMA字传输要传输64 bytes数据,长度寄存器则为64,突发计数端口 # z" Q4 U3 I" H
为16。如果64-bit数据宽度的DMA双字传输要传输8 bytes的数据,长度寄存器则为8,突发计数端口为1。在主读和写端口之间有短的FIFO缓冲,缺省长度为2,这样使得写的操作依赖于FIFO的dataavailable状态。而不是主读端口的状态。读和写主端口都能执行具有流控制的Avalon传输,这就允许从外设控制数据流和终止DMA数据传输。
. E! q; _, y% P* P# S" D+ v2 Y当访问存储器时,读(或写)地址根据数据的宽度,每次访问后,按照1、2、4、8或16增加。另一方面,典型的外设(如UART) 具有固定的寄存器地址,这种情况下,读/写地址在DMA传输期间保持不变。 2 [9 P) a0 X$ d' Q. l
地址增加的规则,按照优先级排列: / }( N, x2 ]4 P! u! l" z
  • 如果control寄存器的RCON (或 WCON) 位设置了,读(或写)的地址增量为0。 ) `% f, Q. Y7 k
    否则,读和写的地址增量值根据control寄存器设置的传输宽度来设置,如表7-11所示。
7.6.2 在 SOPC Builder 中实例化 DMA 内核
$ |, F0 j6 }; H" H- S# x9 ?$ L0 T  I$ z         设计者可以使用SOPC Builder中的MegaWizrd向导来加入和设置DMA内核。实例化DMA控制器会产生两个主端口和一个从端口。设计者需要指定哪个从外设能够被DMA内核的读和写主端口访问。同样,设计者必须指定哪个主外设能够访问DMA控制器的控制端口和发起DMA传输。DMA控制器不输出任何的信号给系统顶层模块。 4 E' s3 J0 ]% e6 s6 n
可配置的硬件选项如下:
2 f9 R- T  {/ C  y  y1. 基本的DMA参数
- R7 d5 o" @- e7 G" B: @a.DMA长度寄存器的宽度 , J" K4 b% L, p( x* e* h
        该选项设置DMA的传输长度寄存器的最小宽度。可接受的值为1~32。长度寄存器决定在一次DMA传输可能包含的最大的传输数。缺省情况,长度寄存器的宽度足以包含从外设的地址空间。如果DMA访问的只是数据外设,如UART,有必要修改长度寄存器的值,这种情况下,外设的地址范围很小,但是每一次的DMA传输可能会包含很多基本的传输。 ) B, m( C4 R! D, R
b.由寄存器构建FIFO与由存储器模块构建FIFO . }) `1 c( ?8 Z+ Y, T& z' Z
        该选项控制主读和写端口之间的FIFO缓冲器的实现。当Construct FIFO from Registers选中(缺省),FIFO的每一位由一个寄存器实现,这样当DMA控制器的数据宽度很大的时候,对逻辑的利用率有很大影响。当选中Construct FIFO from Memory Blocks,FIFO由FPGA中的嵌入式存储器模块实现。 ; M$ }1 p# X. i, u5 }( P1 G  n
2. 高级选项
; y) F& \" u3 f, S' ea.允许的传输
: M2 s8 B; Z. ^! v        设计可以选择DMA控制器支持的传输数据的宽度,下面的数据宽度选项可以使能或禁用。
8 x8 \+ S6 I5 m8 Q1 q, b
  • Byte
  • Halfword (two bytes)
  • Word (four bytes)
  • Doubleword (eight bytes)
  • Quadword (sixteen bytes)
禁用不必要的传输宽度减少DMA控制器对片上的逻辑资源使用,例如,如果一个系统具有16-bit和32-bit存储器,DMA控制器可能只传输数据给16-bit宽度的存储器,那么32-bit的传输可以禁用以节省逻辑资源。
7.6.3 软件编程 1 I- M# Y" [: i! ~# o. x  u# ~. a' Q
        对于Nios II处理器用户,Altera提供HAL系统库驱动程序,用户可以使用HAL API来访 问DMA控制器内核。 1 V; s: k6 a' q
1. HAL系统库支持 * L. U+ E, w9 O
        Altera提供的HAL设备驱动程序集成到了NIos II HAL系统库中。 HAL用户应该使用HALAPI来访问DMA控制器,而不是直接访问寄存器。 + H3 y7 |; y/ y9 z  _' _
HAL DMA驱动程序提供DMA过程的两端。驱动程序将其注册为接收通道(alt_dma_rxchan)和发送通道(alt_dma_txchan)。
# V$ ]7 |  N" W" ?! P+ b5 a' N        发送和接收通道的ioctl() 操作请求都做了定义,允许用户控制DMA控制器的硬件相关的方面。为接收器驱动和发送器驱动定义了两个ioctl()函数:alt_dma_rxchan_ioctl()和
" |1 c! \. W6 c. q" ~alt_dma_txchan_ioctl()。表7-12列出了可用的操作。
2. 软件文件 . Z# Z) J/ x. u" B2 t5 x
        Altera为DMA控制器提供了如下的软件文件,这些文件定义了访问硬件的底层接口,应用程序开发人员不应该修改这些文件。 altera_avalon_dma_regs.h——该文件定义了内核的寄存器映射,提供符号化的常数来访问底层硬件。文件中的符号只由设备驱动函数来使用。
$ W! a% P  X% z5 Caltera_avalon_dma.h和altera_avalon_dma.c——这些文件实现了HAL系统库的DMA控制器内核设备驱动程序。

本版积分规则

QQ|一淘宝店|手机版|商店|一乐电子 ( 粤ICP备09076165号 ) 公安备案粤公网安备 44522102000183号

GMT+8, 2025-8-20 12:02 , Processed in 0.035070 second(s), 18 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表