8255A芯片
Intel 8086/8088 系列的可编程外设接口电路(Programmable Peripheral Interface)简称 PPI,型号为8255(改进型为8255A及
8255A-5),具有24条输入/输出引脚、可编程的通用并行输入/输出接口电路。
它是一片使用单一+5V电源的40脚双列直插式大规模集成电路。
8255A 的通用性强,使用灵活,通过它CPU可直接与外设相连接。
8255A在使用前要写入一个方式控制字,选择A、B、C三个端口各自的工作方式,共有三种;
方式0 :基本的输入输出方式,即无须联络就可以直接进行的 I/O方式。
其中A、B、C口的高四位或低四位可分别设置成输入或输出。
方式1 :选通I/O,此时接口和外围设备需联络信号进行协调,只有A 口和B口可以工作在方式1,此时C口的某些线被规定为A口或B口与外围设备的联络信号,余下的线只有基本的I/O功能,即只工作在方式0.
方式2:双向I/O方式,只有A口可以工作在这种方式,该I/O线即可输入又可输出,此时C口有5条线被规定为A口和外围设备的双向联络线,C口剩下的三条线可作为B口方式1的联络线,也可以和B口一起方式0的I/O线。
8255A是一个并行输入、输出器件,具有24个可编程设置的I/O口,包括3组8位的I/O为PA口、PB口、PC口,又可分为2组12位的I/O口:A组包括A口及C口高4位,B组包括B口及C组的低4位。
A口可以设置为方式0、方式1、方式2,B口与C口只能设置为方式0或方式1.
8253A芯片
可编程定时/计数器是 intel 82583-PTT 就是软件和硬件技术的结合
功能:一片上有3个独立的16位计数通道
每个计数通道都可按二进制计数或十进制计数
每个计数器的计数速率可高达2mhz
每个通道有6种工作方式,可由程序设置和改变
所有的输入输出都与ttl兼容
8259A
目录
8259A工作原理
8259A主要功能
8259A是专门为了对8085A和8086/8088进行中断控制而设计的芯片,它是可以用程序控制的中断控制器。
8259A引脚定义(1张)
单个的8259A能管理8级向量优先级中断。
在不增加其他电路的情况下,最多可以级联成64级的向量优级中断系统。
8259A有多种工作方式,能用于各种系统。
各种工作方式的设定是在初始化时通过软件进行的。
在总线控制器的控制下,8259A芯片可以处于编程状态和操作状态,编程状态是CPU使用IN或OUT指令对8259A芯片进行初始化编程的状态。
编辑本段8259A工作原理
一个外部中断请求信号通过中断请求线IRQ,传输到IMR(中断屏蔽寄存器),IMR根据所设定的中断屏蔽字(OCW1),决定是将其丢弃还是接受。
如果可以接受,则8259A将IRR(中断请求暂存寄存器)中代表此IRQ的位置位,以表示此IRQ有中断请求信号,并同时向CPU的INTR(中断请求)管脚发送一个信号。
但CPU这时可能正在执行一条指令,因此CPU不会立即响应。
而当这CPU正忙着执行某条指令时,还有可能有其余的IRQ线送来中断请求,这些请求都会接受IMR的挑选。
如果没有被屏蔽,那么这些请求也会被放到IRR中,也即IRR中代表它们的IRQ的相应位会被置1。
当CPU执行完一条指令时后,会检查一下INTR管脚是否有信号。
如果发现有信号,就会转到中断服务,此时,CPU会立即向8259A芯片的INTA(中断应答)管脚
发送一个信号。
当芯片收到此信号后,判优部件开始工作,它在IRR中,挑选优先级最高的中断,将中断请求送到ISR(中断服务寄存器),也即将ISR中代表此IRQ的位置位,并将IRR中相应位置零,表明此中断正在接受CPU的处理。
同时,将它的编号写入中断向量寄存器IVR的低三位(IVR正是由ICW2所指定的,不知你是否还记得ICW2的最低三位在指定时都是0,而在这里,它们被利用了!)这时,CPU还会送来第二个INTA信号,当收到此信号后,芯片将IVR中的内容,也就是此中断的中断号送上通向CPU的数据线。
这个内容看起来仿佛十分复杂,但如果我们用一个很简单的比喻来解释就好理解了。
CPU就相当于一个公司的老总,而8259A芯片就相当于这个老总的秘书。
现在有很多人想见老总,但老总正在打电话,于是交由秘书先行接待。
每个想见老总的人都需要把自己的名片交给秘书,秘书首先看看名片,有没有老总明确表示不愿见到的人,如果没有就把它放到一个盒子里面。
这时老总的电话还没打完,但不停的有人递上名片求见老总,秘书就把符合要求的名片全放在盒子里了。
老总打完电话了,探出头来问秘书:有人想见我吗?这时,秘书就从盒子里挑选一个级别最高的,并把他的名片交给老总。
这里需要理解的是中断屏蔽与优先级判定并不是一回事,如果被屏蔽了,那么参加判定的机会也都没了。
在默认情况下,IRQ0的优先级最高,IRQ7最低。
当然我们可以更改这个设定,这样在下面有详细描述。
当芯片把中断号送上通往CPU的数据线后,就会检测ICW4中的EOI是否被置位。
如果EOI被置位表示需要自动清除中断请求信号,则芯片会自动将ISR中的相应位清零。
如果EOI没有被置位,则需要中断处理程序向芯片发送EOI消息,芯片收到EOI消息后才会将ISR中的相应位清零。
这里的机关存在于这样一个地方。
优先权判定是存在于8259A芯片中的,假如CPU正在处理IRQ1线来的中断,这时ISR中IRQ1所对应的位是置1的。
这时来了一个IRQ2的中断请求,8259A会将其同ISR中的位进行比较,发现比它高的IRQ1所对应的位被置位,于是8259A会很遗憾的告诉IRQ2:你先在IRR中等等。
而如果这时来的是IRQ0,芯片会马上让其进入ISR,即将ISR中的IRQ0所对应的位置位,并向CPU发送中断请求。
这时由于IRQ1还在被CPU处理,所以ISR中IRQ1的位也还是被置位的,但由于IRQ0的优先级高,所以IRQ0的位也会被置位,并向CPU 发送新的中断请求。
此时ISR中IRQ0与IRQ1的位都是被置位的,这种情况在多重中断时常常发生,非常正常。
如果EOI被设为自动的,那么ISR中的位总是被清零的(在EOI被置位的情况下,8259A只要向CPU发送了中断号就会将ISR中的相应位清零),也就是如果有中断来,芯片就会马上再向CPU发出中断请求,即使CPU正在处理IRQ0的中断,CPU 并不知道谁的优先级高,它只会简单的响应8259A送来的中断,因此,这种情况下低优先级的中断就可能会中断高优先级的中断服务程序。
所以在PC中,我们总是将EOI 位清零,而在中断服务程序结束的时候才发送EOI消息。
编辑本段8259A主要功能
功能:就是在有多个中断源的系统中,接受外部的中断请求,并进行判断,选中当前优先级最高的中断请求,再将此请求送到cpu的INTR端;当cpu响应中断并进入中断子程序的处理过程后,中断控制器仍负责对外部中断请求的管理。
8237DMA控制器
8237是早期PC中采用的DMAC(现其功能已集成进芯片组),8237
具有4个用于连接I/O设备进行数据传送的通道。
当I/O设备向某通道发出DMA请求时,该通道即可通过8237进行DMA数据传送。
8237的逻辑结构包括时序和控制逻辑;内部计数器、寄存器组、程序命令控制逻辑;优先级编码逻辑;地址、数据缓冲器组等部分。
8237内部有四个独立通道,每个通道都有五个寄存器——工作方式、基值地址、当前地址、基值字节计数、当前字节计数,另外还有四个通道公用的命令寄存器和状态寄存器,以及对DRQ信号的屏蔽寄存器和DMA服务请求寄存器等。
8237的数据线为8位双向数据线,每个通道有硬件DMA 请求和软件DMA请求两种方式。
DRQ表示由DMA设备向DMA控制器发出的DMA请求信号;DACK为DMA
控制器发出的响应信号,表示允许DMA操作;HRQ为保护请求信息号,请求系统总线控制;DMA1的HRQ信号送至MDA2的DRQ4端以构成级联方式。
由于级联已经占用了一个通道,所以还剩下七个通道供DMA设备使用.
由于每个DMA设备都要占用一个DMA通道,如果有两个或两个以上的设备占用了相同的DMA通道就要发生冲突,使得系统不能正常工作。
所以,在安装新设备时,应选择那些还没有被占用的通道。
DMA通道可以通过跳线或程序来设置。
如果是即插即用的主板和适配卡,能够自动地选择合适的通道,你就不必人工去设置了
8237每个通道在每次DMA传输后,当前地址寄存器的值可通过编程设置成自动加1或减1,且其请求方式有软件DMA请求方式和硬件DMA请求方式。