【沧海拾昧】微机原理:可编程中断控制器8259A芯片

 #C0306


沧海茫茫千钟粟,且拾吾昧一微尘

——《沧海拾昧集》@CuPhoenix


【阅前敬告】

沧海拾昧集仅做个人学习笔记之用,所述内容不专业不严谨不成体系

如有问题定为本集记录有谬,切勿深究


目录

一、Inter 8259A芯片

1、8259A的主要功能

2、8259A的内部结构

3、8259A的引脚及功能

二、Inter 8259A的工作方式

1、中断触发方式

2、中断屏蔽方式

3、中断嵌套方式

4、中断优先级方式

5、结束中断的处理方式

6、连接系统总线的方式

7、查询方式

8、读8259A的状态

三、Inter 8259A的初始化

1、初始化命令字 ICW1

2、初始化命令字 ICW2

3、初始化命令字 ICW3

4、初始化命令字 ICW4

5、操作命令字 OCW1

6、操作命令字 OCW2

7、操作命令字 OCW3


一、Inter 8259A芯片

1、8259A的主要功能

  • 在有多个中断请求时,8259A能判别中断源的优先级,一次可以向CPU送出一个最高级别的中断请求信号;
  • 一片8259A可以管理8级中断,并且在不增加任何其它电路的情况下,可以多片8259A级联,形成对多于8级的中断请求的管理。最多可以用9片8259A来构成64级的主从式中断管理系统;
  • 可以通过编程,使8259A工作在不同的工作方式下,使用起来灵活方便;
  • 单电源+5V,NMOS工艺制造。

2、8259A的内部结构

8258A结构示意图
  • 中断请求寄存器(IRR)

        一片8259A有8条外界中断请求线IR0~IR7,每一条请求线有一个相应的触发器来保存请求信号,从而形成了中断请求寄存器。外设产生中断请求方式有两种:一种是边沿触发,上升沿触发;另一种电平触发,输入信号保持高电平触发。用户可根据需要通过编程来实现。

  • 中断屏蔽寄存器(IMR)

        由用户编程进行设置,可以对IRR中的相应的中断源进行屏蔽,对于较高优先权的屏蔽不影响较低优先权的输入。

  • 优先权电路

        对保存在IRR中的各个中断请求,经过判断确定最高的优先权,并在中断响应周期把它选通至在服务寄存器(ISR)。

  • 当前服务寄存器(ISR)

        储存当前正在服务的中断源的标志。ISR的置位是在中断响应的第一个INTA有效时完成的。

  • 控制逻辑电路

        在8259A的控制逻辑电路中,有一组初始化命令字寄存器(对应ICW1~ICW4)和一组操作命令字寄存器(对应OCW1~OCW3),这7个寄存器均可由用户根据需要通过编程来设置。控制逻辑可以按照编程所设置的工作方式来管理8259A的全部工作。

  • 数据总线缓冲器

        这是一个8位的双向、三态缓冲器,用作8259A与系统数据总线的接口,用来传输初始化命令字、操作命令字、状态字和中断类型码。

  • 读/写控制逻辑

        接收来自CPU的读/写命令,完成规定的操作。具体动作由片选信号CS*,地址输入信号A0,以及读RD*和写WR*信号共同控制

  • 级联缓冲/比较器

        这个功能部件用在级连方式的主-从结构中,用来存放和比较系统中各8259的从设备标志(ID)。

3、8259A的引脚及功能

  • D0~D7:数据信号引脚,双向信号,用于与CPU之间的信息传输;
  • A0:地址选择信号,输入,用来对内部寄存器进行选择。8259A的内部寄存器占外设的两个地址,称为奇地址和偶地址;
  • CS*:片选信号,输入;
  • RD*:读信号,输入;
  • WR*:写信号,输入;
  • IR0~IR7:中断请求引脚,输入。接来自不同外设的中断源,高电平或上升沿表示有请求;
  • INT:中断请求信号,输出,向CPU发中断请求;
  • INTA*:中断响应信号,输入,接收CPU响应中断后的应答信号。
  • CAS2~CAS0:主从级连双向信号。当系统的中断请求多于8个时,可用两个或更多的8259A级连,其中一个是主控制器,其余是从控制器。从片的INT输出接到主片的一个IR输入。
  • SP*/EN*:主从或缓冲方式,双向信号。当其为输入时,8259A处于“非缓冲方式”,由它决定该片为主片(SP* = 1)或从片(SP* = 0)。 当其为输出时,8259A处于“缓冲方式”,该信号用来控制双向总线驱动器的启动(EN*)端。这种方式常用于多片级连的大系统中

