可编程DMA控制器——Intel 8257介绍

转载请注明来源:imred的专栏 | http://blog.csdn.net/imred/article/details/50601735
(本文是对一篇英文博客的翻译和补充,原文地址http://mediatoget.blogspot.in/2013/01/programmable-dma-controller-intel-8257.html)
Intel 8257是一种控制DMA(Direct Memory Access)操作的芯片,它可以将数据直接在IO设备和内存之间进行交换,而不需要经过CPU,所以它的数据传输速率可以很快。
8257有以下特点:

8257有四个通道(channel),所以它支持4个设备同时进行DMA操作。
每一个通道都可以被独立地编程,每次最多可以传输64kb数据。
每个通道可以独立的进行读传输、写传输和校验传输。

芯片共有40个针脚,如下图所示:
可编程DMA控制器——Intel 8257介绍_第1张图片

8257功能模块图示如下:
- 8257功能模块有数据总线缓冲区,读/写逻辑,控制逻辑,优先级解析器和4个DMA通道。
- 每个DMA通道都有两个16位可编程寄存器,分别为地址寄存器和计数寄存器。
可编程DMA控制器——Intel 8257介绍_第2张图片
(MEMR为存储器读操作信号,MEMW为存储器写操作信号,IOR为外设读操作信号,IOW为外设写操作信号。其他信号见http://blog.csdn.net/imred/article/details/50357819)
- 地址寄存器用来存放用于DMA数据传输的内存起始地址。
- 每进行一次读/写/校验传输后,地址寄存器中的地址都会自动增加。
- 计数寄存器用来对通过DMA进行传输的数据的字节数或字数进行计数。它保持着要传送的字节数,在每次传送后此寄存器减量。当这个寄存器的值减为零时,Terminal Count信号将产生。
- 计数寄存器的格式如下:
可编程DMA控制器——Intel 8257介绍_第3张图片

  • B0-B13这14位用于计数,前面的两位用于标识DMA传输的类型(读/写/校验传输)。
  • 进行读传输时,数据从内存传输到I/O设备。
  • 进行写传输时,数据从I/O设备传输到内存。
  • 校验操作会产生DMA地址但不产生DMA内存和I/O控制信号。
  • 8257还有两个8位的寄存器,分别叫做模式设置寄存器和状态寄存器。
  • 模式设置寄存器的格式如下:
    可编程DMA控制器——Intel 8257介绍_第4张图片
  • 模式设置寄存器有如下功能:

打开/关闭一个通道。
将优先级指定为固定型(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。
  • 状态寄存器的格式如下:
    可编程DMA控制器——Intel 8257介绍_第5张图片

  • B0-B3这4位用于指明通道0-3是否计数终止。

  • 这些状态位在处理器进行读操作后清除。
  • B4称为更新标识位(update flag),如果为1,说明通道2的寄存器已经在自动载入模式的操作中重载了通道3的寄存器。
  • 8257寄存器的内部地址如下表所示:
    可编程DMA控制器——Intel 8257介绍_第6张图片

转载请注明来源:imred的专栏 | http://blog.csdn.net/imred/article/details/50601735

你可能感兴趣的:(编程,数据,内存,英特尔,dma)