8259A PIC 总结
2019-04-15 14:32发布
生成海报
处理器与外设的数据通信,一般有三种方式:程序直接I/O、中断以及DMA方式。外设一般包含3种类型的寄存器,他们是数据寄存器、状态寄存器和控制寄存器。数据寄存器是用来传送数据的,状态寄存器用于查询设备状态,而控制器存器用来发送命令控制外设工作。程序直接I/O,意味着程序中需要直接同这三类寄存器进行交互。程序需要去查询设备的状态,这样不能充分的利用CPU。而DMA方式则是DMA控制器向CPU发出总线使用的请求,CPU将总线的控制权交给DMA控制器,由此,DMA可以对数据进行整块的传送,在没有CPU干预的情况下。对于中断方式,是当某种外设准备好后,通过中断控制器将中断请求送CPU,由CPU确定是否对中断请求进行响应。中断可分为软中断和硬中断,其中硬中断又叫做外部中断,他又分为可屏蔽和非可屏蔽中断。可屏蔽中断可以利用状态标志位的IF来开放和关闭这种类型的中断。 下面介绍8259A中断控制器的一些细节:8259A中断控制器又2种寄存器组成:中断屏蔽寄存器(IMR)和命令寄存器。 中断屏蔽寄存器为一个8位寄存器,他的I/O端口是21H,而命令寄存器的I/O端口是20H。中断屏蔽寄存器每一位代表一种外设:0 定时器 1 键盘 2 保留 3 串口1 4 串口2 5 硬盘 6 软盘 7 打印机 命令寄存器每一位表示如下:0 L01 L12 L23 04 05 EOI6 SL7 REOI表示中断结束命令。当中断处理程序完成后,必须显式的向中断控制器发送接触命令,如: MOV AL,00100000B OUT 21H,AL 中断程序如何工作:1. 计算出中断向量的地址,中断类型号N,中断向量地址为:(N*4,N*4+2) 2. 保存状态标志寄存器、代码段寄存器,指令指针寄存器的内容。并将中断响应许可标志位关闭,单步执行标志位关闭。 3. 转入中断处理程序。 4. 恢复状态标志寄存器,代码段寄存器和指令指针寄存器的内容。 一个自定义中断的例子:(响应定时器中断)DATA_SEG SEGMENT MSG DB 'TIMEOUT!' , 0DH , 0AH , '$'DATA_SEG ENDSSUB_FUNC_CODE SEGMENT ASSUME CS:SUB_FUNC_CODE , DS:DATA_SEG ALARM PROC FAR PUSH DS PUSH AX PUSH DX STI MOV AX , DATA_SEG MOV DS , AX MOV DX , OFFSET MSG MOV AH , 09H INT 21H POP DX POP AX POP DS IN AL , 20H OR AL , 00100000B OUT 20H , AL CLI IRET ALARM ENDPSUB_FUNC_CODE ENDSMAIN_CODE SEGMENT ASSUME CS:MAIN_CODE
MAIN PROC FAR START: MOV AH , 35H MOV AL , 1CH INT 21H
PUSH ES PUSH BX MOV BX , SEG ALARM MOV DS , BX MOV DX , OFFSET ALARM MOV AH , 25H MOV AL , 1CH INT 21H IN AL , 21H AND AL , 11111110B OUT 21H , AL STI MOV CX , 50000 OUTTER: PUSH CX MOV CX , 50000 INNER: LOOP INNER POP CX LOOP OUTTER
POP DX POP DS MOV AH , 25H MOV AL , 1CH INT 21H MOV AH , 4CH INT 21H
MAIN ENDP MAIN_CODE ENDS END START
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