8259A 级联使用示例

二、Inter 8259A的工作方式

1、中断触发方式

  • 边沿触发方式:以上升沿向8259A请求中断,上升沿后可一直维持高电平,不会再次产生中断。
  • 电平触发方式:以高电平向8259A申请中断,但在响应中断后应及时清除高电平,以免引起第二次中断。

2、中断屏蔽方式

  • 普通屏蔽方式:利用操作命令OCW1,使屏蔽寄存器IMR中的某一位或某几位置1来屏蔽相应输入端的中断请求,若要开放某个中断源,则在相应位置0。
  • 特殊屏蔽方式:在某些场合,在执行某一个中断服务程序时,要求允许另一个优先级比它低的中断请求被响应。这时可采用特殊的屏蔽方式。即在优先级高的中服中,用OCW1将IMR中本中断的对应位置1,将本级中断屏蔽,同时将ISR(在服务寄存器)中该中断的对应位清零,对外界来说,就好像CPU此时没有处理该中断,这样,即使是最低级的中断请求,也会被CPU响应。特殊屏蔽方式一般是在最高优先级中服使用

3、中断嵌套方式

  • 一般全嵌套方式:只允许中断级别高的中断源中断级别低的中服程序,而不能相反。这是8259A的常用方式,若在对8259A初始化后,没有设置其它优先级方式,自动按此方式工作。
  • 特殊全嵌套方式(级联):允许响应同级打断同级提出的中断请求,主要用在级联系统中的主片,用于给从片提供优先级。

4、中断优先级方式

  • 固定优先级方式:优先级的顺序是固定不变的,优先级的顺序为:IR0 > IR1 > IR2 > IR3 > IR4 > IR5 > IR6 > IR7。
  • 循环优先级方式:优先级的顺序不是固定不变的,一个设备受到中断服务后,其优先级自动降为最低。再根据OCW2的D6的值,又分两种:一种是初始优先级为IR0>IR1>……>IR6>IR7 ,另一种初始优先级是可以指定的。

5、结束中断的处理方式

        当8259A的某个中断源顺利申请CPU中断时,在ISR中这个中断源的对应位置位,结束中断的处理方式就是对ISR中的该位进行处理。

  • 自动中断结束方式:在中断服务子程序运行之前(第二个INTA)自动清除该中断所对应的ISR位。这种方式用在中断不会嵌套的系统中。
  • 非自动中断结束方式:在中服程序的最后,中断返回之前,需要用软件发送清除ISR对应位的命令。分两种情况:
    • 正常的EOI命令,该命令使ISR中为1的当前优先级最高的那一位复位;
    • 特殊的EOI命令,在特殊的全嵌套方式下,只根据ISR的对应位是无法确定哪一级中断是最后响应和处理的,所以在程序中要发一指定的EOI命令,向8259A指出要清除的ISR中的具体位。一般用于复杂的多片级联系统中。

6、连接系统总线的方式

  • 缓冲方式:在多片级连的大系统中,要求数据总线有总线缓冲器(考虑主片带负载能力不足)。8259A与这种带总线缓冲器的系统总线连接的方式称缓冲方式。此时SP*/EN*用于输出,启动缓冲器工作,不能用作表示主从关系。故需要在初始化设置中设置专用位来表示级联系统中的主从关系。
  • 非缓冲方式:若在小系统中,8259A的D7~D0可以直接与总线连接,不需要总线缓冲器,这种方式称为非缓冲方式,此时,SP*/EN*用作输入,用于表示级联系统中的主从关系,即该引脚接高电平表示该芯片为主片,接低电平表示该芯片为从片。

7、查询方式

        外设以上升沿或高电平通过8259A向CPU申请中断,但8259A却不使用INT信号向CPU申请中断,只是等待CPU用软件查询8259的状态以确定中断源,并用程序转入相应的处理程序。

8、读8259A的状态

        8259A中的寄存器IRR,ISR和IMR的内容均可由用户读出。当用户要读IRR或ISR的内容时,先要写入OCW3,由D1D0=10或11决定读出的是IRR的值还是ISR的值,然后通过一条输入指令读A0=0的端口地址即可。而当用户要读IMR的内容时,不需写入OCW3,直接用一条输入指令去读A0=1的端口地址即可。

