控制/MCU
DMA既可以指内存和外设直接存取数据这种内存访问的计算机技术,又可以指实现该技术的硬件模块(对于通用计算机PC而言,DMA控制逻辑由CPU和DMA控制接口逻辑芯片共同组成,嵌入式系统的DMA控制器内建在处理器芯片内部,一般称为DMA控制器,DMAC)。
值得注意的是,通常只有数据流量较大(kBps或者更高)的外设才需要支持DMA能力,这些应用方面典型的例子包括视频、音频和网络接口
现代计算机系统中,广泛采用了DMA控制器与DMA接口相分离的结构模式以IBM-PC系列微型计算机的软盘机DMA接口为例。
Intel 8237DMA控制器芯片的内部结构
如下图
Intel 8257是一种控制DMA(Direct Memory Access)操作的芯片,它可以将数据直接在IO设备和内存之间进行交换,而不需要经过CPU,所以它的数据传输速率可以很快。
8257有四个通道(channel),所以它支持4个设备同时进行DMA操作。
每一个通道都可以被独立地编程,每次最多可以传输64kb数据。
每个通道可以独立的进行读传输、写传输和校验传输。
芯片共有40个针脚,如下图所示:
- 8257功能模块有数据总线缓冲区,读/写逻辑,控制逻辑,优先级解析器和4个DMA通道。
- 每个DMA通道都有两个16位可编程寄存器,分别为地址寄存器和计数寄存器。
MEMR为存储器读操作信号,MEMW为存储器写操作信号,IOR为外设读操作信号,IOW为外设写操作信号。
- 地址寄存器用来存放用于DMA数据传输的内存起始地址。
- 每进行一次读/写/校验传输后,地址寄存器中的地址都会自动增加。
- 计数寄存器用来对通过DMA进行传输的数据的字节数或字数进行计数。它保持着要传送的字节数,在每次传送后此寄存器减量。当这个寄存器的值减为零时,Terminal Count信号将产生。
B0-B13这14位用于计数,前面的两位用于标识DMA传输的类型(读/写/校验传输)。
进行读传输时,数据从内存传输到I/O设备。
进行写传输时,数据从I/O设备传输到内存。
校验操作会产生DMA地址但不产生DMA内存和I/O控制信号。
8257还有两个8位的寄存器,分别叫做模式设置寄存器和状态寄存器。
打开/关闭一个通道。
将优先级指定为固定型(Fixed)/循环型(rotating)。
计数终止(terminal count)时停止DMA。
延长/一般 写时间
自动重载通道2
B0-B3这4位用于打开或者关闭通道0-3,1代表打开,0代表关闭。
如果B4被设为1,通道有循环型优先级。如果设为0,通道有固定型优先级。在循环型优先级中,服务完一个通道后就会把这个通道优先级设为最低。在固定型优先级中,通道0优先级最高,通道3优先级最低。
如果B5被设为1,低电平有效的写信号(MEMW和IOW)的时间会被延长。
如果B6被设为1,计数终止后会停止DMA。
B7用来指定通道2的自动重载特性。
如果B7被设为1,通道3的计数寄存器和地址寄存器会在通道2计数终止后自动载入至通道2的计数寄存器和地址寄存器。当这种模式打开后,可用的通道数由4减少至3。
B0-B3这4位用于指明通道0-3是否计数终止。
这些状态位在处理器进行读操作后清除。
B4称为更新标识位(update flag),如果为1,说明通道2的寄存器已经在自动载入模式的操作中重载了通道3的寄存器。
全部0条评论
快来发表一下你的评论吧 !