微机原理与接口实验47中断控制器-8259赖晓铮

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

微机原理与接口实验系列一、IO端口扩展(8255)二、定时器/计数器(8253)三、串口通信(8251)四、模数转换(ADC0809)五、数模转换(DAC0832)六、液晶屏显示(LCD1602)七、中断控制器(8259)赖晓铮博士华南理工大学laixz@scut.edu.cnQQ:68046508(七)中断控制器(8259)实验实验内容:●构建一个“嵌套中断CPU+8259”的微型计算机系统,使嵌套中断结构的CPU可以通过8259A芯片根据中断优先级列表响应和管理多个外部中断事件。实验目的:●理解可编程中断控制器8259A的内部结构和工作原理。●掌握嵌套中断结构的CPU通过8259A管理多个中断事件的方法。微程序版“CPU+8259”电路图初始化过程1)时钟信号CLK接手动开关MANUAL,启动仿真,使能复位信号#RESET=0;2)手动按钮MANUAL开关“010”,然后令信号#RESET=1.注:初始化完成后,若时钟信号CLK继续接开关MANUAL,则CPU进入手动模式,手动MANUAL开关,生成时钟信号CLK,程序单步执行;若时钟信号CLK接信号源AUTO-CLK(主频10Hz),则CPU进入自动模式,程序自动运行,直到HLT指令的“断点”处暂停。重启过程(跳出“断点”)1)时钟信号CLK接开关MANUAL,手动令复位信号端#RESET的状态“101”变化,即重启完成,跳出“断点”继续执行。注:跳出“断点”后,CPU进入HLT指令的后续下一条指令的取指周期。中断控制器8259应用电路图可编程中断控制器芯片8259A结构图INTAD7~D0INT中断请求寄存器中断屏蔽寄存器数据总线缓冲器IR0IR7读/写控制逻辑级联缓冲器比较器RDWRA0CSCAS0CSA1CAS2SP/EN优先级分析器中断服务寄存器控制逻辑8259A主从式级联中断系统结构图8259A工作方式一览中断查询触发方式:查询字8259A初始化命令字ICW18259A初始化命令字ICW28259A初始化命令字ICW38259A初始化命令字ICW48259A操作命令字OCW18259A操作命令字OCW3IR2中断8259A操作命令字OCW28259A初始化编程流程图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地址:机器指令)SETR2,86H选择8255,控制端A1A0=1100H:0011100001H:10000110OUTAR2,PORT002H:01011010SETR2,99H控制字:PA输入/PB输出/PC输入03H:0011100004H:10011001OUTR2,PORT005H:01011000JMP,30H跳转到主程序06H:0001000007H:00110000test_8259(主程序)汇编助记符注释(M地址:机器指令)10H8259A中断矢量表[00001xxx]Vector008H:0001000000HVector109H:0000000000HVector20AH:0000000000HVector30BH:0000000000HVector40CH:0000000000HVector50DH:0000000000HVector60EH:0000000020HVector70FH:00100000test_8259(中断矢量表)汇编助记符注释(M地址:机器指令)SETR1,80H;中断源0R1赋值80H(减1则最高位变0)10H:0011010011H:10000000HLT12H:00000001SETR2,82H选PB口,A1A0=0113H:0011100014H:10000010OUTAR2,PORT015H:01011010OUTR0,PORT0PB口输出16H:01010000MOVR0,R1R0赋值80H(减1则最高位变0)17H:01100001SETR2,C0H选择8259/偶地址18H:0011100019H:11000000OUTAR2,PORT01AH:01011010test_8259(中断子程序0)汇编助记符注释(M地址:机器指令)SETR2,60HEOI命令(OCW2命令字)固定优先级/中断结束/L2L1L0=0001BH:001110001CH:01100000OUTR2,PORT01DH:01011000OUTAR2,PORT0去掉8259片选,避免误修改配置1EH:01011010IRET1FH:01110000test_8259(中断子程序0)汇编助记符注释(M地址:机器指令)SETR2,80H;中断源7选PA口,A1A0=0020H:0011100021H:10000000OUTAR2,PORT022H:01011010INR1,PORT0PA口输入,赋值R123H:01000100SUBIR1,01R1递减“-1”24H:1100010025H:00000001JS24HR1最高位为1,则循环递减26H:0001110027H:00100100SETR2,C0H选择8259/偶地址28H:0011100029H:11000000OUTAR2,PORT02AH:01011010test_8259(中断子程序7)汇编助记符注释(M地址:机器指令)SETR2,60HEOI命令(OCW2命令字)固定优先级/中断结束/L2L1L0=0002BH:001110002CH:01100000OUTR2,PORT02DH:01011000OUTAR2,PORT0去掉8259片选,避免误修改配置2EH:01011010IRET2FH:01110000test_8259(中断子程序7)汇编助记符注释(M地址:机器指令)SETR2,C0H配置8259/偶地址30H:0011100031H:11000000OUTAR2,PORT032H:01011010SETR2,13H设置初始化命令字ICW1:上升沿触发/单片工作/需要设置ICW433H:0011100034H:00010011OUTR2,PORT035H:01011000SETR2,C2H配置8259/奇地址36H:0011100037H:11000010OUTAR2,PORT038H:01011010SETR2,08H设置初始化命令字ICW2:中断类型号(中断向量表入口地址00001xxx)39H:001110003AH:00001000OUTR2,PORT03BH:01011000test_8259(主程序)汇编助记符注释(M地址:机器指令)SETR2,05H设置初始化命令字ICW4:全嵌套/非缓冲/主片/非自动中断结束3CH:001110003DH:00000101OUTR2,PORT03EH:01011000SETR2,7EH写入操作命令字OCW1屏蔽所有未用到的中断IR3FH:0011100040H:01111110OUTR2,PORT041H:01011000test_8259(主程序)汇编助记符注释(M地址:机器指令)SETR2,80H;main选PA口,A1A0=0042H:0011100043H:10000000OUTAR2,PORT044H:01011010INR0,PORT0PA口输入,R0赋值45H:01000000SUBIR0,01R0递减“-1”46H:1100000047H:00000001JS46HR0最高位为1,则循环递减48H:0001110049H:01000110HLT4AH:00000001test_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码(I7I6I5I4)指令助记符OP码(I7I6I5I4)指令助记符0111IRET1111OR/ORI0110MOV1110AND/ANDI0101OUT/OUTA1101ADD/ADDI0100IN1100SUB/SUBI0011SET1011XOR/XORI0010SOP(INC/DEC/NOT/THR)1010SHT(RLC/LLC/RRC/LRC)0001JMP/JMPR/Jx/JxR1001STO/PUSH0000NOP/HLT1000LAD/POP一、系统指令:汇编语言功能I7I6I5I4I3I2I1I0NOP;无操作(延时4个T)00000/0x/0HLT;停机(断点)00000/0x/1IRET;中断返回BP_PCPC;BP_PSWPSW01110/0x/x汇编语言注释I7I6I5I4I3I2I1I0MOVRA,RB;(RB)RA0110RARBSETRA,IMM;IMMRA0011RAx/xIMM二、寄存器及I/O操作指令:汇编语言功能I7I6I5I4I3I2I1I0INRA,PORTx;(PORTx)RA0100RAPORTxOUTRA,PORTx;(RA)PORTx0101RA0/PORTxOUTARA,PORTx;(RA)PORTx0101RA1/PORTx汇编语言功能I7I6I5I4I3I2I1I0LADRA,[ADDR];[ADDR]RA1000RA0/0ADDRPOPRA,[RB];[RB]RA1000RARBSTORA,[ADDR];(RA)[ADDR]1001RA0/0ADDRPUSHRA,[RB];(RA)[RB]1001RARB三、存储器及堆栈操作指令:汇编语言功能I7I6I5I4I3I2I1I0JMPADDR;ADDRPC00010/00/0ADDRJMPRRB;(RB)PC00010/0RBJCADDR;IFCF=1,ADDRPC00010/10/0ADD

1 / 34
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功