对应labOS版本1.3
程序源码可以私聊我
picirq.h
int 0x20~0x2f
接收中断信号IRQ0~15
,因为int 0x00~0x1f
不能用于IRQ。picirq.c
pic0_mask=0xfb
即1111 1011
;PIC1以外全部禁止。pic1_mask=0xff
即1111 1111
;禁止所有中断
pic_enable
函数就是将irq_num
即IRQ号屏蔽取消
当一个外部中断请求通过中断请求线IRQ
传输到IMR(中断屏蔽寄存器)
,IMR根据设定的中断屏蔽字决定丢弃还是接受。
主从PIC如下如所示,PIC是一个8259A芯片,上面有一些引脚,其中包括了ICW、OCW等引脚。
每一个8259A芯片都有两个I/O ports,程序员可以通过它们对8259A进行编程。
Master 8259A的端口地址是0x20,0x21;Slave 8259A的端口地址是0xA0,0xA1。
EOI:end of interrupt
kbd.h
https://wiki.osdev.org/PS/2_Keyboard#Scan_Code_Set_1
int_handlers.c
init.c
https://logix.cz/michal/doc/i386/chp09-08.htm#09-08
,然后重点是要设置IMR取消对此中断的屏蔽,这样当下次产生中断时,硬件根据自身情况产生中断号,经过IDTR找IDT,然后找到相应的中断处理函数执行。这样就完成了一次中断处理。最后的运行效果
上一篇:期待与金陵鹿城早春出游
下一篇:浣溪沙大堤上游的人们一个个划着船