嵌入式DMA寄存器介绍
(2009-10-28 9:53:25) [发送到微博]
DMA寄存器是主机控制DMA的窗口,包括控制状态寄存器、地址寄存器、字节寄存器、中断状态寄存器和中断屏蔽寄存器。描述符FIFO是一个32×256的FIFO,在链式DMA模式下可以暂存128组DMA的描述符。DMA状态机是控制PCI总线传输的核心,主模式下的DMA有主模式写和主模式读两种类型。主要模式写是把数据通道RAM里的数据包通过PCI总线传送到从设备,主模式读则读取设备的数据包传送到数据通道RAM中。深圳龙人嵌入式提供各种嵌入式开发方案,欢迎来电咨询。
一、DMA寄存器
DMA寄存器的地址直接映射到PCI的地址空间,其基地址由PCI Core中的配置寄存器Bar0决定。主机通过访问这些寄存器来控制DMA操作。
1、控制状态寄存器:主机通过寄存器配置DMA状态机,同时也可以获得当前数据传输的状态。
2、地址寄存器:保存PCI总线地址,即DMA传输的目标地址。当地址寄存器完成写操作,DMA状态机将被启动。
3、字节寄存器:其初始值为一次DMA传输数据的大小,PCI每传送一个数据,字节寄存器的值就减1,减到0则DMA停止传输。
4、中断状态寄存器:不主机提供PCI设备的中断状态。
5、中断屏蔽寄存器:可以屏蔽PCI设备的中断请求。
二、DMA状态机
1、空闲状态:状态机无数据传输时默认停留在这一状态。通过写DMA寄存器,可启动一次DMA传输。
2、装载寄存器状态:当链式传输时,时入装载寄存器状态。将描述符FIFO中的一组描述符装入字节寄存器和地址寄存器后,进入寄存器有效状态。
3、寄存器有效状态:DMA传输前,如果外部FIFO中的数据已经准备好,则进入等待请求状态。
4、等待请求状态:等待一个数据包从外部FIFO状入数据通道RAM,进入请求状态。
5、请求状态:申请PCI总线的控制权,进入等待允许状态。
6、等待允许状态:当PCI设备获得了总线的控制权,进入准备状态。
7、准备状态:当数据传输结束或者PCI总线终止传输,则进入结束状态;当PCI总线插入等待周期,则返回等待请求状态,重新申请总线的控制权;当PCI总线的地址期结束将要进入数据期,则进入传输状态。
8、传输状态:当数据传输结束或者PCI总线终止传输,则进入结束状态;当PCI总线插入等待周期,则返回等待请求状态,重新申请总线的控制权;当本次数据传输结束,便是本次链式DMA没有结束,则进入装载寄存器状态。
9、结束状态:一次DMA结束,或者一次链式DMA结束,状态机进入结束状态,同时发出中断信号。
10、错误状态:当PCI abort、PCI SYSTEM ERROR、PCI parity ERROR、FIFO full等错误出现时,状态机进入错误状态,同时发出中断信号。
三、DMA操作流程
链式DMA可以认为是一组DMA的串连,其中每一次DMA的数据包大小和目标地址可以不同,直到这一组DMA结束,发出一个中断信号。以主模式写为例,主机首先把多组字节寄存器和地址寄存器的值写入描述符FIFO,每一组字节寄存器和地址寄存器就是一个描述符;主机再写中断屏蔽寄存器和控制状态寄存器即启动了DMA状态机,开始链式的数据传输。与非链式DMA相比,链式DMA有更多的优点。