三、Inter 8259A的初始化

  • 初始化命令字 ICW:用于8259A的设置,这些字必须在8259A进入工作之前依次设置;
命令字名称主要设置内容
ICW1触发方式、是否多片、是否使用ICW4
ICW2中断类型码
ICW3多片级联使用时设置连接关系
ICW4设置中断结束方式、是否为缓冲方式、主从片、嵌套方式等

        对每片8259A均需写入ICW1和ICW2,是否写入ICW3和ICW4均由ICW1的相应位决定。只有在级连的方式下,主、从片才须写入ICW3;仅当8086/8088系统或须设置特殊全嵌套方式、缓冲方式、自动中断结束方式时,才写入ICW4。

  • 操作命令字 OCW:在8259A经过初始化并进入操作以后,用这些字来控制8259A执行不同方式的操作,这些字可以在初始化以后的任何时刻写入8259A。
命令字名称主要设置内容
OCW1设置中断屏蔽
OCW2设置循环优先级、发结束中断命令
OCW3设置特殊屏蔽方式、发查询命令、发读IRR、ISR命令

1、初始化命令字 ICW1

A0D7D6D5D4D3D2D1D0
0×××1LITM×SNGLIC4
  • D3:规定中断请求信号的触发方式,D3=1,为电平触发方式;D3=0,为边沿触发方式;

  • D1:单片工作,D1=1;多片工作,D1=0;

  • D0:D0=1,表示初始化时须设置ICW4;若ICW4的各位都为0,则不需须设置ICW4;

2、初始化命令字 ICW2

A0D7D6D5D4D3D2D1D0
1T7T6T5T4T3×××

        ICW2用来设置中断类型码,在中断响应时将外设对应的该类型号送上数据总线。D7 ~ D3设置的T7 ~ T3为中断类型码的高5位,由用户编程时写入;低3位由IR0~IR7的管脚序号自动形成。

3、初始化命令字 ICW3

对主片:

A0D7D6D5D4D3D2D1D0
1IR7IR6IR5IR4IR3IR2IR1IR0

        对主片而言,将接有从片的位置置1,其余置0。

对从片:

A0D7D6D5D4D3D2D1D0
1×××××ID2ID1ID0

        对从片而言,用D2 ~ D0表示其接在了主片的哪个引脚上。

4、初始化命令字 ICW4

A0D7D6D5D4D3D2D1D0
1000SFNMBUFM/SAEOIuPM
  • D4:中断优先级设置,D4=1,为特殊的全嵌套模式;D4=0,为普通的全嵌套模式;

  • D3:工作在缓冲方式,D3=1;工作在非缓冲方式,D3=0;

  • D2:缓冲方式专用,若为主片D2=1,不为主片D2=0;

  • D1:D1=1,自动中断结束方式;D1=0,用中断结束命令结束中断;

  • D0:D0=1,表示初始化时须设置ICW4;若ICW4的各位都为0,则不需须设置ICW4;

5、操作命令字 OCW1

A0D7D6D5D4D3D2D1D0
1M7M6M5M4M3M2M1M0

        设置中断屏蔽寄存器IMR的内容,M7~M0代表8个屏蔽位,分别用来控制IR7~IR0输入的中断请求信号。如果某位Mi为1,则屏蔽相应的IRi输入的中断请求,如果某位Mi为0,则清除屏蔽,允许相应的IRi的中断请求信号进入优先级排队。

        IMR寄存器中的内容可以被CPU读出,直接读奇地址即可。

6、操作命令字 OCW2

A0D7D6D5D4D3D2D1D0
0RSLEOI00L2L1L0
  • D7:置1为轮换优先级,置0为固定优先级;

  • D6:置1为指定轮换 / 指定结束中断,置0为自动轮换 / 正常结束中断;

  • D5:指示该命令字是否为发送中断结束命令。置1为发送非自动结束中断结束命令,置0为该命令与中断结束命令无关,是设置优先级的命令;

  • D2D1D0:指定轮换,给出初始的最低优先级 / 指定EOI,给出复位的位置;

7、操作命令字 OCW3

A0D7D6D5D4D3D2D1D0
00ESMMSMM01PRRRIS

敬谢诸君。


金陵钟山之阳。

  • 9
    点赞
  • 61
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值