⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 中断控制器intel8259a.htm

📁 当你有了一个windows98
💻 HTM
📖 第 1 页 / 共 2 页
字号:
. . . D3 D2 D1 D0<BR>X 0 0 0 1 1 0 
0<BR>其中D2=1,是查询命令的特征位.<BR>8259A在接到CPU发来的上述格式的查询命令之后,立即组成状态字,等<BR>待CPU来读取,状态字的格式如下:<BR>D7 
. . . D3 D2 D1 D0<BR>I X X X X W2 W1 
W0<BR>若I=0,则表示该8259A芯片没有中断请求,若I=1,则表示有中断请求,W2,<BR>W1,W0即为本片中中断请求优先级别最高的中断源的编码.<BR><BR>六, 
8259A的编程<BR>8259A是可编程的集成电路芯片,这大大增加了其使用的灵活性.<BR>1.8259A的端口地址<BR>由8259A的外部结构可知:与寻址8259A内部寄存器组有关的信号包括:,A0,,等,其中是由地址译码器形成的芯片选择信号,只有该引脚为低电平时,相应的8259A芯片才工作.<BR>若8259A与8088CPU配合使用,可直接将A0与CPU的地址信号输出引<BR>脚A0相连,8259A的两个端口地址是连续的;若8259A与8088CPU配合使用,<BR>如将8259A的D7~D0接到16位数据总线的低8位,则A0应与CPU的地址信<BR>号输出引脚A1相连,此时地址码A0应取0,8259A的两个端口地址都是偶地址,<BR>,若除以2之后若仍为偶数,则为偶地址;除以2之后若为奇数,则为奇地址,<BR>即:<BR>A1<BR>A0<BR>0<BR>0<BR>――<BR>ICW1,OCW2,OCW3<BR>1<BR>0<BR>――<BR>ICW2~ICW4,OCW1<BR>A0用以区分8259A芯片中的不同寄存器组,由于8259A内部寄存器的寻址,只用到一位地址信号,所以一片8259A芯片占用系统中的两个端口地址,即偶地址和奇地址,并且规定偶地址小于奇地址.<BR>需要注意的是:8259A内部并不只有两个寄存器,为了区别不同的寄存器,需采用在有关信息中加特征位,或规定有关操作顺序的方法,来区分不同的输入/输出信息.<BR>2.8259A的初始化编程<BR>(1).引言<BR>在使用8259A之前,必须对其进行初始始化编程,以规定它的各种工作方<BR>式,并明确其所处的硬件环境.<BR>若CPU用一条输出指令向8259A的偶地址端口写入一个命令字,而且D4=1,<BR>则被解释为初始化命令字ICW1,输出ICW1启动了8259A的初始化操作,8259A的内,外部自动产生下列操作:<BR>①边沿敏感电路复位,中断请求的上升沿有效.<BR>②中断屏蔽器IMR清零,即对所有的中断呈现允许状态.<BR>③中断优先级自动按IR0—IR7排列.<BR>④清除特殊屏蔽方式<BR>8259A的初始化编程,需要CPU向它输出一个2—4字节的初始化命令字,<BR>输出初始化命令字的流程如图7-19所示,其中ICW1和ICW2是必须的,而ICW3和ICW4需根据具体的情况来加以选择.各初始化命令字的安排与作用分叙如下:<BR>图7-19 8259A初始化流程图<BR>(2).ICW1:初始化命令字1,写入8259A偶地址端口,其各位的功能及含义如下:<BR>A0 D7 D6 
D5 D4 D3 D2 D1 D0 
<BR>0<BR>×<BR>×<BR>×<BR>1<BR>LTIM<BR>×<BR>SNGL<BR>IC4<BR>D0:IC4位,用以决定是否跟ICW4,若D0=1,则说明必须输出ICW4;若D0=0,<BR>则说明不需输出ICW4.若ICW4的各位都为0,则说明不需要输出ICW4.<BR>D1:SNGL位,取决于8259A芯片是单片工作,还是多片级联工作.若8259A<BR>单片工作,则D1=1;若8259A多片级连工作,则D1=0.<BR>D2:ADI位,只用于MCS80/85系统中,规定CALL地址的间隔,在8088/8086<BR>系统中,该位无意义.<BR>D3:LTIM位,规定中断请求信号的引入方式.若D3=1,则表示中断请求<BR>信号为高电平有效;若D3=0,则表示中断请求信号为上升沿有效.<BR>⑤D4:恒定为1,为ICW1的特征位.<BR>⑥D5-7:应用于MCS80/85系统,为入口地址中的编程位,在8088/8086系<BR>统中,无意义.<BR>(2).ICW2:初始化命令字2,写入8259A奇地址端口<BR>A0 
D7 D6 D5 D4 D3 D2 D1 D0 
<BR>1<BR>T7<BR>T6<BR>T5<BR>T4<BR>T3<BR>×<BR>×<BR>×<BR>当8259A用于MCS80/85系统中时,用于确定中断入口地址的高8位(A15<BR>—A8);当8259A用于8088/8086系统中时,ICW2的D7—D3为编程设置位,<BR>作为本芯片所管理8级中断类型码的高5位.而D2—D0位为8级中断源所对<BR>应的编码(其中:000—IR0,111—IR7)编程设置对其无影响.<BR>例:若ICW2=45H,则8极中断源的中断类型码分别为IR0为40H,…,<BR>IR7为47H 
<BR>(3).ICW3:初始化命令字3,写入相应8259A的奇地址端口<BR>ICW3用于8259A的级连,8259A最多允许有一片主片和8片从片级连,<BR>使能够管理的中断源可以扩充至64个.若系统中只有一片8259A,则不用<BR>ICW3,若由多片8259A级连,则主,从8259A芯片,都必须使用ICW3,,主,<BR>从8259A芯片中的ICW3的使用方式不同.<BR>对于主8259A芯片,ICW3的格式如下:<BR>A0 
D7 D6 D5 D4 D3 D2 D1 D0 
<BR>1<BR>IR7<BR>IR6<BR>IR5<BR>IR4<BR>IR3<BR>IR2<BR>IR1<BR>IR0<BR>其中每一位对应于一片从8259A芯片,若相应引脚上接有从8259A芯片,<BR>则相应位为1;否则,若相应引脚上未接从8259A芯片,则相应位为0.<BR>例:ICW3=1110 
0010,则说明IR7,IR6,IR5,IR1上连有从片.<BR>对于从8259A芯片,ICW3的格式如下:<BR>A0 D7 D6 D5 D4 D3 D2 
D1 D0 
<BR>1<BR>1/0<BR>1/0<BR>1/0<BR>1/0<BR>1/0<BR>ID2<BR>ID1<BR>ID0<BR>从8259A芯片中的ICW3,只用其中的低3来设置该芯片的标识符,<BR>高5位全为0.在中断响应时,主8259A通过级连线CS2—CS0,依次向各个<BR>从8259A芯片输送中断请求的源中,优先级最高的源所对应的标识符,每个<BR>从8259A拿到这个标识符之后,与自己在初始化编程时,由ICW3设置的标<BR>识符进行比较,当两者相符合时,则该从8259A芯片在第二个中断响应周期,<BR>向CPU提供由ICW2设置的8位中断类型码.<BR>例:若本从片的INT接在主片的IR1引脚上,则ICW3=0000 
0001<BR>(4).ICW4:初始化命令字4,写入8259A奇地址端口, 
只有当ICW1中的<BR>D0=1时才需要设置,其各位的功能及含义如下:<BR>A0 D7 D6 D5 D4 D3 D2 D1 D0 
<BR>1<BR>0<BR>0<BR>0<BR>SFNM<BR>BUF<BR>M/S<BR>AEOI<BR>PM<BR>D0:μPM位,取决于系统中所采用微处理器的类型,若系统中的微处<BR>理器为MCS80/85,则D0=0;反之,若系统中的微处理器为8088/8086<BR>则D0=1.<BR>D1:AEOI位,规定结束中断的方式,若D1=1,则为自动中断结束方式;<BR>若D1=0,则需要用中断结束命令来结束中断.<BR>D2:M/S位,缓冲方式下使用,若D2=1,则表示为主8259A;若D2=0,<BR>则表示为从8259A.<BR>④ 
D3:BUF位,若8259A工作于缓冲方式,则D3=1;否则,D3=0.<BR>⑤ 
D3:SFNM位:若D4=1,则规定特殊的全嵌套模式;否则,若D3=0则规<BR>定普通的全嵌套模式.<BR>⑥ 
D5-7:恒定为000<BR>3.8259A的操作编程<BR>对8259A按照上述流程进行初始化编程之后,相应芯片就做好了接收中断<BR>的准备,若中断源发生了中断请求,则8259A按照初始化编程所规定的各种方式来处理这种请求.在8259A的工作期间,CPU也可以通过操作命令字,实现对8259A的操作控制,或者改变工作方式,或者实时读取8259A中某些寄存器的内容.8259A有三个操作命令字,我们分别讨论如下:<BR>(1).OCW1:中断屏蔽字,必须写入相应8259A芯片的奇地址端口,其格式如下:<BR>A0 
D7 D6 D5 D4 D3 D2 D1 D0 
<BR>1<BR>M7<BR>M6<BR>M5<BR>M4<BR>M3<BR>M2<BR>M1<BR>M0<BR>它的每一位,可以对相应的中断请求输入进行屏蔽,若OCW1的某一位为1,<BR>则相应的中断请求输入被屏蔽;反之,则相应的中断请求输入呈现允许状态.<BR>即若Mi=1,则表示8259A对IRi的中断请求呈屏蔽状态;否则若Mi=0,则表示8259A<BR>对IRi的中断请求呈允许状态.<BR>(2).OCW2:必须写入相应8259A芯片的偶地址端口,其格式如下:<BR>A0 
D7 D6 D5 D4 D3 D2 D1 D0 
<BR>0<BR>R<BR>SL<BR>EOI<BR>0<BR>0<BR>L2<BR>L1<BR>L0<BR>其中D4,D3位恒定为0,是OCW2的特征位,R,SL,EOI三位的不同组合,<BR>可以组成7种不同的操作命令,用于改变8259A的工作方式.其中三种操作命<BR>令字要用到OCW2的低三位,这三位所形成的编码指出操作所涉及到的中断源.<BR>R—用于表示优先级是否采用循环方式;<BR>SL—用于确定是否需要使用L2,L1,L0来明确中断源;<BR>EOI—用于指示OCW2是否作为中断结束命令.<BR>L2,L1,L0—当SL=1时,三位的编码用以指示8个中断源之一.<BR>R,SL,EOI共有8种不同的组合形式,其中有7种是相应的控制命令,分<BR>别介绍如下:<BR>①0,0,0:为取消自动EOI循环命令;<BR>②1,0,0:为设置自动EOI循环命令;<BR>③0,0,1:为普通的EOI命令,它适用于完全嵌套方式,在中断服务程序结束<BR>时,用于清除ISR中最后被置位的相应位.显然,只有在ICW4中的AEOI=0<BR>时,才需要在中断服务子程序中向8259A发普通的EOI命令.<BR>④0,1,1:为特殊的EOI命令,与普通的EOI命令的差别在于,它需要利用L2,<BR>L1,L0位明确指出ISR寄存器中需要被复位的位,<BR>⑤1,0,1:为普通循环的EOI命令,它在中断服务程序结束时使用,它使已置<BR>位的ISR寄存器中优先级最高的那一位复位,同时赋予刚刚结束中断处理的<BR>中断源的中断优先级最低.<BR>⑥1,1,1:为特殊的EOI循环命令,它一方面复位ISR寄存器中由L2,L1,L0<BR>位明确指出的那一位;另一方面,使L2,L1,L0位明确指出的那一个中断源<BR>的中断优先级最低.<BR>⑦1,1,0:为置位优先权命令,它用以设置优先级特殊循环方式,即利用L2,<BR>L1,L0位明确指出中断优先级最低的中断源.<BR>⑧0,1,0:非操作命令,无实际意义.<BR>(3)OCW3:必须写入相应8259A芯片的偶地址端口.其格式如下:<BR>A0 
D7 D6 D5 D4 D3 D2 D1 D0 
<BR>0<BR>0<BR>ESMM<BR>SMM<BR>0<BR>1<BR>P<BR>RR<BR>RIS<BR>D0:RIS位,用以决定下一个读操作所对应的寄存器,若D0=1,则下一个读<BR>操作读取中断服务寄存器ISR的内容;否则,读取中断请求寄存器IRR的<BR>内容.<BR>D1:RR位,决定下一个操作是否读操作,若D1=1,则下一个操作是读操作;<BR>否则,下一个操作不是读操作.<BR>D2:P位,用于8259的查询中断方式下,若D2=1,表示为查询命令;否则,<BR>表示不是查询命令.<BR>④D3—D4:恒定为10,是OCW3的特征位.<BR>⑤D5—D6:决定8259A是否为设置特殊屏蔽模式命令,若D6,D5为11,则为<BR>设置特殊屏蔽模式命令;若D6,D5为01,则为撤消特殊屏蔽模式,返回普通<BR>屏蔽模式命令;若D6=0,则D5无意义.<BR>⑥D7:无关<BR>七, 
8259A的级联<BR>所谓级联,就是在微型计算机系统中,以1片8259A的INT引脚与CPU的<BR>INTR引脚相连,称为主片;再将最多8片8259A的INT引脚,分别与主8259A<BR>的IR0-IR7相连,称为从片.显然,在主-从式8259级联的微机系统中,系统能<BR>够管理的中断源可由8级扩展至64级.<BR>图5-20 
8259A的级联<BR>主-从式8259级联系统的连接,需要注意的要点如下:<BR>* 
主片的INT引脚接CPU的INTR引脚,从片的INT引脚分别主片的IRi引<BR>脚,使得由从片输入的中断请求,能够通过主片向CPU发出;<BR>* 
主片的3条级联线与各从片的同名级联线引脚对接,主片为输出,从片为输入.主片用以向各从片发出优先级别最高的中断请求的从片代码,各从片用该代码与本片的代码进行比较,符合则将本片ICW2中预先设定中断类型码,送数据总线.<BR>* 
主片的接+5v,从片的接地.<BR>图7-20为1片主片与3片从片级联的情况.<BR>级连系统中的所有8259A都必须进行各自独立的编程,作为主片的8259A必须设置为特殊的全嵌套方式,可以避免相同从片中,优先级较高的中断请求被屏蔽的情况发生.与一般的全嵌套方式相比,有两点需要注意:<BR>当来自某个从设备的中断请求被响应之后,主片的优先权逻辑不封锁这个从片,从而可以使来自从设备的较高优先级的中断请求能被主片正常接受,并向CPU发出.<BR>中断服务结束时,必须用软件来检查被服务的中断是否为该从片中,唯一的中断请求.为此,须先向从片发一个一般的中断结束命令,清除已完成服务的ISR中的相应位,然后,再读出ISR的内容,检查是否全0,若为全0,则向主片发一个中断结束命令,清除与从设备相应的ISR中的位;反之,则不向主片发中断结束命令,因为同一从片中还有其它中断请求正在处理.<BR>八, 
8259A的应用举例<BR>例1. 
IBMPC机中,只有一片8259A,可接受外部8级中断.在I/O地址中,分配8259A的端口地址为20H和21H,初始化为:边沿触发,缓冲连接,中断结束采用EOI命令,中断优先级采用完全嵌套方式,8级中断源的中断类型分别为08H—0FH,初始化程序为:<BR>MOV 
DX,20H<BR>MOV AL,00010011B<BR>OUT DX,AL ;写入ICW1<BR>MOV DX,21H<BR>MOV 
AL,08H<BR>OUT DX,AL ;写入ICW2<BR>MOV AL,00001101B<BR>OUT DX,AL ;写入ICW4<BR>XOR 
AL,AL<BR>OUT DX,AL 
;写入OCW1<BR>......<BR>STI<BR>......<BR>例2.进入和退出特殊屏蔽方式的流程图.<BR>假定,初始化之后,8259A工作于完全嵌套方式,要求对于IR3的中断级,<BR>能够允许任何级别的中断中断其中断服务程序,即8259A按特殊屏蔽方式工作.因而在响应IR3而执行IR3的中断服务程序时,在A处,写入OCW1以屏蔽IR3,然后写入OCW3使ESMM=SMM=1,于是从A处开始,8259A进而特殊屏蔽方式,此后继续执行IR3的中断服务程序.在中断服务结束之前,再向8259A写入OCW3使ESMM=1,SMM=0,结束特殊屏蔽方式,返回到完全嵌套方式,接着写入OCW1,撤消对IR3的屏蔽,最后写入OCW2,向8259A发出EOI命令.此例,说明在IR3的中断服务程序的A处至B处,允许任何级别的中断源中断IR3的服务程序.(除本身之外)<BR>... 
IR3中断服务程序入口<BR>STI 保护现场<BR>... STI 开中断<BR>MOV AL,00001000B 服务程序<BR>OUT 21H,AL 
;OCW1 写入OCW1,使IM3=1<BR>MOV AL,01101000B 写入OCW3,使ESMM=SMM=1<BR>OUT 20H,AL ;OCW3 
继续服务<BR>... 写入OCW3,使ESMM=1,SMM=0<BR>MOV AL,01001000B 写入OCW1,使IM3=0<BR>OUT 20H,AL 
;OCW3 写入OCW2,普通的EOI命令 <BR>MOV AL,00H 中断返回<BR>OUT 21H,AL ;OCW1<BR>MOV 
AL,00100111B<BR>OUT 20H,AL ;OCW3<BR>OUT 21H,AL ;OCW3 
EOI命令<BR>例3.读8259A相关寄存器的内容.<BR>设8259A的端口地址为20H,21H,请读入IRR,ISR,IMR寄存器的内容,<BR>并相继保存在数据段2000H开始的内存单元中;若该8259A为主片,请用查询<BR>方式,查询哪个从片有中断请求.<BR>解:MOV 
AL,xxx01010B 发OCW3,欲读取IRR的内容<BR>OUT 20H,AL<BR>IN AL,20H 读入并保存IRR的内容 <BR>MOV 
(2000H),AL<BR>MOV AL,xxx01011B 发OCW3,欲读取ISR的内容 <BR>OUT 20H,AL<BR>IN AL,20H 
读入并保存ISR的内容<BR>MOV (2001H),AL<BR>IN AL,21H 读入并保存ISR的内容<BR>MOV (2002H),AL<BR>MOV 
AL,xxx0110xB 发OCW3,欲查询是否有中断请求<BR>OUT 20H<BR>IN AL,20H 读入相应状态,并判断最高位是否为1<BR>TEST 
AL,80H <BR>JZ DONE<BR>AND AL,07H 判断中断源的编码<BR>…………<BR>DONE:HLT<BR>- 
-<BR></BODY></HTML>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -