当CPU允许8259中断控制器原理,并且8259发出INT信号时,CPU将进入 8259中断控制器原理响应 总线周期。

请使用支持脚本的浏览器!
该日志尚未公开,你暂时不能查看。博主可在此
不如去逛逛吧。
网易公司版权所有&&&第六章 中断控制器、DMA控制器和计数器/定时器
微型计算机原理本科课程――第六章 中断 控制器、DMA控制器和计数器/定时器第一版解放军理工大学工程兵工程学院伪装与仿真工程系计算 机教研室 伍红兵日 8.3 中断控制器8259A???8259A可编程中断控制器,用于管理外部中断请求。因为CPU芯 片的外部中断请求引脚INTR只有一根,但外部中断源可以有多个, 例如,日时钟、键盘、串口、并口和软盘等多个中断源。所以在 PC系列中用8259A可编程控制器来协助CPU管理外中断源。 8259A是一种功能很强的可编程中断管理芯片,它可以对中断源 进行优先权判决、当被CPU响应后,可以向CPU提供中断向量号n, 还可以根据需要屏蔽中断请求。 一片8259A可以管理8级中断源。当采用主从级联方式可以扩大中 断源数。 8.3.1 8259A基本知识?介绍以下内容:? ??? ?8259A的级联使用示意图 8259A的引脚信号图 8259A的引脚信号说明 8259A的内部结构说明 8259A的内部结构图(框图) 8259A 级联 使用 示意图 CS 1 28 8259A芯片的引脚信号图 WR 2 27 RD 3 26 D7 4 25 D6 5 24 D5 6 23 D4 7 22 D3 8 21 D2 9 20 D1 10 19 D0 11 18 CAS0 12 17 CAS1 13 16 GND 14 158259AVcc(+5V) A0 INTA IR7 IR6 IR5 IR4 IR3 IR2 IR1 IR0 INT SP/EN CAS28259A° ? ? ? ? ? ? à ? ? ? ? 8259A的引脚信号―1? ? ?Intel 8259A芯片为双列直插式封装,有28个引脚。 引脚信号排列图请参见上图。 引脚信号说明如下: ? D0~D7:数据线,双向,用来与CPU交换数据。 ? INT:中断请求,输出信号,由8259A传给CPU(INTR引脚), 或由从8259A传给主8259A。 ? INTA#:中断响应,输入信号,接来自CPU的中断响应信号,低 电平有效。 ? IR0~IR7:中断请求输入,由外设传给8259A。8259A默认的中 断优先级为IR0&IB1&…&IR7,用户可以根据需要通过编程来改 变它。当有多片8259A级联时,从片的INT引脚与主片的IRi相连。 8259A的引脚信号―2??SP#/EN#:从设备编程/缓冲器允许的双功能引脚,双向传输,低 电平有效。当作为输入时,用来决定本片8259A是主片还是从片。执行SP功能, 如SP为1(接高电位),则为主片;如SP为0 (接地电位) ,则为从片。 当作为输出时,执行EN功能,启动总线。输出的EN信号控制总线缓 冲器(8259A与系统总线)的接受与发送(传输方向)。 SP/EN到底作为输出还是输入,决定于8259A是否采用缓冲方式工作。 ? 如果采用缓冲方式,则SP/EN端作为输出。 ? 如果采用非缓冲方式,则SP/EN端作为输入。??? ?RD#:读信号,输入,低电平有效。来自CPU的IOR。 WR#:写信号,输入,低电平有效。来自CPU的IOW。 8259A的引脚信号―3???A0:内部寄存器的选择,输入信号。8259A规定,当A0=0时, 对应的寄存器为ICWl,OCW2和OCW3;当A0=1时,对应的寄 存器为ICW2~ICW4和OCWl。由于A0的一个状态要对应与多个 不同的寄存器,因此要通过写入顺序和在各命令字中用识别 位加以区别。 CS#:片选信号,输入。一般来自地址译码器的输出,作为系 统对8259A的选择信号,低电平有效。 CAS0~CAS2:级联信号??对主片来讲是输出信号,由它们的不同组合000-111,分别确定 连在本8259A芯片哪个IRi上的从片工作(执行)。 对从片来讲这三个信号是输入信号,以此可以判别本从片是否被 选中。 8259A的内部结构―1? ? ??下图是8259A的内部结构框图,请参看该图。 其主要模块的功能作如下介绍。 [1]中断请求寄存器IRR ? 这是一个8位的寄存器,用来接收来自IR0~IR7上的中断请求 信号,并在IRR的相应位置位。外设产生中断请求的方式有两 种:一种是边沿触发方式,另一种是电平触发方式。用户可 根据需要通过编程来设置。 [2]数据总线缓冲器 ? 这是一个8位的双向的三态缓冲器,用作8259A与系统数据总 线的接口,用来传输初始化命令字,操作命令字,状态字和 中断类型码。 8259A的框图(内部结构)D7~D0 ? ? ? ? ? ? ?? ? ? ? ?8 ? ?INT ? ? ? ? ? ? ° ?INTA? ? ? ? ? ? ? ? ? ? ? ?ì ? ? ? ? ? ? ? ? ? ? ? ?° ? ? ? ? ? ?? ? ? ?? ? ? ? ?° ? ? ? ?RD WR A0CS? ? ± /? ? ? ? ? ? ? ? ?? ? ? ? ? ? ? ? ? ? ??CAS0 CAS1 CAS2 SP/EN ± ? ? § ? ? ? ? ? ? ??? ? ? ± ? ê ?? ? ? ? ? ? ? (ISR)? ? ? ± ? ? ? ? ± ? ? ? í ? ? ? (PR)? ? ? ± ? ? ? ? ? ? ? ? ? ? ?((IRR)IR0 IR1 IR2 IR3 IR4 IR5 IR6 IR7? ? ? ? ? ? ? ? ± ? ?? ? ? IMR8259A° ? ? ? ? ? ? ? ? 8259A的内部结构―2?[3]中断屏蔽寄存器IMR ? IMR是一个8位的寄存器,用来存放中断屏蔽字,它是由用户 通过编程(操作命令字OCWl)来设置的。IMRi与IRi一一对应, 当IMR中第i位置位时,就屏蔽了来自IRi的中断请求,使锁存 于IRRi位的中断请求不能送达优先权裁决(分析)电路参加排队, 也就是说,禁止了IRi的中断请求获得服务的机会。这样用户 就可以根据需要设置IMR的值,从而改变系统原有的中断优先 级。 ? 参看下面的8259A中断判优电路原理图 8259A的中断判优电路原理 ? ?? ? ? IMR ISR?? ? ? ? ? ? ? 1 ? ? ? ± ? ? ? ? ?& IR0 IR1? ? ? ? ? ? INT& B0 B1 B2A&BA0 A1 A2? ? ? ± ? ? ? ? ? ? ? ? ± ? ? ? ? ? ? ?& & & & & & &? ? ? ± ? ? ? ? ? ? ? ? ? ? IRRIR2 IR3 IR4 IR5 IR6 IR7? ? ? ? ± ? í ?? ¤?? ? ? ± ? ? ? ?? ? ° ? ?? ? I0D0I1 I2D1D2 D3中断 请求 优先级 比较器 内部 构造A2I3A1 A0I4D4I5D5I6D6I7D7? ? ? ? ? ? ¨? ? ? VIPE ? ? ? ± ? ? ? ?? ? ?? 8259A的内部结构―3?[4]当前服务寄存器ISR ? 这也是一个8位的寄存器,它与IRi中断源一一对应,它标记了 CPU正在为哪些中断源服务,这又分为两种情况。 ? 其一,若CPU不处于中断服务状态,发生了没有被屏蔽的中断 请求,CPU满足中断响应条件将响应这些请求中级别最高的中 断。 ? 其二,若CPU正在为中断源服务,比如正在为IR6端的中断请 求服务中,如果IR0又申请中断并且未被屏蔽,按8259A的默 认优先级IR0高于IR6,因而CPU会暂停IR6的中断处理而响应 IR0的中断请求,这样ISR0也被置1,此时IRS0、IRS6均为1。 ISR寄存器和编码电路IS7 0 IS6 1 IS5 0 IS4 0 IS3 0 IS2 0 IS1 0 IS0 1B2 B1 B0 ISR? ? ? ?? ? ? ? ? ? ° ? ? ? ? ?? ? ? ? ? ? ? ? ? ? ± ? ? ? ? ? ?? ? ? ° ? ? ? ? ? ? ± ? ? ? ? ? í ??? ? ? ? ° ? ± ? ? ? ? ? ? ? ? ? ? ± ° ? ? ? ° ? ± ? ? ? ??? ? ? ? ? ? ± ?? ° ? ? ? ? ? 8259A的内部结构―4?[5]中断优先权裁决电路 ? 它是用来管理和识别各个中断源的优先级的,也分为两种情 况。 ? 其一,根据优先级的规定,判别同时送达优先权电路的中断 源(IRRi=1且IMRi=0的位)哪一个级别最高。 ? 其二,根据当前服务寄存器的状态和新进入中断优先权裁决 电路的中断请求,判别新的中断请求的级别是否更高,以决 定是否进入中断嵌套。 8259A的内部结构―5?[6]控制逻辑 ? 在8259A的控制逻辑电路中,有一组初始化命令字寄存器 (ICW1~ICW4共4个)和一组操作命令字寄存器(OCW1~OCW3 共3个),这7个寄存器均由用户根据需要通过编程来设置。控 制逻辑可以按照编程所设置的工作方式来管理8259A的全部工 作。在IRR中有未被屏蔽的中断请求位时,它可以输出高电平 的INT信号向CPU申请中断。在中断响应期间,它使得ISR的 相应位置位,并控制向CPU发相应的中断类型码。在中断服务 结束时,它按照编程指定的方式进行结束处理。 8259A的内部结构―6?[7]读/写控制逻辑?它接收来自CPU的读/写命令,完成规定的操作。具体动作由 片选信号CS,地址输入信号A0,以及读(RD#)和写(WR#)信号 共同控制。当CPU对8259A进行写操作时,它控制将写入的数 据送相应的命令寄存器中。当CPU对8259A进行读操作时,它 控制将相应的寄存器的内容输出到数据总线上。 8259A的内部结构―7?[8]级联缓冲器/比较器 ? 这个功能部件在级联方式的主-从结构中用来存放和比较系统 中各8259A的从设备标志(ID)。与此相关的是三条级联线 CAS0~CAS2和SP/EN。 ? 其中CAS0~CAS2是8259A相互间连接用的专用总线,用来构 成8259A的主-从式级联控制结构。编程时从8259A的从设备标 志保存在级联缓冲器中。在中断响应期间,主8259A把申请中 断的优先级最高的从设备标志码(ID)输出到级联线CAS0~ CAS2上,从8259A收到这个从设备标志后,就与自己的级联缓 冲器中保存的从设备标志码相比较,若相等则说明本片被选 中。这样,在后续的第二个INTA脉冲有效期间,被选中的从 设备就把其级别最高的中断源的中断类型码送上数据总线。 8.3.2 8259A的工作过程?下面我们主要叙述单个8259A(即8259A作为主设备) 工作时的工作过程: 8259A工作过程―1? ???{1}中断源通过IR0~IR7向8259A发中断请求,使得IRR的对应位 置位,此时即对这一中断作了锁存。 {2}若此时IMR中的对应位为0,即该中断请求没有被屏蔽,并且 没有更高优先级的中断被受理,则8259A的INT输出1,向CPU发 中断请求。 {3}CPU接收到中断请求信号后,如果满足条件,则进入中断响应, 通过INTA引脚发出两个连续负脉冲。 {4}8259A收到第一个INTA负脉冲时,做如下动作: ? 使IRR的锁存功能失效(目的是防止此时再来中断导致中断响 应的错误),到第二个INTA时再有效。 ? 使ISR的相应位置位,表示已为该中断请求服务。 ? 使IRR相应位清0,表明对应的中断请求被响应。 8259A工作过程―2?{5}8259A在收到第二个INTA脉冲时,做如下动作: ? 送中断类型码(ICW2的内容),CPU读取该中断类型码。 ? 中断类型码由用户编程和中断请求引脚的编码共同决定, 见下面的编程部分。 ? 如果8259A工作在中断自动结束方式,即自动EOI(AEOI)方式, 在第二个INTA脉冲结束时,8259A的控制逻辑将清除ISR的相 应位。 8259A工作过程―3?? ?如果8259A工作在中断非自动结束方式,此时不清除ISR的任 何位,只有在中断服务结束时,由软件发出中断结束(EOI)命 令,才会使ISR中的相应位清除。 第二个中断响应周期,总线封锁撤消。 补充说明:若8259A是工作在级联方式下,并且从8259A的中 断请求级别最高, 则在第一个INTA脉冲结束时,主8259A将 从设备标志ID送到CAS0~CAS2上,在第二个INTA 脉冲有效期 间,由被选中的从8259A将中断类型码送上数据总线。 8.3.3 8259A的中断管理方式?在这一小节里,我们介绍以下内容: ? 8259A的编程结构(命令寄存器) ? 中断优先级的设置方式 ? 中断结束方式 ? 循环优先级的循环方法 ? 中断源的屏蔽方法 8259A的命令字寄存器??参看下面的8259A芯片编程结构示意图。从图中可见 有二组7个命令字寄存器。也就是初始化命令寄存器组 (含有4个寄存器)和操作命令寄存器组(含有3个寄 存器)。 命令字寄存器是可编程控制寄存器,用于设定或动态 改变8259A的工作方式和控制模式。 8259A的编程结构示意图SP/EN AD7~AD0 D7~D0??? ? ° ? ? ± ?ê ? ? ? ? ? ? ? ? ? ? ± ? ? ? ? í ? ? ? ? ? ? ? ? ? ± ? ? ? ? ? ? ? ?INTAWRRDCAS0 CAS1 CAS2 IR0 IR1 IR2 IR3 IR48086? ? 8088? ? ? ? ? ? ? ?§ ? 8086? ? ? ? ? ?? ° A1 § ? 8088? ? ? ? ? ?? ° A0A0 INTR INTICW1(? ? ? ? ) ? ? ? ? 1 LTIM ADI SNGL IC4OCW1 ? ? ? ? ? ? ? ? ± ? ?? ? ? OCW2 ? ? ± é ? ? ? ? R SL EOI OCW3 0 ESMM SMM 0 1 P RR RIS 0 0 L2 L1 L0IR5 IR6 IR7ICW2 ? ? ? ? ICW3(? ? ) ? ?(? /? ) ? ?? ?? ? ° ? ?? ? ? ? ?8282 ? ?? ? ? ° ? ? ? ?? ? ? ? ? ?CSICW4 (?? ? ? ) ? ? ? ? 0 0 0 SFNM BUF M/S AEOI UPM8259A° ?? ? ? ? ? ? ? 中断优先级设置方式1?[1]完全嵌套方式?两种中断结束方式??普通EOI结束方式 自动AEOI结束方式?[2]特殊全嵌套方式?级联时的一种特别的全嵌套工作方式? ?主片为特殊全嵌套工作方式 从片为其他优先级方式?中断结束方式?非自动结束方式 中断优先级设置方式2?[3]优先级自动循环方式?按照不同结束方式,有两种自动循环方式??普通EOI循环方式 自动EOI循环方式?[4]优先级特殊循环方式?由程序规定初始最低优先级?最高优先级不一定是IR0 通常采用特殊EOI循环方式?中断结束方式? 中断结束方式????中断结束处理实际上就是对中断服务寄存器ISR中对应 位的处理。 当一个中断得到响应时,8259A使ISR寄存器中对应位 置“1”,表明此对应外设正在服务,并为中断优先判 别器提供判别依据。 中断结束时,必须使ISR寄存器中对应位置“0”,否则 中断优先权判别会不正常。 什么时刻使ISR中对应位置“0”,就产生不同的中断结 束方式。 普通EOI结束方式???在完全嵌套工作方式下,任何一级中断处理结束返回上一级程序 前,CPU向8259A传送EOI结束命令字,8259A收到EOI结束命令 后,自动将ISR寄存器中级别最高的置“1” 位清“0” (此位对应当 前正在处理的中断)。 EOI结束命令字必须放在返回指令IRET前,没有EOI结束命令, ISR寄存器中对应位仍为“1”,继续屏蔽同级或低级的中断请求。 若EOI结束命令字放在中断服务程序中其它位置,会引起同级或 低级中断在本级未处理完前进入,容易产生错误。 普通EOI结束方式举例??普通EOI结束命令字是设置OCW2中EOI位为1,即OCW2中R、 SL、EOI组合为001。 对IBM PC/XT机,发EOI结束命令字指令为: MOV AL,20H OUT 20H,AL ;8259A端口为20H,21H 特殊EOI结束方式??在非全嵌套工作方式下,中断服务寄存器无法确定哪一级中断是 最后响应和处理的,这时要采用特殊SEOI结束方式。CPU向 8259A发特殊EOI结束命令字,命令字中将当前要清除的中断级别 也传给8259A。此时,8259A将ISR寄存器中指定级别的对应位清 “0”,它在任何情况下均可使用。 特殊EOI结束命令字是将OCW2中R、SL、EOI设置成011,而 L2~L0三位指明了中断结束的对应位。 自动EOI结束方式?? ?在自动AEOI方式中,任何一级中断被响应后,ISR寄存器对应位置 “1”,但在CPU进入中断响应周期,发第二个INTA#脉冲后,8259A 自动将ISR寄存器中对应位清“0”。此时,尽管对某个外设正在进行 中断服务,但对8259A来说,ISR寄存器中没有指示,好象已结束 了中断处理一样。这种方式虽然简单,但因为ISR寄存器中没有标 志,低级中断申请时,可以打断高级中断,产生重复嵌套,嵌套深 度也无法控制,容易产生错误,使用时要特别小心。 通常在只有一片8259A,多个中断不会嵌套情况下使用。 自动AEOI方式设置是在8259A初始化时,用初始化命令字ICW4 中AEOI=1的方法实现的。 循环优先级的循环方法?有下列三种循环方式:? ??普通EOI循环方式 特殊EOI循环方式 自动EOI循环方式?下面分别介绍 普通EOI循环方式???在主程序或中断服务程序中设置操作命令字,当任何一级中断被 处理完后,使CPU给8259A回送普通EOI循环命令,8259A收到 EOI循环命令后,将ISR寄存器中最高优先级的IRi置“1”位清“0”, 并赋给它最低优先级,将最高优先级赋给它的下一级IRi+1,其它 依次类推。 普通EOI循环方式命令字是设置OCW2。在非自动结束方式中, OCW2中R、SL、EOI设置成101,L2~L0不起作用。 下表是普通EOI循环的例子 普通EOI循环方式举例?例如,某中断系统IR0为最高优先级,IR7为最低优先级。有IR2、 IR5两个中断请求,设置为普通EOI循环方式,要求给出IR2及IR5 中断处理完后中断优先级的变化情况。ISR? ? ? ? ? ? ?? ? ? ? ? ? ? ? ? ? ± ISR? ? ? ? ? ? ? IR2 ? ? ? ? ? ± ? ? ± ISR? ? ? ? ? ? ? IR5 ? ? ? ? ? ± ? ? ±ISR7 ISR6 ISR5 ISR4 ISR3 ISR2 ISR1 ISR0 0 0 1 0 0 1 0 0 7 6 5 4 3 2 1 0 0 0 1 0 0 0 0 0 4 3 2 1 0 7 6 5 0 0 0 0 0 0 0 0 1 0 7 6 5 4 3 2 特殊EOI循环方式??特殊EOI循环方式即指定最低级循环方式,最低优先级由编程确 定。最高优先级也相应而定,例指定IR5为最低优先级,则IR6就 为最高优先级,其它各级依次类推。这样在当前中断服务程序结 束前,使CPU给8259A回送特殊EOI结束命令,8259A收到此命令 字后,指定最低优先级,并重新排列优先级级别。 设定特殊EOI循环方式时,设置OCW2中R、SL、EOI=111、 L2~L0指定了一个最低优先级。 特殊EOI循环方式举例例如,某一时刻8259A中IR2,IR6有中断嵌套服务。在IR2中断服 务程序中安排了最低优先权赋给IR3,指令执行后,中断优先级 变化情况如下表所示。?? ? ? ? ? ? ?? ? ? ? ? ? ? ? ? ? ? ¨? ? ? ? ? ? ? ?ISR7 ISR6 ISR5 ISR4 ISR3 ISR2 ISR1 ISR0 ISR? ? ? ? 0 1 0 0 0 1 0 0 ? ? ± ? ? ? 7 6 5 4 3 2 1 0 ISR? ? ? ? 0 1 0 0 0 1 0 0 ? ? ± ? ? ? 3 2 1 0 7 6 5 4 自动EOI循环方式??在自动EOI循环方式中,任何一级中断被响应后,中断响应总线 周期中第二个INTA信号的后沿自动将ISR寄存器中相应位清0,并 立即改变各级中断的优先级别,改变方式与普通EOI循环循环方 式相同。使用这种方式要小心,防止重复嵌套产生。 自动EOI循环方式设置是OCW2中R、SL、EOI=100。 中断源屏蔽方式?CPU由CLI指令禁止所有可屏蔽中断进入,中断优先级 管理也可以对中断请求单独 屏蔽,通过对中断屏蔽寄 存器的操作可以实现对某几位的屏蔽。有两种屏蔽方 式,下面分别介绍。 普通屏蔽方式?将中断屏蔽寄存器IMR中某一位或某几位置“1”,即可 将对应位的中断请求屏蔽掉。普通屏蔽方式的设置通 过设置操作命令字OCW1来实现。?例如,屏蔽第2、3、5、6位进入的中断请求,假设8259A的端 口地址为20H,21H。?MOV AL,B OUT 21H,AL 对OCW1的设置可以在主程序中,也可放在中断服务程 序中,具体根据中断处理要求而定。 特殊屏蔽方式某些场合,希望一个中断服务程序能动态地改变系统 的优先级结构。例当CPU正在处理中断程序的某一部 分时,希望禁止低级中断请求,但在执行中断处理程 序的另一部分时,希望开放较低级中断请求,此时可 采用特殊屏蔽方式。此方式能对本级中断进行屏蔽, 而允许优先级比它高或低的中断进入。 特殊屏蔽方式总是在中断处理程序中使用。?? 特殊屏蔽方式的设置???特殊屏蔽方式的设置是通过设置操作命令字OCW3中的ESMM, SMM=11来实现的。 例如当前正在执行IR3的中断服务程序,设置了特殊屏蔽方式后, 再用OCW1对中断屏蔽寄存器中第3位置“1”时,就会同时使当前 中断服务寄存器中对应位自动清“0”,这样可以既屏蔽了当前正 在处理的中断,又开放了较低级别的中断。 当中断服务程序结束时,应将IMR寄存器的第3位复位,并将SMM 位复位,标志退出特殊屏蔽方式。 8.3.4 8259A的编程????8259A的编程,就是根据应用需要将初始化命令字ICW1~ICW4和 操作命令字OCW1~OCW3分别写入初始化命令寄存器组和操作命 令寄存器组。 初始化命令字必须在正常操作开始前写入,用以建立8259A的基 本工作条件,写入后一般不再改变。 操作命令字可以在工作开始前写入,也可以在工作期间写入,目 的是对中断处理过程实现动态控制。 下面分别介绍它们的写入过程和每种命令字的格式与功能。 初始化命令字初始化命令字完成的功能: (1)设定中断请求信号触发形式,高电平触发或上升沿触发。 (2)设定8259A工作方式,单片或级联。 (3)设定8259A中断类型号基值,即IRi对应的中断类型号。 (4)设定优先级设置方式。 (5)设定中断处理结束时的结束操作方式。 ? 对8259A编程初始化命令字,共预置4个命令字;ICW1、ICW2、ICW3、 ICW4。初始化命令字必须顺序填写,但并不是任何情况下都要预置4个 命令字,用户根据具体使用情况而定。 ? 8259A有两个端口地址,一个为偶地址,一个为奇地址。? 8259A初始化流程图? ? (SNGL=0)ICW1(A0=0) ? ? ? ? ê ± ? ? ? ? ? ? ? ?? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ê ? ? ? ? ? ê ? ?? ICW4ICW2(A0=1) ? ? ? ? ? ? ? ? ? ? ? ? ± ? ? ?± § ? ? ? ? ?? ??ê ?(SNGL=1)? ? ICW3(A0=1) ? í ? ? ? ? ° í ? ? ? ? ? ? ? ? ? ? ?? ? ? ? ? ± ? IR0~IR7 ? ? ? ° í ° ? ? ? ?? ? § ?? ?? ? ? ? ?? ê ICW3(A0=1) ? í ?? ? ? ? ?? í ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ICW3? ? ? ? ? 0 ° ? ? ? § ? ? § ± ± ? ° 3? ? ?? ?§ ? ? ? ICW4é ? ?ê ?(ICW4=0)8259A ì ? ? ? ? ? ?? ? ? ? ?? ? (ICW4=1) ICW4(A0=1) ? ? ? ? ?§ ? à ¨ ± ?? ? ? ? ? ? ? ê ? ? ? ? ? ? ?? ? ? ê § ? ? ? ? ? ? ê § ? ? ? ?? ? ? ?? ? ? ?? ?± ? ? ? ? ? ? ê § ? ? ?? ? ? ?? ? ? ° ? 8259A° ± ? ? ? ? ? ? ? ? 8259A的读写功能0 0 0 0 0 1 X 1 1 1 0 0 X 1 0 0 0 1 1 X 1 1 0 0 0 1 X X X 0 0 X 0 1CS RD WR A0 D4 D3 ± ? ? ? ? ? ? ? 0 1 0 0 1 X CPU? ICW1 ? CPU? ICW2,ICW3,ICW4,OCW1 ? CPU? OCW2 ? CPU? OCW3 ? IRR,ISR,? ± ? ? ?? CPU ? ? ° ? ? ? IMR? CPU ? ? ?? ? ? ? ? ?? ? ? ?? ? ? ? ? ? ? í OUT ? ? ? ? IN ? ? ? ? ICW1 ―芯片控制初始化命令字?格式:? ????A0:写入命令字的端口地址,A0=0,ICW1必须写入8259A的偶地址端口 中,对IBM PC/XT机而言,地址为20H。 标志位:ICW1的位4等于1,是标志位,以区别OCW2和OCW3控制字的设 置。 ICW4:说明是否要设置ICW4命令位,在系统中设为1,表示要 求设置命令字ICW4。 SNGL:说明级联使用情况。 ? SNGL=1,表示使用单片8259A。 ? SNGL=0,表示使用多片8259A级联。 LTIM:定义中断请求信号触发方式,LTIM=1,表示用高电平触发方式, LTIM=0,表示用上升沿触发方式。 A0 0ICW1命令字的图解D7 X D6 X D5 X D4 1 ? ± ? ? ? ?D3 LTIMD2 ADID1 SNGLD0 ICW41 = ? ? ICW4 ? § 0 = ? ? ? ICW4 ? ? § 1 = ° ? ?? ¤ ? ? ? 0 = ? ? ?? ± § ? ?? ? ? ? ? ? ? ° ? ? ? ? ? ? ? ? MCS-80/85? ? ? ? ? ? ° ? ? ? ? ? ? ?? ? ? ? ? ? ? ?? ± ? ? ° ? A7~A5 ? ?ICW1? ? ? ° ? ? ?? ?? ? ? ??? ? ¤ ? ? ? ? ? ± ? ??? ? 1 = ° ? ? ??? ? ? ¤ ? ? ? 0 = ?? ? ??? ? ? ¤ ? ? ?? ± ? ? ° ? ? ? ? ? ? ? ? ?? ? 1 = ? ? ? 4 ? ? § 0 = ? ? ? 8 ? ? §ICW1--? ? ? ? ? ? ? ? ? ? ? ? ? ? ì ? ? ? ? ? ICW1 命令字设置实例?实例:?IBM PC/XT系统初始化中,设ICW1=13H,表示系统中8259A为单片方 式,上升沿触发,要求设置ICW4。 指令为: MOV AL, 13H OUT 20H, AL ICW2 ―中断类型码初始化命令字?格式:? ???D7~D0(A15~A8)为系统中,设定中断指针的高8位。 D7~D3(T7~T3)为系统中,设定中断向量号代码的高5 位。 A0=1,表示是对ICW2编程。 初始化命令字ICW2中,T7~T3用于系统设定中断向 量号代码。的中断向量号代码是8位的,它的高5位 由用户编程写入ICW2的D7~D3位,低3位对应中断源IR7~IR0的 编码,由8259A芯片硬件电路自动产生。 1 A A A A ICW2命令字的图解15 14 13 12A0D7D6D5D4D3 A11D2 A10D1 A9D0 A8? ? ? D7~D0(A15~A8)?? ? ? ± ? ± ? ? ° ? 8? ? ° ? ? ? ? ? ? ¨? ? ? ? ? ? ? ? T7 T6 T5 T4 T3 T2 T1 T0? ? ? D7~D3(T7~T3)? ° ? ? ? ? ? ? ¨? ? ? ? ? ? ? ? ? ? ? ? ? ? ± ? ± ? ? ? ? ? ° ? 5? ?? ? ? ? ? ? ? ° 3? ± ? ? ± ? IR7~IR0° ?? ? ? ? ? ? ? ? 8259A?± ? ? ? ? ? ? ? ?? ? ? ? ? ?? ? ± ? ? ° ? ? 0000H? ± ° ? ° § ? ? ?? 16? ? ? ? ? ¨ ? ?000000 T7 T6 T5 T4 T3 T2 T1 T0 00T7 T6 T5 T4 T3 T2 T1 T0 T7 T6 T5 T4 T3 T2 T1 T0? ? ? ? ? ? ? ? ± ? ? ? ? ? ? §? ? ? ¨ ? ? ?? ? ± ICW2° ? 5? ? ? ? ? ? ? ? ?? ± ? IR7~IR0? ? ? ? ? ? ? ? ?± ? ?ICW2--? ? ? ± ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ì ? ? ? ? ? ICW2 命令字设置实例?实例:???在PC系列机中断系统中,键盘接口的中断请求线连到IR1上,它分配 的中断向量号为09H。 在向ICW2写入中断向量号时,只写中断向量号的高5位,而低3位可 以取任意值,所以在本例中ICW2可以设定为08H。 初始化程序段为: MOV AL, 08H ; ICW2高5位 OUT 21H, AL ;写ICW2的口地址A0=1 当CPU响应键盘中断请求时,8259A把IRl的编码001作为中断向量的 最低3位和ICW2的高5位构成一个完整的8位中断向量号09H,在第二 个中断响应周期,经数据总线送给CPU。 ICW3 ―标识初始化命令字? ? ?初始化命令字ICW3专用于级联方式的初始化编程。当初始命令字 ICW1中的D1位 (SNGL)=0时,8259A工作于级联方式。此场合下的 8259A初始化必须有ICW3命令。 ICW3的定义对于主片和从片各有所不同,参看ICW3命令字的图解 从8259A的ICW3设置举例:?连接在主8259A的IR6上的从8259A,它的ID码应为6(110),这时应设定 从8259A的命令字ICW3的ID2=1,ID1=1,ID0=0。在中断响应过程中, 主片把优先级最高的IRi的地址编码送往级联线CAS2~CAS0。从片把接 收到的片号地址编码和初始化设定的片号编码ID2~ID0进行比较,如果 比较结果是与该编码相符,则从片将在第二个INTA负脉冲到来时,把自 己的中断矢量代号码(中断类型码)送上数据总线。 8259A? ? ? ? ?? ê ? A0 1ICW3命令字的图解D7 IR7 D6 IR6 D5 IR5 D4 IR4 D3 IR3 D2 IR2 D1 IR1 D0 IR01 = IRi? ? ? ? ? ? ? ? ? ? 0 = IRi? ? ? ? ? ? ? ? ? ? 8259A? ? ? ? ? ? ê ? A0 1 D7 0 D6 0 D5 0 D4 0 D3 0 D2 ID2 D1 ID1 D0 ID0? ? 8259A° ? ?° ? ? ± é ? ?ICW3--?? ? ? /? ? ? ? ? ? ? ? ± ± ?? ? ? ì ? ? ? ? ? 8259A的级联方式???每片8259A最多只能直接管理8级中断。为了扩展系统管理的中断源 数,通常可以把若干个8259A按级联方式连接起来,一片为主片, 其余为从片。 ? 例如,使用9片8269A构成一个级联系统,一片作为主片,其余 8片作为从片,则可以管理64级中断源。 下图示出三个8259A芯片级联而成的中断管理系统的实例。该系统 包括一个主片和两个从片8259A-I和8259A-II,共可以管理22个中 断级。 在这个级联系统中,各中断源的优先级别从高到低依次为:主片的 IR0~IR3,从片1的IR0~IR7,主片的IR5~IR6,从片2的IR0~IR7。 ? ?? ? ° ? ??8259A的级联举例图解? ? ° ? ? ? ? ?A08259A° ? ? ? ± §? ? ? ? ? ? ??? ? ?? ? ? ? ? A0(? ) ?D0-D7 CSINT INTA CAS0 CAS1 CAS2D0-D7 CSINT INTA CAS0 CAS1 CAS2D0-D7 CSINT INTA CAS0 CAS1 CAS2A08259A (? ) ?IR3 IR4A0 SP/EN IR08259A (? 1) ?IR3 IR4A0 SP/EN IR08259A (? 2) ?IR3 IR4VccSP/EN IR0IR7IR7IR7 8259A的级联举例-1? ???现在详细讲解图示的三片级联中断系统 [1]22个中断源的中断请求分别接到主片和从片的中断输入端,每 个从片的中断请求INT作为主片的中断输入也就是从8259A的INT 中断请求输出线连接在主8259A的某一个IRi输入端。 [2]当中断源有请求并允许时,相应从片向主片发出请求,再由主 片向CPU发出请求。主8259A的中断请求线INT与控制总线的 INTR(CPU引脚)相连接。 [3]该系统是非缓冲方式级联结构,即所有8259A的数据线D7~D0 直接与数据总线D7~D0连接(之间不加缓冲器)。主片的SP/EN引脚 接Vcc(+5V),从片的SP/EN引脚接GND(0V)。 8259A的级联举例-2? ??[4]控制总线上的中断响应信号INTA,与主片以及所有从片的 INTA引脚相连接。INTA可以由总线控制器提供或CPU直接输出。 [5] 将从8259A-I的INT输出线接主片的IR4输入,而将从8259A-II 的INT输出线接主片的IR7输入;将所有8259A的组联线 CAS2~CAS0互相连接,主8259A是输出,从8259A是输入。在CPU 响应中断总线周期,主8259A通过这3根级联线,送出优先级别最 高的从8259A的标识码ID给所有从片。级联系统中的所有8259A, 都必须进行各自的初始化编程。 [6]由系统生成的片选信号分别接到各个8259A的片选端。注意: 各个8259的片选信号是互不相同的,即地址互不相同。 案例级联系统的ICW3设置? ?该系统主从片的ICW3作如下设置格式: 主片ICW3=B=90H,对主片ICW3的初始化程序段为:MOV OUT AL, 90H 2lH, AL? ??从8259A-I 的ICW3=H。 从8259A-II 的ICW3=H。 对从8259A-I, ICW3的初始化程序段为:MOV OUT AL, 04H X1H, AL;主片ICW3内容 ;写入主片ICW3,端口地址A0=1?对从8259A-II, ICW3的初始化程序段为:MOV OUT AL, 07H Y1H, AL;从8259A-I的ICW3内容 ;写入8259A-I的ICW3端口;从8259A-II的ICW3内容 ;写入8259A-II的ICW3端口 级联方式下的中断响应过程? ?? ?{1}CPU响应某中断请求后送INTA给所有的8259A。 {2}主片收到第一个INTA后通过CAS2~CAS0输出当前被响应的中 断源所属从片的设备代码ID。 {3}每个从片均收到这一设备代码并和自身的代码进行比较; {4}与主片送出的代码相一致的从片把自身被响应的中断源的类型 码送到数据总线。 级联方式下的中断响应过程??{5}CPU在中断响应周期的第二周期读取类型码,并生成中断向量表的地址。 然后取出中断向量而转入相应的中断服务程序。 {6}级联系统中的所有8259A都必须进行独立的编程,以便设置各自的工作 状态。这时,作为主设备的8259A需设置为特殊的全嵌套方式。 ICW4 ―方式控制初始化命令字?格式? ? ??A0=l,D7D6D5=000是ICW4的标志。 D0(μPM):CPU类型选择。在系统中,μPM=1。 D1(AEOI):指出是否为中断自动结束方式,若选用中断自动 结束方式,则D1=1。在这种方式下,当第二个INTA脉冲到来 时,ISR的相应位会自动清除。如果设置D1=0则不用中断自动 结束方式,这时必须在程序的适当位置使用中断结束命令(见 OCW2),使ISR中的最高优先权的位复位。 D2(M/S):在缓冲方式下有效,用来指出本片是主片(D2=1)还 是从片(D2=0)。 ICW4 ―方式控制初始化命令字??D3(BUF):用来指出本片是否工作在缓冲方式,并由此决定了 SP#/EN#的功能。D3=1表示8259A工作在缓冲方式,反之, 8259A工作在非缓冲方式。由于在缓冲方式下不能由SP#/EN# 来指明本片是主片还是从片,因此,需用D2位(即M/S位)来指 示。 D4(SFNM):用来指出本片是否工作在特殊的全嵌套方式。若 是则D4=1,反之D4=0。D4=0时8259A工作在全嵌套方式。 A0 1D D D D ICW4命令字的图解7 6 54D3 BUFD2 M/SD1 AEOID0 ? ? PM000SFNM1? ? ? ? ? ? ? ?? ? ? à ± ¨ ± ?? ? 0? ?? ? ? ? ? ? ?? ? ? ? à ± ¨ ± ?? ? ? ? ? ? ? ?? ? ?? ? ? ? ? ? ? ?? ? ? 8259A ? ?
1 X 0 11? ? ? ? ? ? 0? ? ? ? ? ?1 = ?± EOI?? ? ? ? ? 0 = ??± EOI?? ? ? ? ? ?ICW4--?? ? ? ? ? ? ? ? ? ? ? ? ? ì ? ? ? ? ? BUF,M/S,SP/EN之间关系BUF? ?0 ?? ? ?? ? ? ? ? ?M/S? ?? ? ? ? à ? 1 ?8259A ? 0 ? 8259A ? SP ? ? ? § (? ? ? ? ) ? ? ? ? EN ? ? ? § (? ? ? ? ) ? í ? ?SP/EN± ?SP=1 SP=0 EN=1 EN=0 ? ? 8259A ? ? 8259A CPU? 8259A ? 8259A? CPU ?1 ? ? ?? ? ? ? ? 写ICW流程图?? ICW1 ? ? ICW2 ? N初始化命令字ICW2、ICW3和ICW4的口地 址均为A0=1(在PC/XT中均为21H)。为 区分它们,片内采用了FIFO的堆栈技术。 编程时,一定要严格按右图所示的顺序 完成初始化命令字的写入过程,不允许 颠倒。± § ? ? ? ?? ICW3 ?N§ ? ICW4?? ICW4 ?ì ? ? ± ? ? ? ? ? ? 操作命令字?操作命令字决定中断屏蔽,中断优先级次序,中断结束方式等。 中断管理较复杂,包括;完全嵌套优先方式、特殊嵌套优先方 式、自动循环优先方式、特殊循环优先方式、特殊屏蔽方式、 查询方式等。它是由操作命令字的设置来实现的,设置时,次 序上没有严格要求,但端口地址有严格规定,OCW1必须写入 奇地址端口,OCW2和OCW3必须写入偶地址端口。 OCW1―中断屏蔽操作命令字? ??A0=1,OCW1命令字必须写入8259A奇地址端口。 OCW1:命令字的各位直接对应中断屏蔽寄存器IMR的 各位,当OCW1中某位Mi为1,对应位的中断请求受到屏 蔽,某位为0,对应位的中断请求得到允许。 举例:设某中断系统要求屏蔽IR3,IR5,8259A编程指 令为:MOV AL, B OUT 21H, AL OCW1命令字的图解A0 1 D7 M7 M = D6 M6 D5 M5 D4 M4 D3 M3 D2 M2 D1 M1 D0 M01? ? ?? IRi? ? ? ? ° ? ± ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 0? ? ? IRi? ? ? ± ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?OCW1--? ± ? ?? ?? ? ? ? ? ? ? ? ?? ? ? OCW2―优先权与结束方式命令字? ??A0=0,OCW2命令字必须写入8259A偶地址端口。 标志位:OCW2的D4,D3位等于00,是标志位。以区别ICW1和 OCW3控制字的设置。 L2~L0:SL=1时, L2~L0有效。 L2~L0有两个用途,一个是当 OCW2设置为特殊EOI结束命令时, L2~L0指出清除中断服务寄存 器中的哪1位,第二个当OCW2设置为特殊优先级循环方式时, L2~L0 指出循环开始时设置的最低优先级。 A0 0D D D D D OCW2命令字的图解7 6 5 4 3D2 L2D1 L1D0 L0RSLEOI00001-? ? EOI?? ? ¨ ? ? 011-? ? EOI?? ? à ? ? 101-? ? EOI? ? ?? ? ¨ ? ?? ? 111-? ? ? ? ?? ? à ? ?? ? 000-? ? ?± ? ? ? ? ? ? ? ? ? ? ?? ? ± 100-?± ? ? ? ? ? ? ? ? ? ? ?? ? ± ? ? 110-? ? ? ? ? ? ? ? ? ± ? ? 010-? ? (? ? ? ?) ? § ? ? ? ?± ? ? ?? ?000-IR0 001-IR1 010-IR2 011-IR3 100-IR4 101-IR5 110-IR6 111-IR7OCW2--? ? ? ? ? ?? ? ? ? ¨? ?? ? ? ? ? ? ? ? ? ? ?? ? ? ? ± ? ? ?? ? ?? ? ? OCW2―优先权与结束方式命令字? ??R、SL、EOI,这三位组合起来才能指明优先级设置方式和中断结 束控制方式,但每位也有自己的意义。 R(ROTATE):R=1,中断优先级是按循环方式设置的,即每个 中断级轮流成为最高优先级,当前最高优先级服务后就变成最低 级,它相邻的下一级变成最高级,其它依次类推。R=0,设置为 固定优先级,0级最高,7级最低。 SL(SPECIFIC LEVEL):指明L2~L0是否有效。 ? SL=1,OCW2中L2~L0有效。 ? SL=0, L2~L0无意义。 OCW2―优先权与结束方式命令字???EOI(END OF INTERRUPT);指定中断结束。 ? EOI=1,用作中断结束命令,使中断服务寄存器中对应位复0, 在非自动结束方式中使用。 ? EOI=0,不执行结束操作命令。如果初始化时,ICW4的 AEOI=1,设置为自动结束方式,此时OCW2中的EOI位应为0。 OCW2的功能包括两个方面,一个是决定8259A是否采用优先级循 环方式,另一个是中断结束采用普通的还是特殊的EOI结束方式。 教材第310页给出了R、SL、EOI三位的组合功能解释。 OCW3―特殊屏蔽和查询命令字? ? ??OCW3功能有三个:设定特殊屏蔽方式,设置对8259A寄存器的读出及设 置中断查询工作方式。 A0=0,OCW3必须写入8259A偶地址端口。 标志位:D4及D3位组合为01时,表示为OCW3,以区别OCW2(OCW2中此2 位组合为00)。而D4=l时,此操作字为ICW1。 RR,RIS:RR为读寄存器状态命令,RR=1,允许读寄存器状态,RIS为指 定读取对象。???RR,RIS=10,用输入指令(IN指令),在下一个RD脉冲到来后,将中断请求寄 存器IRR的内容读到数据总线上。 RR,RIS=11,用输入指令,在下一个RD脉冲到来后,将中断服务寄存器ISR 的内容读到数据总线上。 顺便指出,8259A中断屏蔽寄存器IMR的值,随时可通过输入指令从奇地址端 口读取。读同一寄存器的命令只需要发送一次,不必每次重写OCW3。 OCW3命令字的图解 OCW3―特殊屏蔽和查询命令字??P:查询方式位P=1,设置8259A为中断查询工作方式。在查询工作方式下,CPU不 是靠接收中断请求信号来进入中断处理过程,而是靠发送查询命令, 读取查询字来获得外部设备的中断请求信息。CPU先送操作命令 OCW3(P=1)给8259A,再送一条输入指令将一个RD#信号送给 8259A,8259A收到后将中断服务寄存器的相应位置1,并将查询字 送到数据总线,查询字反映了当前外设有无中断请求及中断请求的 最高优先级是哪个,查询字格式为:IWWW 查询字举例??例如, P=1时,优先级次序为IR3、IR4、…、IR2。当 前在IR4和IR1引脚上有中断请求。 CPU再执行一条输入指令,得到查询宇为1XXXX100。 说明当前级别最高的中断请求为IR4,CPU转入IR4中断 处理程序。 8259A使用案例?某系统中两片8259A采用中断级联方式组成中断系统, 从片的INT端连8259A主片的IR3端。若当前8259A主片 从IR1、IR5端引入两个中断请求,中断类型号为31H、 35H。中断服务程序的段基址为1000H,偏移地址分别 为2000H及3000H,8259A从片由IR4、IR5端引入两个 中断请求,中断类型号为44H和45H,中断服务程序段 基址为2000H,偏移地址为3600H及4500H,下图给出 了级联连接图。 8259A级联使用实例? ? ? ? ? ? ??RDWRINTA D7-D0CSA0CAS2 CAS1 CAS0 SP/EN +5VCAS2 CAS1 CAS0 SP/ENRDWRINTAD7-D0A0CS INTslave 8259AIR7 IR6 IR5 IR4 IR3 IR2 IR1 IR0 INTmaster 8259AIR7 IR6 IR5 IR4 IR3 IR2 IR1 IR045H? ? ± ? ? ?44H? ? ± ? ? ?35H? ? ± ? ? ?31H? ? ± ? ? ?à ? ? ? ? ? ? ? ? ± ? ?à ? ? ? ? ? ? ? ? ± ? ?8259A? ? ? ? ? ? ± § ? ? ° ? 中断向量形成 1MOV AX,1000H ;送入段地址 MOV DS,AX MOV DX,2000H ;送入偏移地址 MDV AL,31H ;中断类型号31H MOV AH,25H ;写入DS:DX到中断向量表 INT 2lH MOV DX,3000H MOV AL,35H ;中断类型号35H,AH值不变。 INT 21H 中断向量形成 2MOV AX,2000H ;送入段地址 MOV DS,AX MOV DX,3600H MOV AL,44H ;中断类型号44H MOV AH,25H ;写入DS:DX到中断向量表 INT 21H MOV DX,4500H MOV AL,45H ;中断类型号45H ,AH值不变。 INT 21H 主片8259A初始化编程1??? ? ??? ?MOV MOV OUT MOV MOV OUT MOV OUTAL, 11H ;定义ICW1,主片,级联,边沿触发,要ICW4 DX, 0FFC8H ;A0=0 DX, AL AL, 30H ;定义ICW2,中断类型号30H~37H DX, 0FFC9H ;A0=1 DX, AL AL, 08H ;定义ICW3,IR3端接从片8259A的INT端 DX, AL ;A0=1 主片8259A初始化编程2?? ? ? ? ? ?MOV AL, 11H ;定义ICW4,特殊全嵌套方式,非缓冲方式 OUT DX, AL ;非自动EOI结束方式 MOV AL, 0D5H ;定义OCW1,允许IR1、IR3、IR5中断,其余的 OUT DX, AL ;端口中断请求被屏蔽 OCW1= MOV AL, 20H ;定义OCW2,普通EOI结束方式 MOV DX, 0FFC8H ; 定义OCW2 001=普通EOI方式 OUT DX, AL ; A0=0 从片8259A初始化编程1? ? ? ? ? ? ? ?MOV MOV OUT MOV MOV OUT MOV OUTAL, 11H ;定义ICW1,级联,边沿触发.要设置ICW4 DX, 0FFCAH DX, AL AL, 40H ;定义ICW2,引入中断类型号为40H~47H DX, 0FFCBH DX, AL AL, 03H ;定义ICW3,从片接在主片的IR3端 DX, AL 从片8259A初始化编程2?? ? ? ? ? ?MOV AL, 01H ;定义ICW4, 完全嵌套方式, 非缓冲方式 OUT DX, AL ;非自动EOI结束方式 MOV AL, 0CFH ;定义OCW1, 允许IR4, IR5中断引入 OUT DX, AL ;其余端口中断请求屏蔽 OCW1= MOV DX, 0FFCAH MOV AL, 20H ;定义OCW2,普通EOI结束方式 OUT DX, AL 第16讲思考题?教材第318页 练习题12,14 ?教材第318页 练习题15 第16讲习题布置 (020510) 第16集结束第1版 谢谢大家的使用! 欢迎大家提出宝贵意见! 俞建新 日 电话:3592178(逸夫馆十层中心机房) E-mail :
E-mail : yujianxn@? ? ? ? ? ? ? 第12章 DMA控制器8237A?本章介绍以下内容? ???DMA方式要点 8237A的组成和工作原理 8237A的时序 8237A的编程和应用举例 12.1 DMA 方式要点DMA是一种输入输出方式,优于中断方式,适用于快 速传送大批量数据。 采用DMA方式,可以在存储器和外设之间开辟直接传 输数据的通道,也能让两块存储器之间直接交换数据, 而不需要CPU的干预。 地址、数据、控制等信号以及对它们的操作都由DMA 控制器形成和管理,使传输数据的速度能够达到硬件 所允许的最快速度。??? DMA控制器?利用DMA方式传送数据时,数据的传送过程完全由硬件控 制。这种硬件电路称为DMA控制器(英文名称是DMAC) 它具有以下基本功能:?????能向CPU提出DMA请求,请求信号加到CPU的HOLD引脚上。 CPU响应DMA请求后,DMA控制器从CPU那儿获得对总线的控制权。 在整个DMA操作期间,由DMA控制器管理系统总线,控制数据传递, CPU则暂停工作。 能提供读/写存储器或I/O设备的各种控制命令。 确定数据传输的起始地址和数据的长度,每传送一个数据,能自动 修改地址,使地址增1或减1,数据长度减1。 数据传送完毕,能发出结束DMA传送的信号。 DMA接口基本模型 I/O? ? ? ?? ° ? ? ? ? ? ? ?? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?? ? ? ? ? ? ? ? ? ± ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? í ? ? ? ? ? ? ? ? ? ? ? ? ? ? DMA? ? ? ? ? ? ? ? ? ± ? ? ? ? ? ? ?? ? ? ? ? ? ? ?? ? ? DMA? ? ? ? ? I/O? ? ? ? ?° ¤? ? ? ? ? ? ? ? ? ?? ? ?/? ? ? ° ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?? ? ? ?? ° ? ? ? ? ? ? ??DMACDMA? ? ? ? ? ? ? ? ? ?? ? DMA的过程?一个完整的DMA过程包含五个阶段? ? ? ? ?初始化 DMA请求 DMA响应 DMA传输 DMA结束?一个DMA传输过程示意图如下。 DMA传输过程示意图DMA? ? ¨ ? ? ? ?? ° ? ? ??? ? ?DMA? ? ? ? DMAC DMA? ? ? ? DMA? ? ? ? I/O ? ? ? ? I/O? ? ? ?CPU?? ? ? (HOLD) ? ? ? ? ?? ? ? (HLDA) ? ? ? ? DMA控制器的两种工作状态???由于DMA控制器(DMAC)需要占用总线,控制外设和存储器之间的 数据传输,所以DMA控制器有时取代CPU而成为系统(总线)的主 控者。但在它取得总线控制权之前,又和其他I/O接口芯片一样, 受CPU的控制。这就是说DMA控制器在微机系统中可处于两种不同 的工作状态:主动态与被动态。 DMAC随工作状态的不同,在系统中的地位也不同。DMAC有两种 不同的地位:主控器与受控器。 DMAC的工作状态(或系统地位)是不断转化的。 总线控制权的转移? ????在DMA方式下,总线控制权不断地在CPU和DMAC之间转移。 I/O设备和DMAC之间有一对DMA传送的请求信号和应答信号: ? DREQ / DACK DMAC和CPU之间有一对总线控制的请求信号和应答信号: ? HRQ / HLDA 当CPU收到HRQ信号后,在可能的情况下,让出总线控制权给 DMAC。 DMAC完成DMA传送后,将总线控制权还给CPU。 基本DMA操作?X86微处理器有两个与直接存储器存取(DMA)传输有关 的引脚。? ??HOLD (输入) HLDA (输出)一旦HOLD输入被置为逻辑1,则请求DMA操作?微处理器响应DMA后,将其地址、数据和控制总线置 为高阻抗状态。? ? ?DMA读使MRDC和IOWC信号同时被激活 DMA写使MWTC和IORC信号同时被激活 请参看下面的DMA控制引脚时序图 微处理器的HOLD和HLDA时序T4? T1 ?CLK HOLD HLDAX86? ? ? ? ° HOLD? HLDA? ? ? ? ? ?? ? ?? 12.2 8237A的组成和工作原理??Intel 8237A是一个可编程的DMA控制器芯片, 它直接应用于和80286系统。在386和 486系统中,作为集成系统外设接口芯片中的一 部分仍起着DMA控制器的作用。下图为8237A的 内部结构框图。 8237A-5芯片的工作时钟频率为5MHz。 CS RESET READY CLK EOP IOR IOW MEMR MEMW AEN ADSTB8237A的内部结构图ì ? ? ? 1° ? ? ?? ? ? ? ? ? ?? ? ? ¨ ? ? ? 16? ?? ì ? ? ? 1/? 1° ? ? ?? ?? ? ? ? ? ° ? ? ? ? (16? ) ? 16? ?A7~A0 A15~A8I/O? ? ? ? ? ?A 3 A0~? ? ? ? ? ? ? ? ? ? ? ? ? ?16? ? ? ? ? ? ± ? ? ? ? ? ? ? ° ? ? ? ? ? ? ?(16? *4) ?? í ? ? ? ? ? ? ? ? ? ? ? ? ? ± /? ? ? ? ??? ? ° ? ° ? ? ? ? ? ? ?(16? *4) ?A7 A4~? ? ? ? ? ?? ? ? ? ? ? ? ?(16? *4) ???? ? ° ? ?? ? ? ? ? ? ? ? ?(16? *4) ?? ? ? ? ? ? ? ? ? ? ? ?? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? (8? ) ?4 4? ? ? ? ± ? ? ?D1 D0HRQ HLDA DREQ3-0 DACK3-0 ? ? ¨ ? ? ? ? ? ? ? ? ? ? ?? ? ? ? ? ? ? ? ? ? ??~I/O? ? ? ? ? ?DB7 DB0~? ? ? ? ? ? ?? ? ? (4? ) ? ? ? ? ? ? ? ? ? ? ? (4? ) ?? ? ± /? ¤?? ? ? ??? ? ? ? ? ? ? (6? *4) ? ? ? ?? ? ? ? ? ? ? (8? ) ? ? ? ? ? ? ? ? ? ? ? (8? ) ?8237A ? ? ? ? ? ? ? ? 8237A-5基本介绍??8237A-5是一个高性能的40引脚双列直插式可编程DMA控制器芯 片,可以方便地与Intel公司的微处理机相连,实现外部设备与存 储器之间的直接数据交换。该控制器通过编程可提供多种类型的 控制特性,以优化系统性能,增大数据吞吐率,使最高数据传输 速率可达1.5M字节/秒(时钟频率达到5MHz),并允许在程序控制 下实现动态控制。 8237A的内部逻辑和外部连接与8237A-5相同,只是时钟频率略慢 些。?以下的8237A介绍均指8237A-5芯片,这样做不影响对8237A的分析 和认识。 8237A的内部编程结构HOLD HLDA ?? ? ? ? ? CPU° ? ? ? ? ?? § HRQ HLDA CLK AEN ADSTB EN STB ? ? ? ? ? ?DB0-DB7+5V VCC GND EOP IOR IOW MEMR MEMW READY? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?? ? ? ? ? ? ? ? ? ?? ? ? ? ? ? ? ? ? ? DB0 ~DB7 ??? ?? ? ? ° ? ° ? ? ? ? ??? ? ? ? ? ° ? ?? ? ? ?? ? ¤ ? ? ? ? ? ??? ? ¤ ? ? ? ?? ??RESET? ? ?? ? ? ? ° ? ? ? ? DREQ0 ? ? ? ? ? ? ? ? ??? ? ? ?¨? ? ° 0 ¨? ? ° 1DACK0 DREQ1 DACK1 DREQ2IO/M A15-A8 A7-A0? ? ° ? ? ? ? ?CS NC¨? ? ° 2 ¨? ? ° 3DACK2 DREQ3 DACK3A3-A0 A7-A4A3~A0 A7~A48237A° ?? ? ? ? ? ? ? ? ? ? ? ? ? à ? ? ? 8237A主要功能和特性-1①有4个独立的DMA通道,最多可直接连接4个I/O设备。 ②对同时提出DMA请求的多个通道可进行优先级排队判优 ? 判优策略有固定优先级编码和循环优先级编码两种 ? 固定优先级顺序: 通道0最高,通道l、2次之,通道3最低 ③DMA读写周期可变 ? 通过软件与硬件结合的方法设定和改变DMA周期长度 ? 可建立起与任何I/O速度相匹配的定时关系 ④可在存储器与I/O设备、存储器与存储器之间传送数据。存储器地址 指针可以增1或减l。 8237A主要功能和特性-2⑤操作功能比较齐全 ? 有3种操作类型 ? DMA读 / DMA写 / 数据校验 ? 有3种操作方式 ? 单字节方式 / 字组方式 / 连续方式 ? 有两种数据传送方式 ? 顺序传送 / 同时传送 ⑥可用多个8237A芯片级联以扩充系统可用的通道数 ? 级联方法如下图所示 ? ? ? ? ? ? ? ?8237A级联方式连线图?? ? ?DREQ0 HOLD HLDA HRQ HLDA DACK0? ? ? ?8237AHRQ HLDA8237ADREQ3 DACK3? ? ? ?HRQ HLDAA? ? ?? ? ? ? ± § ? ? ? ? ? 8237A主要功能和特性-3⑦有自动重新启动能力 ? 即具有数据块链接功能 ⑧DMA操作启动 ? 由外设输入DMA请求信号而开始 ? 通过软件从内部给出DMA请求信号来启动 ⑨DMA操作两种结束方式 ? 字节计数结束表示预定的数据全部传送完毕,从EOP引脚输出 一个低电平指示信号 ? 将EOP作输入用,利用一个负脉冲输入,强制本次DMA操作结 束。 8237A引 脚 信号IOR IOW MEMR MEMW NC READY HLDA ADSTB AEN HRQ CS CLK RESET DACK2 DACK3 DREQ3 DREQ2 DREQ1 DREQ0 GND1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 208237A40 39 38 37 36 35 34 33 32 31 30 29 28 27 26 25 24 23 22 21A7 A6 A5 A4 EOP A3 A2 A1 A0 VCC DB0 DB1 DB2 DB3 DB4 DACK0 DACK1 DB5 DB6 DB7 8237A的引脚功能-1?8237A共有40个引脚(见8237A的编程结构和引脚图),每 个引脚的功能如下:[1]CLK:时钟,输入信号。8237A为3MHz,MHz。 [2]CS#:片选(chip select),输入,低电平有效。 [3]RESET:复位(reset),输入,高电平有效。RESET有效时清除控 制、状态、请求和暂存寄存器,同时也清除内部的先/后触发器 和屏蔽寄存器。复位以后,8237A处于空闲周期。 [4]READY:准备好,输入,高电平有效。用来扩展8237A的读/写 脉冲,以适应慢速存储器或外设。 8237A的引脚功能-2[5]A0~A3 :低4位地址,双向,三态。当8237A作为从模块使用时 (即CPU对其编程时),它们是输入信号,作为片内口地址的选择。 当8237A作为主模块使用时(即进行DMA传输时),它们是输出信 号,作为DMA传输地址的低4位。 [6]A4~A7:高4位地址,输出,三态。在DMA传送期间,与A0~A3共 同形成地址的低字节。 [7]DB0~DB7:数据线(data bus),双向,三态。当8237A作为从模 块工作时,它们用来在CPU与8237A之间传送控制信息、状态信 息和地址信息;当8237A作为主模块工作时,它们用来传送DMA 传输地址的高字节。 8237A的引脚功能-3[8]ADSTB:地址选通(address strobe),输出,高电平有效。用来把 DB0~DB7 输 出 的 高 8 位 地 址 打 入 外 部 的 地 址 锁 存 器 , 见 8237A的编程结构和引脚图。 [9]AEN:地址允许(address enable)输出,输出信号,高电平有 效。使外部地址锁存器中的内容送到系统地址总线,与经 A0~A7 输出的低8位地址共同形成16位传输地址。同时,AEN 还使与CPU相连的地址锁存器失效,禁止来自CPU的地址码送 上地址总线,以保证地址总线上的信号来自DMA控制器。 8237A的引脚功能-4[10]MEMR#/MEMW#:存储器读/写信号,输出,低电平有效。主 态时,与IOW#和IOR#信号配合,将数据写入I/O设备,或从I/O 设备读出数据。从态时这两个信号无效。 [11]IOR#:外部设备读信号(I/O read),双向,低电平有效。当 8237A作为从模块工作时,它为输入信号(来自CPU),此时,CPU 用来读取8237A的内部寄存器的值。当8237A作为主模块工作时, 它为输出信号(发向I/O口)。此时,将来自I/O口的数据送上系统 数据总线。 [12]IOW#:外部设备写信号(I/O write),双向,低电平有效。当 其作为输入信号时,由CPU向8237A的内部寄存器写值(编程写 入)。而作为输出信号时,用来控制将数据总线上的数据写入I/O 口。 8237A的引脚功能-5??[13]DREQ0~DREQ3 :通道的DMA请求(DMA request)信号,输入。 这个信号来自I/O口,其有效电平的极性可通过编程来设置。在固 定优先级情况下,8237A默认的优先级别是DREQ0 最高,DREQ3 最低。在循环优先级时,优先级可以改变。 [14]DACK0~DACK3:通道的DMA响应(DMA channel acknowledge) 信号,输出。作为对DREQi的回答信号,由8237A发给I/O口;表 示该通道的DMA请求已经被响应。其有效电平的极性也可通过编 程来设置。 8237A的引脚功能-6???[15]HRQ:总线保持请求(hold request),输出,由8237A发给CPU, 作为系统的DMA请求信号。 [16]HLDA:总线保持响应(hold acknowledge),输入,由CPU发给 8237A,作为HRQ的响应信号。 [17]EOP#:DMA传输结束,即过程结束(end-of-process),双向。 作为输入信号时,DMA过程被强制结束。作为输出信号时,当通道 计数结束时发出,表示DMA传输结束。不论什么情况,当EOP有效 时,都会使8237A的内部寄存器复位,即外部信号可随时结束DMA。 高位地址的产生??从以上8237A的内部结构和引脚功能可以看出,8237A只能提供 16位的存储器地址,因此它所能控制传输的数据块最大长度为 64K。为了形成20位或多于20位的物理地址,必须有一个专门的 部件来产生高位地址,这就是页面寄存器。 在PC机中,系统使用了一片74LS612作为页面寄存器,仅使用了 它的低4位,它(作为高4位)与8237A送出的16位地址共同形成20 位的物理地址。 从模块8237A的信号配合???当CPU把数据送到8237A的寄存器或者从8237A的寄存器取出数据 时, 8237A就像 I/O接口一样 作为总线的 从模块工作 。这时, 8237A接收16位地址,用较高的12位地址产生片选信号,据此判 断本片是否被选中,用低4位地址来选择内部寄存器; 8237A作为从模块时,CS#和HRQ一定为低电平;此时,用IOR# 和IOW#作为读/写控制端,当IOR#为低电平时,CPU可以读取 8237A的内部寄存器的值,当IOW#为低电平时,CPU可以将数据 写入8237A的内部寄存器中。 CPU对8237A进行读/写时,AEN为低电平。 ?当8237A作为主模块工作时,它会往总线上提供要访问的内存地址,地址 主模块8237A的信号配合-1 的低位字节放在A7~A0,而地址的高位字节放在DB7~DB0。此时,AEN信号 为高电平,此信号有两个用处,一是使外部锁存器处于允许状态(见8237A 的内部编程结构和外部连接图),这样,使得由DB7~DB0送到锁存器的地址 高位字节送往地址线A15~A8,二是使与CPU相连的两个地址锁存器停止工 作。 主模块8237A的信号配合-2??DMA传输时,最高4位地址A19~A16不是从8237A得到的,而是在 DMA传输之前,用指令将高4位地址送到一个4位的I/O端口中。 在DMA传输时,此端口在地址允许信号AEN作用下保持恒定的4位 地址输出。所以,DMA传输时,每次传输字节限制在216以下。 作为主模块工作时,8237A还必须输出必要的读/写信号,这些信 号为IOR#、IOW#、MEMR#、MEMW#,它们分别是I/O读信号, I/O写信号、存储器读信号和存储器写信号。 DMA的工作方式?8237A的每个通道可以用4种模式之一工作。?模式的选择是通过对模式寄存器的第6、7位进行设置而实现 的。单字节传输模式 块传输模式 请求传输模式 级联传输模式?这4种工作模式如下列出:? ? ? ? 8237A内部寄存器-1?8237A的内部可编程寄存器主要有10种,在下 表中列出,下面分述。? ? ? ? ?[1]基字节数寄存器 [2]基地址寄存器 [3]当前字节计数寄存器 [4]当前地址寄存器 [5]方式寄存器 8237A内部寄存器-2?? ? ? ?[6]命令寄存器 [7]请求寄存器 [8]屏蔽寄存器 [9]状态寄存器 [10]暂存寄存器 8237A内部寄存器一览名 称当前地址寄存器 当前字节计数寄存器 基地址寄存器位数16 16 16数 量4 (每通道一个) 4 (每通道一个) 4 (每通道一个)基字节计数寄存器工作方式(模式)寄存器 命令寄存器 状态寄存器166 8 84 (每通道一个)4 (每通道一个) 1 (4个通道公用一个) 1 (4个通道公用一个)请求寄存器屏蔽寄存器 暂存寄存器44 81 (每通道1位)1 (每通道1位) 1 (每通道1位) 8237A的内部端口一览表 8237A命令寄存器格式D D D D D D D D7 6 5 4 3 2 100 ? ? ? ? ?? ? ? ?¨ ? ? ? ? ? ? ° ? ? ? ? ? 1 ? ? ? ? ?? ? ? ?¨ ? ? ? ? ? ? ° ? ? ? ? ? 0 ? ? ¨? 0° ?? ? ? ? ? ? ? ° ? ? ?? ? ? 1 ? ? ¨? 0° ?? ? ? ? ? ? ? ° ? ? ?? ? ? X D0=0? ? é ?? ?? ? ?? 0 ? ? 8237A? ? ? ? ¤? 1 ? ? 8237A? ? ? ? ¤? 0 ? ì ?? ? ? ? ? 1 ? ì ?? ? ? ? ? X D0=1 ? ? ? ?? ?? é ?? 0 ? ± ? ? ? ? ¨? ? ¨ 1 ? ? ? ? ? ? ?? ? ¨ 0 ? ? ? ? ? ? ? ? ? ? ? ê 1 ? ? ? ? ? ? ? ? ? ê X D3=1 ? ? ? ?? ?? é ?? 0 1 DREQ? ° ? ? ? ? ? ? ? § DREQ° ° ? ? ? ? ? ? ? §0 DACK° ° ? ? ? ? ? ? ? § 1 DACK? ° ? ? ? ? ? ? ? §8237A? ? ? ? ? ? ? ? ? ? ? ?ê ? D7D D D D D 8237A工作方式寄存器6 5 4 3 2D1D000 01 10 11 00 01 10 11 XX 0 ? ? ? ? ¤? ? ? ?± ? ? 1 ? ? ? ? ¤? ? ? ?± ? ? 0 ? ê ? ?í 1 ? ? ° ? ? 1 ? ê ? ?ì 1 ? ? ° ? ? 00 01 10 11 ? ? ¤ ° ? ? ± ? ? ¨ ? ? ? ? ?? ? ° ? ? § ¨ ? ? ? ? ¨ ? ¨ ? ? ? ? ? ?? ? ? ? ? ?? ? ? ? ? ?? ? ? ??? ? ? ? ? ? ? ?ê ? ê ? ê ? ê ?¨? ? ° ¨? ? ° ¨? ? ° ¨? ? °0 1 2 3? ° ¨ ? ? ? ? ? ? ¨ ? ? ? ? ? ¨ ? ± ? ? ? ¨ ?? ? D7D6=11? ? ? § ? ? ? ? ?8237A? ?? ? ¤ ??? ? ? ?ê ? ? ? ? ? ?(? ? ? ? ?ê ? ) ? ? ? ? ? ? ? 8237A请求寄存器格式? ? ? ?D7D6D5D4D3D2D1D000 01 10 11 0 ? ? ? ? ? ? ? ? ? ? 1 ? ? ? ? ? ? ? ? ? ?? ? ? ? ? ? ? ?? ê ? ê ? ê ? ê? ° ¨? ? ° ¨? ? ° ¨? ? ° ¨?0 1 2 38237A? ° ? ? ?? ? ¨? ? ? ? ê ? D7D6D5D4D3D2D1D1 00 01 10 11 0 ? ? ? ?? ? ? ? ? ? 1 ? ? ? ?? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ê ? ê ? ê ? ê ? ? ¨° ? ? ¨° ? ? ¨° ? ? ¨° 0 1 2 38237A通道屏蔽字格式? ? ? ?8237A? ° ? ??? ? ¨? ? ? ? ê ? D7D6D5D4D3D2D1D0 ? ? 0? ?? ¨° ? ? ? ? ? 1? ?? ¨° ? ? ? ? ? 2? ?? ¨° ? ? ? ? ? 3? ?? ¨° ? ? ?8237A主屏蔽字格式? ? ? ?8237A? ? ??? ? ?? ? ? ê ? D7D6D5D4D3D2D1D0 1 1 1 1 ? ° ¨? ? ° ¨? ? ° ¨? ? ° ¨? 0? ? 1? ? 2? ? 3? ? ? è ? è ? è ? è TC? ° TC? ° TC? ° TC? °8237A状态寄存器格式1 1 1 1 ? ° ¨? ? ° ¨? ? ° ¨? ? ° ¨? 0? ? 1? ? 2? ? 3? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?8237A?? ? ? ? ? ? ? ? ? ? ?ê ? 8237A的编程步骤?按以下次序进行:(1)写入复位命令,用来清除其内部寄存器及先/后触发器。 (2)写入基地址和当前地址寄存器,先写入低8位,后写入高8位。 (3)写入当前字节和基本字节计数器,写入值为传送的字节数减1。 同样,先写入低8位,后写入高8位。 (4)写入模式字。用来指定通道的工作方式。 (5)写入屏蔽字。用来将相应通道的屏蔽开放。 (6)写入控制字。用来设置具体的操作,启动8237A开始工作。 8237A编程举例-1题设条件:??假设要利用通道0的单字节读模式,由外设输入一 个数据块到内存,数据块长度为8K,内存区首地址 为2000H,采用地址加1变化,不进行自动预置。外 设的DREQ与DACK信号均为低电平有效,普通时序, 固定优先级。试完成初始化程序与应用程序。设 8237A的口地址为FH。 8237A编程举例-2?首先确定模式字和控制字,参看下图。? ? ?? ? ? ? ?¤ ? ? ¨ ? ° ?? ? ? ° ? ? 1?? ? ?? ? ?0100100048H ? ° 0 ¨? ± ? ? ? ¨ ?? ?± ? ? ? ? ? ¤?? ? ? ? ? ? ??DACK° ? ? ? ? § DREQ° ? ? ? ? § ? ? ? ? ? ? ? ? ? ? ? ? ? ¨? ? ± ? ± ? ? ?0100000040H ?? ? ? ° ? ? ? ? ?? ? ? ? ? ? ? ?¨ ? ? ? ? ± 8237A ? ¨?? ? ? ? ? 8237A编程举例-3 13.3 8237A的操作时序??外设和内存间DMA传送时序 存储器到存储器传送时序 CLK DREQ HRQ HLDA1DMA数据传送时序-1SI SI S0 S0 S1 S2 S32 3S4S2S3S4SISISI94AEN ADSTB DB7~DB0 A7~A0 DACK READ WRITE INT EOP EXT EOP56 A15_8 7 11? ?? §? ? ° ? ? ? ?? 18 10? ?? §? ? ° ? ? ? ?? 212128237? ? _? ? ? ? ? ? ? ° DMA? ? ? ? ? ? ? ? à ? ? ? ? ? ? ? ? ? ¨ ? ?? 存储器到存储器传送时序S0 S11 S12 S13 S14 S21 S22 S23 S24 S1CLK ADSTB A7-A0 DB7-DB0 MEMR MEMW EOP11 1 A15-A8 3 2 7? ?? § ° ? ? ? 5 IN 68? ?? § ° ? ? ? 10 OUTA15-A84 9EXT EOP 13.4 8237A的编程和应用举例?PC/XT机中的DMA控制逻辑? ? ?通道功能 DMA控制电路 DMA应答控制电路 A7_A0 A1 A3_A0 PCLK DMACS RDY TO DMA RESET HOLDA IOR IOW MEMR MEMW DRQ3_DRQ0 D7_D0 CLK CS READY RESET HLDA IOR IOW MEMR MEMW DREQ3_0 DB7_0 A7_A4 U22 EOP HRO DACK0 DACK1 DACK2 DACK3 A074LS244 U12 ? ? ° ? ? ? ? ± 1G 2G 74LS04A7_A0PC/ XT 机的 DMA控 制 逻辑8237AU28 ADSTB74LS670 WA WB U10 RA ? ? ? ? RB ? ? ? ? ? ? D3_0 WRITE READTC HRQDMA DACK0BRD DACK1 DACK2 DACK3A19_A16WRTDMAPG DMAAEN 74LS373 U11 ? ? D ° ? Q ? ? ? ? OE G A15_A8 各通道功能?在PC/XT机中,用一片8237A-5构成DMA控制电路形 成4个DMA通道,提供数据宽度为8位的DMA传输。使 用固定优先级,所以通道0的优先级最高,通道3最低。 这4个DMA通道的功能分配如下:? ? ??通道0 通道1 通道2 通道3用于动态RAM的刷新 为用户保留 用于软盘DMA传送 用作硬盘DMA传送 DMA控制电路???PC/XT机中的DMA控制电路如上图所示。它由8237A-5 DMA控制 器、地址驱动器、地址锁存器和页面寄存器等器件组成。 在DMA服务期间,直接从8237A-5的A7~A4 和A3~A0 输出低8位地 址,在整个DMA传输周期中这些地址信号都是稳定的,它们被送 到地址驱动器U12(74LS244)的输入端。 仅在S1、S2状态,从数据线DB7~DB0 输出高8位地址A15~A8 ,因 此要用三态地址锁存器由ADSTB选通信号将其锁存。 DMA应答控制电路在DMA控制逻辑中,对所有想利用PC/XT机上的 8237A进行DMA传输的外设或它们的接口电路,必须 设有相应的DMA应答电路,实现与8237A进行通信联 络,包括发出DMA请求,接受8237A发回的应答信号 DACK,以及能接受表示DMA传输结束的EOP#信号而 发出中断请求等功能。? ??PC/XT机上的DMA初始化和测试程序 PC/XT机上的DMA控制器使用 磁盘DMA传输的初始化编程 第21讲思考题?教材第457页 练习题3,4 ?教材第457页 练习题2,7 第21讲习题布置 (020614) 第21集结束第1版 谢谢大家的使用! 欢迎大家提出宝贵意见! 俞建新 日 电话:3592178(逸夫馆十层中心机房) E-mail :
E-mail : yujianxn@? ? ? ? ? ? ? 第9章 计数器/定时器?本章介绍以下内容 ? 计数器定时器概述 ? 8253的工作原理 ? 8253的应用举例 9.1 计数器定时器概述??在计算机系统中往往需要一些时钟,以便实现 定时控制或延迟控制,如定时扫描、定时中断、 定时检测等等。 在另外一些场合往往需要计数器,以便对事件 进行计数。而定时功能通常是通过计数来实现 的,因此一般将两者融为一体。 定时控制或计数事件举例?? ? ?[1]分时系统的程序切换 [2]向外部设备输出周期性定时控制信号 [3]定时时间到发出中断申请 [4]外部事件统计达到规定值发出控制信号或提出中 断请求 计数器和定时器的功能?两个方面:(1)作为计数器,在设置好计数常数(即定时初值)后, 便开始减1计数,减到“0”时,输出一个信号。 (2)作为定时器,在设置好定时常数后,便进行减1 计数,并按定时常数不断地输出为时钟周期整倍数 的定时间隔。 两者区别是,作计数器时,在减到0以后,输出一 个信号后便结束;作定时器时,不断产生定时脉冲 信号。 实现定时的方法?主要有三种方法来实现定时功能 ? 软件定时 ? 不可编程的硬件定时 ? 可编程的硬件定时 软件定时?方法:?让机器循环执行某一条或一系列指令 通过正确选取指令和合适的循环次数,便很容易实 现定时功能 灵活方便节省费用,最简单的定时。 CPU的利用率太低?特点:?? ? 不可编程硬件定时?专用的芯片:?例如:555 外接电阻R和电容C 电路结构简单,价格便宜。 定时时间和范围不能由程序控制和改变?特点:? ? ? 可编程硬件定时?方法:? ? ?由微处理器的时钟信号提供时间基准 利用硬件电路和中断方法控制定时 定时时间和范围完全由软件来确定和改变??硬件部分称为可编程定时器/计数器电路 特点:???CPU利用率高 定时时间由软件设置,使用灵活方便。 定时精确,获得广泛应用。 8253芯片介绍??定时器/计数器芯片8253-5是Intel系列的定时器/计数 器芯片,被广泛应用于PC机系列,提供系统定时和系 统发声源。 同8253相兼容的芯片有8254-2等,它们的主要区别是 计数频率不同。8253-5的计数频率为5MHz,而8254-2 则可达10MHz。 9.2 8253的工作原理本节主要介绍以下内容?? ???8253框图 8253引脚信号 8253工作方式 8253编程方法 8253的内部框图D7~D0 ? ? ? ? ? ? ?? ? ? ? ? ? ? ¨? ? ° 0 ? ? ? ? ? ? ? ?CLK0 GATE0 OUT0RD WR A0 A1 CS? ? ± /?? ?¨? ? ° 1 ? ? ? ? ? ?CLK1 GATE1 OUT1? ? ? ?? ? ¨? ? ° 2 CLK2 GATE2 OUT2? ? ? ? ? ? ? ? ? ? ? ?? ? ? ? ? ? ? ?8253° ? ? ? ? ? ? ? ? ? 8253框图-1?如上图所示,8253由外部数据接口、内部控制 电路以及3个计数器通道所组成。?(1)数据总线缓冲器?这是8253和CPU数据总线的接口部件,是8位、双向、三态 的缓冲器,CPU访问8253时所有数据都经过这个缓冲器传送。?(2)读/写控制逻辑?这是8253内部操作的控制电路,它从系统控制线上接收输 入信号,然后转变成8253内部操作的各种控制信号。 8253框图-2?(3)控制字寄存器?当A1和A0都为1时,访问控制字寄存器,它从数据总线上接收 CPU送来的控制字,并由控制字的D6,D7的编码决定控制字 写入哪个通道的控制寄存器,由寄存在每个通道的控制字寄 存器里的控制字,决定每个计数器通道的工作方式、选择计 数器是按二进制或二―十进制计数、并选择每个计数器初值 的写入顺序。 8253框图-3?(4)通道0计数器、通道1计数器和通道2计数器??8253由3个同样的计数通道组成,每个计数通道都有CLK和 GATE两根输入引脚和OUT一根输出引脚。从编程的角度看, 每个计数通道的结构如下图所示。 外部输入到8253的CLK引脚上的时钟脉冲频率不能大于2MHz。 如果大于2MHz,则必需经分频后才能送到CLK端。 8253的计数通道结构? ? ? ? ? ? ? ? ? ? (CR)CRH(8? ) ? CRL(8? ) ?CLK0 GATE0? ? ¤ § ? ? ° ? (CE)CEH(8? ) ? CEL(8? ) ?OUT0? í ? ? ? ? ? ? ? ? (OL)OLH(8? ) ? OLL(8? ) ?8253? ? ? ° ? ? ? ? ¨? ? 8253的引脚信号图D7 D6 D5 D4 D3 D2 D1 D0 CLK0 OUT0 GATE0 GND 1 2 3 4 5 6 7 8 9 10 11 12 24 23 22 21 20 19 18 17 16 15 14 13 VCC WR RD CS A1 A0 CLK2 OUT2 GATE2 CLK1 GATE1 OUT18253 ? ? à ? ? ? ? ? ? ?8253 8253引脚信号1??参看前面的8253引脚信号图D7~D0 数据信号?双向、三态引脚。用于同数据总线连接。 低电平有效。由地址总线经I/O端口译码电路产生。只有当CS为低 电平时,CPU才能对8253进行读写操作。 低电平有效。当RD#为低电平时,表示CPU正在读取所选定的计 数器通道中的内容。?CS# 片选信号??RD# 读信号? 8253引脚信号2?WR# 写信号?低电平有效。当WR#为低电平时,表示CPU正在将计数初值 写入所选中的计数通道中或者将控制字写入控制字寄存器中。 在8253内部有3个计数器通道(0~2)和一个控制字寄存器端口。 ? A1A0=00时,选中通道0 ? A1A0=01时,选中通道1 ? A1A0=10时,选中通道2 ? A1A0=11时,选中控制字寄存器端口?A1,A0 端口选择信号? 8253寄存器寻址CS RD WR A1 A0 0 0 0 0 0 0 0 0 1 1 1 1 0 0 0 0 0 0 0 0 1 1 1 1 0 0 1 1 0 0 1 1 0 1 0 1 0 1 0 1 ? ? ?? ê ? ? ? ? ? ? ? ? ? ? ?? ? ¨? ? ? ? ? ? ? ? 0? ° ? ? ? ? ? CR0 ? ? ¨? ? ? ? ? ? ? ? 1? ° ? ? ? ? ? CR1 ? ? ¨? ? ? ? ? ? ? ? 2? ° ? ? ? ? ? CR2 ? ? í ¨? ? ? ? ? ? ? ? ? 3? ? ° ° ? ? ? ? ? ? ¨? ? ? ? ± 0? ° ? ? ? OL0 ? ¨? ? ? ? ± 1? ° ? ? ? OL1 ? ¨? ? ? ? ± 2? ° ? ? ? OL2 ? ? ? ? ? ? A1A0引脚接线方法 1?8088系统的接线方法?只要将A1A0分别与地址总线的最低两位A1,A0相连即可。比如,在以 8088为CPU的PC/XT机中,地址总线高位部分(A9~A4)用于I/O端口译码, 形成选择各I/O芯片的片选信号,低位部分(A3~A0)用于各芯片内部端口 的寻址。若8253的端口基地址为40H,则通道0,1,2和控制字寄存器 端口的地址分别为40H,41H,42H和43H。 A1A0引脚接线方法 2?8086系统的接线方法? ??与8088系统接线方法不同。地址线A0不再参与选择8253中的 各个端口。 改用地址总线中的A2A1实现端口选择,即将A2连到8253的A1 引脚,而将A1与8253的A0引脚相连。 若8253的基地址为0F0H(B),因A2A1=00,所以它 也就是通道0的地址;A2A1=01选择通道l,所以通道l的地址 为0F2H(B);A2A1=10,选择通道2,即口地址为 0F4H(B);A2A1=11选中控制字寄存器,即口地址为 0F6H(B)。 8253引脚信号3?8253的3个计数通道在结构和功能上是完全一 样的,每个通道都有一个时钟输入引脚CLK、 一个输出引脚OUT和一个门控引脚GATE。下面 介绍这3根引脚的功能。 8253引脚信号4?CLK 时钟输入引脚???每个通道的计数器单元CE,对CLK输入脉冲进行计数。CLK脉 冲可以是系统时钟脉冲,也可以由系统时钟分频或者是其它 脉冲源提供。这个输入脉冲可以是均匀的、连续的、周期精 确的,也可以是不均匀的、断续的、周期不定的。 若8253用作分频器,工作于定时器方式时,则CLK输入是连续 的、周期精确的时钟脉冲,而OUT输出必定是频率降低的、周 期精确的时钟脉冲。 若8253用作计数器,这时要求CLK输入只是脉冲的数量,而不 是脉冲的时间间隔,所以CLK可以输入周期不定的脉冲。当然 也可以输入周期确定的脉冲。当计数到预置的数值后,就从 OUT端输出一个脉冲。若CLK的脉冲周期不定,则OUT输出的 脉冲周期也不确定。 8253引脚信号5?OUT 脉冲输出引脚?减1计数到零/定时时间到的脉冲输出引脚。不管8253工作于 何种方式,当计数器减1计数到零时,在OUT引脚上必定有电 平或脉冲信号输出。 这是一根外部控制计数器工作的信号线,通常当GATA为低电 平时,就禁止通道的计数单元计数。?GATE 门控输入引脚? 8253控制字寄存器?控制字寄存器是一种只写寄存器,在对8253进行编程时,由 CPU用输出指令向它写入控制字,来选定计数器通道,规定各 计数器通道的工作方式,读写格式和数制。控制字的格式如下 图所示。 D78253的控制字格式D D D D6 5 43D2 D1D0 BCD 1 0 000 001 X10 X11 100 101 ? ? ?? ? ? ?? ? ? ?? ? ? ?? ? ? ?? ? ? ?? 0 1 2 3 4 5 BCD? ? ? ? ? ? 2? ? ? ? ? ? ? ?SC1 SC0RL1 RL0M2 M1 M000 01 10 11 00 01 10 11 ? ? ? ? ? ? ? ? ê ¨? ? ? ° 0 ê ¨? ? ? ° 1 ê ¨? ? ? ° 2 § ?? ? ? ? ? ? ? ?? ? ? ± ? ± ? ±?? ? ? ? ? ? ? ? ? CPU± ? /? ? ? ? ° ?? ? ? ? ?? ? ? /? ? ? ? ? ?? ? ? ? ?? ? ? /? ? ? ? ° ?? ? ? ± /? ? ?? ? ? ? ?? ? ? ? ? ? ? ? ? ?8253? ? ?? ? ? ? ? ê ? 8253控制字说明1?SC1SC0――通道选择位?由于8253内部有3个计数通道,需要有3个控制字寄 存器分别规定相应通道的工作方式,但这3个控制 字寄存器只能使用同一个端口地址,在对8253进行 初始化编程,设置控制字时,需由这两位来决定在 向哪一个通道写入控制字。选择SC1SC0=00,01, 10分别表示向8253的计数器通道0~2写入控制字。 SC1SC0=11时无效。 8253控制字说明2?RL1RL0――读/写操作位?用来定义对选中通道中的计数器的读/写操作方式。 当CPU向8253的某个16位计数器装入计数初值,或 从8253的16位计数器读入数据时,可以只读写它的 低8位字节或高8位字节。RL1RL0组成4种编码,表 示4种不同的读/写操作方式 。 读/写操作字段的定义????RL1RL0=01,表示只读/写低8位字节数据,只写入低8位时, 高8位自动置为0。 RL1RL0=10,表示只读/写高8位字节数据,只写入高8位时, 低8位自动置为0。 RL1RL0=11,允许读/写16位数据。由于8258的数据线只有8 位(D7~D0),一次只能传送8位数据,故读/写16位数据时必 须分两次进行,先读/写计数器的低8位字节,后读/写高8 位字节。 RL1RL0=00,把通道中当前数据寄存器的值送到16位锁存器中, 供CPU读取该值。 8253控制字说明3?BCD――计数方式选择位??当BCD位为1时,采用BCD码计数,写入计数器的初值用BCD 码表示,初值范围为H,其中0000表示最大值 10000,即104。例如,当我们预置的初值n=1200H时,就表 示预置了一个十进制数1200。 当BCD位为0时,则采用二进制格式计数,写入计数器中的初 值用二进制数表示。在程序中,二进制数可以写成16进制数 的形式,所以初值范围为0000~FFFFH,其中0000表示最大 值65536,即216。这时,如果我们仍预置了一个初值 n=1200H,就表示预置了一个十进制数4608。 8253控制字说明4?M2M1M0――工作方式选择位?8253的每个通道都有6种不同的工作方式,即方式 0~5。当前工作于哪种方式,由这3位来选择。每种 工作方式的特点、计数器的输出与输入及门控信号 之间的关系等问题,将在后面作进一步介绍。 8253初始化编程步骤刚接通电源时,诸如8253之类的可编程外围接口芯片 通常都处于未定义状态,在使用之前,必须用程序把 它们初始化为所需的特定模式,这个过程称为初始化 编程。对8253芯片进行初始化编程时,需按下列步骤 进行: ? (1)写入控制字 ? (2)写入计数初值? 8253初始化编程举例1在某微机系统中,8253的3个计数器的端口地址分别为 4E0H、4E2H和4E4H,控制字寄存器的端口地址为 4E6H,要求8253的通道0工作于方式3,并已知对它写 入的计数初值n=1234H,则初始化程序如下:? 8253初始化编程举例2MOV AL,B ;选择通道0,先读/写低字节 ;后高字节,方式3,BCD计数 MOV DX, 4E6H ;指向控制口 OUT DX, AL ;送控制字 MOV AL, 34H ;计数值低字节 MOV DX, 4E0H ;指向计数器(通道)0 端口 OUT DX, AL ;先写入低字节 MOV AL, 12H ;计数值高字节 OUT DX, AL ;后写入高字节 门控信号的控制功能?门控信号GATE在各种工作方式中的控制功能如下表所示,其中符 号“―”表示无影响。GATE? ° ° ? ? ? ? ? § ? ? ? ? ? ° ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? í ? ? ? ? ? ? ,? ? ? ?? ? ? ? ? ? ? í ? ? ? ? ? ? ,? ? ? ?? ? ? ? ? ? ? ? ? ? ? GATE? ? ? ? § ? ? ? ? ? ? ì ? ° § ? ? ? ? ? ? ? ? ? ? ? ? ? ,? ? í ?? ? ? í ? § ? ? ? ? ? ? ? ? ? ?? ° ° ? ? ì ° § ? ? ? ? ? ? ? ? ? ? ? ì ° § ? ? ? ? ? ? ? ? ? ? ? ? ? ì ° § ? ? ? ? ? ? ? ? ? ? GATE? ? ° ? § ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?? ??? ¤?? ? ?? 0 ? ? ?? 1 ? ? ?? 2 ? ? ?? 3 ? ? ?? 4 ? ? ?? 5 ? ? 8253的工作方式?8253的每个通道都有6种不同的工作方式,现 在介绍如下:? ? ? ? ? ?方式0 方式1 方式2 方式3 方式4 方式5计数结束中断方式 可编程单稳态输出方式 比率发生器 方波发生器 软件触发选通 硬件触发选通 CLK GATE(? ° ? ) ? ? ? § ? ? ? ? ? ? ? 8253工作方式0的时序图 5 OUT GATE 5 OUT ? ? ? ? ? ? ? ? 4 ? ? ? ? ? ? ? ? 3 2 1 0 4 3 2 1 0 WR (n=5) ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?8253? ??? 0° ? ? ? ¤?? ? ? ?? ? 8253工作方式1的时序图CLK GATE WR (n=5) OUT ? ? § ? ? ? ? ? ? ? ? ? GATE OUT 5 ? ? ? ? ? ? ? ? 4 3 2 5 4 3 2 1 0 § ? ? ? ? ? ? ? 4 3 2 ? ? ? ? ? ? ? ?5108253? ??? 1° ? ? ? ¤?? ? ? ?? ? CLK GATE (? ° ? ) ? ? ?§ ? ? ? ? ? ? ? 8253工作方式2的时序图 WR ? ? ? ? ? ? ? ? (n=5) OUT GATE OUT 1 5 4 3 2 0(5) 4 3 2 ? ? ? ? ? ? ? ? ? ? § ? ? ? ? ? ? ? ? ? 1 5 4 5 4 3 2 ? ? ? ? ? ? ?± ? ? ? ? 0(5) 4 3 ? ? ? ? ? ? ?± ? ? ? ? 1 0(5) 4 ? ? ? ? ? ? ?± ? ? ? ?8253? ??? 2° ? ? ? ¤?? ? ? ?? ? CLK GATE (? ° ? ) ? ? ? § ? ? ? ? ? ? ?? ? ? ? ? ? ? ? 8253工作方式3的时序图 WR 5 4 3 2 2 1? ? ? ? ? ? ?± ? ? ? ? 0(5) 4 3 2? ? ? ? ? ? ?± ? ? ? ? 1 0(5) 4OUT (n=5) OUT (n=4)? ? ? ? ? ? ?± ? ? ? ? 4 3 1 0(4) 3 2 1? ? ? ? ? ? ?± ? ? ? ? 0(4) 3 2 18253? ??? 3° ? ? ? ¤?? ? ? ?? ? CLK GATE(? ° ? ) ? ? ? (n=5) OUT GATE OUT 5 4 3 2 1 0 § ? ? ? ? ? ? ? 8253工作方式4的时序图 WR ? ? ? ? ? ? ? ?? ? ? ? ? ? ? ? ? ? § ? ? ? ? ? ? ? ? ? 5 4 5 4 3 2 1 08253? ?? ? 4° ? ? ? ¤??? ? ?? ? 8253工作方式5的时序图CLK WR (n=5) GATE OUT GATE OUT 5 5 § ? ? ? ? ? ? ? 4 3 2 ? ? ? ? ? ? ? ? 1 0 ? ? § ? ? ? ? ? ? ? ? ? 4 3 2 5 4 3 2 1 08253? ??? 5° ? ? ? ¤?? ? ? ?? ? 9.3 8253应用举例??8253芯片可以用在微型机系统中,构成各种计数器、 定时器电路或脉冲发生器等。使用8253时,先要根据 实际需要设计硬件电路,然后用输出指令向有关通道 写入相应的控制字和计数初值。也就是对8253进行初 始化编程。此后8253就可以工作了。 由于8253的3个计数通道是完全独立的。因此可以分别 对它们进行硬件设计和软件编程, 使三个通道工作于 相同或不同的工作方式。 8259应用举例1用8253产生各种定时波形? ?某个以8086为CPU的系统中使用了一块8253芯片,通道 的基地址为310H,所用的时钟脉冲频率为1MHz。 指定3个计数通道分别完成以下功能:(1)通道0工作于方式3,输出频率为2kHz的方波 (2)通道1产生宽度为480μs的单脉冲 (3)通道2用硬件方式触发,输出单脉冲,时间常数为26。?据此设计的硬件电路如下图所示。 8253定时波形产生电路M/IO A9 A8 A7 A674LS138G1 G2A Y4CLK0 CLK1 CLK21MHz?? ? ¨8253CS GATE0 OUT0 GATE1 A1 A0 RD WR D7~D0 OUT1 GATE2 OUT2 ? í ? ? ? ? 480? s? ° ? ? ? ? ¤ í ? +5V 2KHz?? ? ¨8086 CPUA5 A4 A3 A0 A2 A1 RD WRG2B C B AD7~D0 初始化程序清单1;通道0初始化程序 MOV DX, 316H ;控制口地址 MOV AL, B ;通道0控制字,先读写低字节 ;后高字节,方式3,BCD计数 OUT DX, AL ;写入方式字 MOV DX, 310H ;通道0口地址 MOV AL, 00H ;低字节 OUT DX, AL ;先写入低字节 MOV AL, 05H ;高字节 OUT DX, AL ;后写入高字节 初始化程序清单2;通道1初始化程序 MOV DX, 316H MOX AL, B ;通道1方式字,先读写低字节 ;后高字节,方式1,BCD计数 OUT DX, AL MOV DX, 312H ;通道1口地址 MOV AL, 80H ;低字节 OUT DX, AL MOV AL, 04H ;高字节 OUT DX, AL 初始化程序清单3;通道2初始化程序 MOV DX, 316H MOV AL, B ;通道2控制字,只读写低字节 ;方式5,BCD计数 OUT DX, AL MOV DX, 314H ;通道2口地址 MOV AL, 26H ;低字节 OUT DX, AL ;只写入低字节 8259应用举例2?下面是一个用8253来控制一个LED发光二极管的点亮 控制LED的点亮或熄灭 和熄灭的例子,要求点亮10秒钟后再让它熄灭10秒钟, 并重复上述过程。加上适当的驱动电路后,便可以用 在交通红绿灯控制,高层建筑物顶层高度指示和灯塔 信号发送等场合。 LED控制系统工作原理1?假设这是一个8086系统,8253的各端口地址为81H、83H、85H和 87H。下图是其硬件电路。8253的8根数据线D7~D0与CPU的高8位 数据线D15~D8相连,这样才能选中奇地址端口。通道1的OUT1与 LED相连,当它为高电平时,LED点亮,低电平时,LED熄灭。只要 对8253编程,使OUT1输出周期为20秒,占空比为1:1的方波,就能 使LED交替地点亮和熄灭10秒钟。若将频率为2MHz(周期为0.5μs)的 时钟直接加到CLK1端,则OUT1输出的脉冲周期最大只有 0.5μs*μs=32.768ms,达不到20秒的要求。为此,需 用几个通道级联的方案来解决这个问题。 8253的应用举例M/IO A7~A3, A0+5V CS GATE0 GATE1 CLK0 OUT0 CLK1 OUT1 2MHzI/O ? ? ? ?A2 A18253A1 A0 A7_A0 WR RDD15~D8 WR RDLED8253? ? ? ? ? ? ? LED° ? ? ? ? ? ? ? ? ? ? ? á ? ¨é LED控制系统工作原理2?如图所示,将频率为2MHz的时钟信号加在CLK0输入端, 并让通道0工作于方式2。若选择计数初值N0=5000,则 从OUT0端可得到序列负脉冲,其频率为2MHz/5000= 400Hz,周期为2.5ms。再把该信号连到CLK1输入端, 并使通道1工作于方式3。为了使OUT1输出周期为20秒 (频率为1/20=0.05Hz)的方波,应取时间常数N1= 400Hz/0.05Hz=8000。 LED控制器初始化程序MOV AL, B ;通道0控制字,先读写低字节, ;后高字节,方式2,BCD计数 OUT 87H, AL MOV AL, 00H ;计数初值低字节 OUT 81H, AL MOV AL, 50H ;计数初值高字节 OUT 81H, AL MOV AL, B ;通道1控制字,先读写低字节, ;后高字节,方式3,BCD计数 OUT 87H, AL MOV AL, 00H ;计数初值低字节 OUT 83H, AL MOV AL, 80H ;计数初值高字节 OUT 83H, AL 8253在PC/XT机中的应用??在PC/XT机中,使用8253-5作计数器/定时 器电路。参看下面的电路连接图。 三个计数通道的用途分别如下:? ??计数通道0---实时时钟 计数通道1---动态RAM刷新定时器 计数通道2---扬声器音调控制 8253在PC/XT机中的接线图DACK0BRD PB0 ? ? 8255A-5? ?+5VGATE0 GATE1 GATE2OUT0+5VIRQ0 ? ° 8259A8253-5D 74LS175 U21 Q CLK0 CLK1 CLK2 IOR IOW T/C CS A1 A0 D7~D0 RD WR CS A1 A0 D7~D0 U26 D S Q74LS175 U21OUT1 C CLRDRQ0 ? ° 8237A-5PCLK 2.38636MHz RESETDRVCQOUT2T/C2 0UT ? è ? ?? ? ? ? ° ? ? ? ? ? ° ? 第17讲思考题?教材第339页 练习题1,2,3 ?教材第339页 练习题4 第17讲习题布置 (020522) 课堂练习1 作业情况小结主讲教师:俞建新 助教:徐晓飞
课堂练习1题目说明? ?课堂练习1题目:教材第214页练习题1 题目内容:?编制一个程序将AX中的4位BCD码转换成二进制数。 课堂练习1作业情况小结??算法分析:作业中主要使用了以下几种算法:? ?假设BCD码存在AX,为0ABCDH。 同学们主要使用了以下三种算法:???[1]依次取出各位(千位A,百位B,十位C,个位D),并乘以其权值 (,10,1)累加到总和中。 ? 有多种具体实现方法。例如有的用循环,每循环一次乘数除10。 [2]sum=0,sum=sum*10+千位A, sum=sum*10+百位B, sum=sum*10+十位C,sum=sum*10 +个位D [3]A,C取出乘十,分别与B,D相加,得到10A+B和10C+D。 再将 10A+B乘100加上10C+D,即得结果。 课堂练习1作业情况小结错误分析作业中主要出现以下一些错误:? ? ???(1)MUL,DIV指令的使用错误使用MUL 时被乘数、乘数的错误格式; MUL后跟立即数; DIV同MUL(2)移位位数超过一位时,没有把移位次数先放入CL。 (3)数据类型不匹配,例如:将1000d放入AL等8位寄存器。 (4)LOOP后CL会自动减一,有的同学用DEC CL重复减一。 (5)PUSH一次后,反复POP,结果除了第一次POP出正确值外,后面的 POP都获得无效值。 课堂练习1作业情况小结错误分析作业中主要出现以下一些错误:??(6)加上30H进行ASCII判断后,乘法运算时没有减去30H恢复原值 (7)进行乘法运算之前没有保存AH或DX中有用值 (8)该用JMP的地方用CALL (9)绝大多数同学的程序都不够完整,比如缺少段定义,程序开始处缺少返 回信息压栈,结束处缺少RET或INT 21H等。 典型汇编程序1code segment assume cs:code main proc far start: push ds mov ax,0 push ax mov mov and mov shr mov mul add mov mov and mov ax,1234h bx,ax bl,0fh cl,4 al,cl cl,10d cl al,bl bl,al al,bh al,0fh cl,100d邓维同学解答mul cl push bx mov bh,0 add ax,bx pop bx mov mov mov mov shr mov mov and mul add ret bl,al al,bh bh,ah cl,4 al,cl cx,1000d ah,0 al,0fh cx ax,bxmain endp code ends end start 典型汇编程序2data segment ten dw 10d data ends code segment assume cs:code,ds:data main proc far start: push ds mov ax,0 push ax mov ax,data mov ds,ax龚永恩同学解答mov mov mov mov l1: cx,4 ax,1234h bx,ax ax,0mul ten push cx mov cl,4 rol bx,cl pop cx mov dx,bx and dx,000fh add ax,dx loop l1 ret main endp code ends end start 典型汇编程序3data segment ten dw 10d hun db 100d data ends code segment assume cs:code,ds:data start: mov ax,data mov ds,ax mov mov and mov ax,1234h bx,ax ax,0f0f0h cx,4戴静安同学解答shr mul and add mov mul mov add ax,cl ten bx,0f0fh bx,ax al,bh hun bh,0 ax,bxmov ax,4c00h int 21h code ends end start 典型汇编程序3的处理流程? ? 1 ? ?A CABCDBD? ? 2 ? ?A A A*10 C*10 C C ? ? 4? ? ? ? ? 10 ? 典型汇编程序3的处理流程? ? 3 ? ?A*10 C*10+C*10+DBDA*10+B? ? 4 ? ?A*10+B? 100 ?A*1000+B*100+A*1000+B*100+C*10+DC*10+D 第17集结束第1版 谢谢大家的使用! 欢迎大家提出宝贵意见! 俞建新 日 电话:3592178(逸夫馆十层中心机房) E-mail :
E-mail : yujianxn@? ? ? ? ? ? ?
更多相关文档

我要回帖

更多关于 中断控制器8259a 的文章

 

随机推荐