资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,微机原理与接口 实验系列,一、,IO,端口扩展,(8255),二、定时器,/,计数器,(8253),三、串口通信,(8251),四、模数转换,(ADC0809),五、数模转换,(DAC0832),六、液晶屏显示,(LCD1602),七、中断控制器,(8259),赖晓铮 博士,华南理工大学,laixz,QQ:68046508,(七),中断控制器,(8259),实验,实验内容:,构建一个,“,嵌套中断,CPU+8259”,的微型计算机系统,使嵌套中断结构的,CPU,可以通过,8259A,芯片根据中断优先级列表响应和管理多个外部中断事件。,实验目的:,理解可编程中断控制器,8259A,的内部结构和工作原理。,掌握嵌套中断结构的,CPU,通过,8259A,管理多个中断事件的方法。,微程序版,“CPU+8259”,电路图,初始化过程,时钟,信号,CLK,接,手动开关,MANUAL,,,启动仿真,使能,复位信号,#RESET=0,;,手动按钮,MANUAL,开关,“,0,1,0,”,,,然后令,信号,#RESET=1.,注:初始化完成后,若时钟信号,CLK,继续接开关,MANUAL,,则,CPU,进入手动模式,手动,MANUAL,开关,生成时钟信号,CLK,,程序单步执行;若时钟信号,CLK,接信号源,AUTO-CLK,(主频,10Hz,),则,CPU,进入自动模式,程序自动运行,直到,HLT,指令,的,“,断点,”,处,暂停。,重启过程(跳出“断点”),时钟,信号,CLK,接,开关,MANUAL,,手动,令,复位信号,端,#RESET,的状态,“1,0,1”,变化,即重启完成,跳出“断点”继续执行,。,注:跳出“断点”,后,,,CPU,进入,HLT,指令,的,后续下一条指令的取指周期,。,中断控制器,8259,应用电路,图,可编程中断控制器芯片,8259A,结构,图,INTA,D,7,D,0,INT,中断请求寄存器,中断屏蔽寄存器,数据,总线,缓冲器,IR0,IR7,读,/,写,控制,逻辑,级联,缓冲器,比较器,RD,WR,A,0,CS,CAS0,CSA1,CAS2,SP/EN,优先级分析器,中断服务寄存器,控制逻辑,8259A,主从式级联中断系统结构,图,8259A,工作方式一览,中断查询触发方式:查询字,8259A,初始化命令字,ICW1,8259A,初始化命令字,ICW2,8259A,初始化命令字,ICW3,8259A,初始化命令字,ICW4,8259A,操作命令字,OCW1,8259A,操作命令字,OCW3,IR2,中断,8259A,操作,命令字,OCW2,8259A,初始化编程,流程图,8259A,中断响应过程及示例,问题:,如何实现两次,#INTA,脉冲?,8259A,中断响应过程,时序图,实验步骤:,1,),8259A,测试程序,test_8259.asm,存放在实验,4.7,项目的子文件夹,test,里,其功能与,“,实验,3.4,嵌套中断,CPU,实验,”,的示例程序,nested_ISR,相似:主程序功能是寄存器,R0,递减过程,最低优先级中断,IR7,的子程序功能,是,寄存器,R1,递减过程,最高优先级中断请求,IR0,的子程序功能则是赋值,R0,和,R1,皆为,80H,,,令,R0,和,R1,递减,一次即,停止。与,nested_ISR,不同的是,,test_8259,程序中,R0,和,R1,的初值都是,由,8255A,的,PA,口外接的拨码开关赋值(注:拨码开关的取值一定要大于,80H,,否则程序跑不起来)。具体代码如,后页,所示,。,2,),编译、烧写、自动运行,程序,test_8259,,随机触发中断请求,IR0,或,IR7,,观察,PC,、,IR,、通用寄存器,Rx,及总线,BUS,的数据变化。(编译和烧写,asm,文件的方法参见,“2.6,存储器实验:,ROM,批量导入数据,”,),实验步骤:,3,),在程序,test_8259,的自动运行过程中,设置,HLT,指令,“,断点,”,,改为手动单步在,IR7,的中断子程序中嵌套触发中断请求,IR0,。观察和记录进入各级中断时,程序计数器,PC,、标志位寄存器,PSW,、总线,BUS,、通用寄存器,Rx,、以及,BP_PC,堆栈和,BP_PSW,堆栈的状态,然后再跳出,“,断点,”,返回上级程序。,4,),把中断请求,IR0,和,IR7,的子程序对调(在软件上怎么实现?),改为,IR0,触发寄存器,R1,递减,而中断,IR7,触发,R0,和,R1,递减停止。在,IR0,的中断子程序中随机嵌套触发中断请求,IR7,,请问中断请求,IR7,可以嵌套,IR0,中断子程序么?,IR7,中断子程序什么时候运行?,汇编助记符,注释,(M,地址:机器指令,),SET R2,86H,选择,8255,,控制,端,A1A0=11,00H:00111000,01H:10000110,OUTA R2,PORT0,02H:01011010,SET R2,99H,控制字:,PA,输入,/PB,输出,/PC,输入,03H:00111000,04H:10011001,OUT R2,PORT0,05H:01011000,JMP,30H,跳转到主程序,06H:00010000,07H:00110000,test_8259,(主程序),汇编助记符,注释,(M,地址:机器指令,),10H,8259A,中断矢量表,00001xxx,Vector0,08H:00010000,00H,Vector1,09H:00000000,00H,Vector2,0AH:00000000,00H,Vector3,0BH:00000000,00H,Vector4,0CH:00000000,00H,Vector5,0DH:00000000,00H,Vector6,0EH:00000000,20H,Vector7,0FH:00100000,test_8259,(中断矢量表),汇编助记符,注释,(M,地址:机器指令,),SET R1,80H,;,中断源,0,R1,赋值,80H,(减,1,则最高位变,0,),10H:00110100,11H:10000000,HLT,12H:00000001,SET R2,82H,选,PB,口,,A1A0=01,13H:00111000,14H:10000010,OUTA R2,PORT0,15H:01011010,OUT R0,PORT0,PB,口输出,16H:01010000,MOV R0,R1,R0,赋值,80H,(减,1,则最高位变,0,),17H:01100001,SET R2,C0H,选择,8259/,偶地址,18H:00111000,19H:11000000,OUTA R2,PORT0,1AH:01011010,test_8259,(中断子程序,0,),汇编助记符,注释,(M,地址:机器指令,),SET R2,60H,EOI,命令(,OCW2,命令字),固定优先级,/,中断结束,/L2L1L0=000,1BH:00111000,1CH:01100000,OUT R2,PORT0,1DH:01011000,OUTA R2,PORT0,去掉,8259,片选,避免误修改配置,1EH:01011010,IRET,1FH:01110000,test_8259,(中断子程序,0,),汇编助记符,注释,(M,地址:机器指令,),SET R2,80H,;,中断源,7,选,PA,口,,A1A0=00,20H:00111000,21H:10000000,OUTA R2,PORT0,22H:01011010,IN R1,PORT0,PA,口输入,赋值,R1,23H:01000100,SUBI R1,01,R1,递减“,-1,”,24H:11000100,25H:00000001,JS 24H,R1,最高位为,1,,则循环递减,26H:00011100,27H:00100100,SET R2,C0H,选择,8259/,偶地址,28H:00111000,29H:11000000,OUTA R2,PORT0,2AH:01011010,test_8259,(中断子程序,7,),汇编助记符,注释,(M,地址:机器指令,),SET R2,60H,EOI,命令(,OCW2,命令字),固定优先级,/,中断结束,/L2L1L0=000,2BH:00111000,2CH:01100000,OUT R2,PORT0,2DH:01011000,OUTA R2,PORT0,去掉,8259,片选,避免误修改配置,2EH:01011010,IRET,2FH:01110000,test_8259,(中断子程序,7,),汇编助记符,注释,(M,地址:机器指令,),SET R2,C0H,配置,8259/,偶地址,30H:00111000,31H:11000000,OUTA R2,PORT0,32H:01011010,SET R2,13H,设置初始化命令字,ICW1,:,上升沿触发,/,单片工作,/,需要设置,ICW4,33H:00111000,34H:00010011,OUT R2,PORT0,35H:01011000,SET R2,C2H,配置,8259/,奇地址,36H:00111000,37H:11000010,OUTA R2,PORT0,38H:01011010,SET R2,08H,设置初始化命令字,ICW2,:中断类型号(中断向量表入口地址,00001xxx,),39H:00111000,3AH:00001000,OUT R2,PORT0,3BH:01011000,test_8259,(主程序),汇编助记符,注释,(M,地址:机器指令,),SET R2,05H,设置初始化命令字,ICW4,:,全嵌套,/,非缓冲,/,主片,/,非自动中断结束,3CH:00111000,3DH:00000101,OUT R2,PORT0,3EH:01011000,SET R2,7EH,写入操作命令字,OCW1,屏蔽所有未用到的中断,IR,3FH:00111000,40H:01111110,OUT R2,PORT0,41H:01011000,test_8259,(主程序),汇编助记符,注释,(M,地址:机器指令,),SET R2,80H,;main,选,PA,口,,A1A0=00,42H:00111000,43H:10000000,OUTA R2,PORT0,44H:01011010,IN R0,PORT0,PA,口输入,,R0,赋值,45H:01000000,SUBI R0,01,R0,递减“,-1,”,46H:11000000,47H:00000001,JS 46H,R0,最高位为,1,,则循环递减,48H:00011100,49H:01000110,HLT,4AH:00000001,test_8259,(主程序),思考题:,请把本实验的微程序版,“,嵌套中断,CPU+8259”,电路改成硬布线版和流水线版,“,嵌套中断,CPU+8259”,电路,并且运行本实验步骤所示的,8259A,测试程序。流水线版本的,“,嵌套中断,CPU+8259”,电路,的,设计有哪些需要注意地方?上述程序在硬布线或流水线版本中需要修改么,?,若需要,请修改并测试。,提示:,首先,参考,“3.4,嵌套中断,CPU”,实验,设计,具有,四级,PC/PSW“,断点,”,堆栈的流水线版嵌套中断,CPU,;,其次,,8259,端口,D7,D0,连接,IO,总线与,CPU,交互的同时,还要连接,PC,总线以便于把中断类型码打入程序计数器,PC,;,最后,如何设计使中断响应信号出现两个下降沿,满足,8259A,中断处理流程,是流水线版,“,嵌套中断,CPU+8259”,设计,的关键。,(七),中断控制器,(8259),实验,附录:,CPU,指令集,(OP,码表,),OP,
展开阅读全文