Linux 0.12 setup.S--重新对8259中断控制器进行编程

重新对8259中断控制器进行编程

代码来自Linux0.12 setup.S

c 复制代码
	// 发送ICW1命令字0x11(边沿触发,多片8259级联,最后要发送ICW4字)
	mov	al,#0x11		
	out	#0x20,al		
	.word	0x00eb,0x00eb		
	out	#0xA0,al	
	.word	0x00eb,0x00eb
	
	// 发送ICW2命令字
	mov	al,#0x20		
	out	#0x21,al
	.word	0x00eb,0x00eb
	mov	al,#0x28		
	out	#0xA1,al
	.word	0x00eb,0x00eb
	
	// 发送ICW3命令字
	mov	al,#0x04		
	out	#0x21,al
	.word	0x00eb,0x00eb
	mov	al,#0x02	
	out	#0xA1,al
	.word	0x00eb,0x00eb
	
	// 发送ICW4命令字
	mov	al,#0x01		
	out	#0x21,al
	.word	0x00eb,0x00eb
	out	#0xA1,al
	.word	0x00eb,0x00eb
	
	// 屏蔽所有中断请求
	mov	al,#0xFF		
	out	#0x21,al
	.word	0x00eb,0x00eb
	out	#0xA1,al

端口

PC/XT中,8259A的两个端口地址分别为20H和21H
PC/AT级联8259端口地址:

按顺序写入初始化命令字

初始化命令字一定要在系统复位后首先写入8259A,写入时要严格按照写入顺序,不允许颠倒。

ICW1

ICW1的主要功能:确定级连方式,触发方式

写入ICW1后,8259A内部自动复位,其复位功能为:

(1)初始化命令字顺序逻辑重新置位,准备接收ICW2、ICW3、ICW4

(2)清除IMR和ISR

(3)IRR状态可读

(4)优先级排队,IR0最高,IR7最低

(5)特殊屏蔽方式复位

(6)设定中断请求信号由低变高的边沿触发有效

(7)自动EOI循环方式复位

  • ICW1命令字0x11(00010001):边沿触发,多片8259级联,最后要发送ICW4字(此处已确定写入顺序)

ICW2

ICW2的主要功能:确定中断向量,中断类型码

例:如果ICW2为08H,则

IR3的中断类型号(中断向量)为08H+03H=0BH

  • ICW2命令字0x20(00100000):IR0的中断类型号为00H+20H=20H
    ICW2命令字0x28(00101000):IR3的中断类型号为03H+28H=2BH

ICW3

ICW3的主要功能:确定主片从片的级连状态,即确定主片的连接位和从片的编码

  • ICW3命令字0x04(00000100):主芯片的IR2连从芯片INT引脚
    ICW3命令字0x02(00000010):从芯片的INT引脚连主芯片的IR2

ICW4

  • ICW4命令字0x01(00000001):259A 芯片设置成普通全嵌套、非缓冲、非自动结束中断方式,并且用于 8086 及其兼容系统。

根据要求写入操作命令字

写完初始化命令字后,8259A已经建立了基本的工作环境,可以接受中断请求,也可以写入操作命令字OCW来改变某些中断管理方式

操作命令字可以随时写入、修改,但初始化命令字一经写入一般不再改动。
当初始化完成后工作期间是这样区分三种OCWs的: OCW1写入奇端口,OCW2和OCW3写入偶端口,所以OCW2和OCW3可以和OCW1区分开;而 OCW2和OCW3的D3 位不同,所以二者又被区分开

OCW1

Linux0.12代码setup.S中8259的主从芯片都写入了0xFF,屏蔽所有中断请求!

OCW2 OCW3

略。。。可以参考这篇

万字长文玩转中断:从硬件看中断之8259A
8259 PIC
8259

相关推荐
zfxwasaboy3 小时前
Linux宏clamp(val, lo, hi)的作用
linux·运维·服务器
我爱学习好爱好爱4 小时前
Ansible 常用模块详解:lineinfile、replace、get_url实战
linux·python·ansible
吴声子夜歌5 小时前
TypeScript——基础类型(三)
java·linux·typescript
蓝凌y5 小时前
51单片机之外部中断
c语言·单片机·嵌入式硬件
AF_INET65 小时前
RV1126B开发板学习篇(二)v4l2+mpp编码
c语言·经验分享·音视频·视频编解码·嵌入式软件·rv1126b
DA02215 小时前
系统移植-STM32MP1启动详解(BootROM)
linux·bsp·系统移植
春日见6 小时前
自驾算法的日常工作?如何提升模型性能?
linux·人工智能·机器学习·计算机视觉·自动驾驶
李彦亮老师(本人)6 小时前
【Linux系统】Rocky Linux 9.7操作系统简介
linux·运维·服务器·docker·kubernetes
minji...6 小时前
Linux 进程信号(二)信号的保存,sigset_t,sigprocmask,sigpending
linux·运维·服务器·网络·数据结构·c++·算法
A.A呐6 小时前
【Linux第二十章】socket
linux