【我所认知的BIOS】->深入理解IRQ7
by lightseed
12/13/2010
这篇文章的线索是因为偶然间发现自爱DOS下面,IRQ7对应的中断服务程序(ISR)只有一个Iret.那我不经会问,这是为什么呢?因为在BIOS下面IRQ7是有对应的ISR的。
这个问题归根结底是由于8259的中断产生机制造成。
简单回顾一下8259中断的产生过程。共分了6步:
1. 一个或者多个中断请求产生的时候,8259把对应的IRR(interrupt request register)置起来。
2. 8259评估这些中断请求,如果是可以的话,发送INT信号给CPU。
3. CPU收到INT后,回发INTA#给8259。
4. 在接收从CPU发来的INTA#的过程中优先级最高的IRR会被填入到ISR中去。同时IRR的对应位被8259清掉。(不过这这个INTA#的过程汇总,8259并不会把数据放到DATA bus上去。)
5. CPU触发第二个INTA#,在这个过程中,8259把数据放到data bus上去,CPU同时从bus上读取数据。
6. 数据传输完成,CPU解析数据并进入到对应的interrupt service routing处理,最后发EOI(end of interrupt)给8259。8259于是清掉ISR。
整个中断过程结束。
根据8259 datasheet的说明,有这样一种可能性。在第③步发生了一种特殊情况,从第③到第④步的时候,并没有interrupt request了。(比如说中断请求太短),这样的话两片8259均会把中断7填到data bus上去。看上去就想是触发了IRQ 7了一样。
我想也正是这个原因,BIOS和DOS都对IRQ 7对应的ISR做了特殊的处理。比如说,BIOS的里面的IRQ7对应的ISR什么动作都没做。DOS下IRQ7对应的ISR被直接替换成了IRET.
不过上面都只是我对8259 datasheet的研究的时候发现的,也纯粹是理论上的理解。真实原因也许不是这样个原因。
以上整个过程在后续的ICH和最新的南桥spec沿用了同样的规则。
分享到:
相关推荐
---> 基本处理完硬件中断后,调用---> irq_exit() ---> ---> __irq_exit_rcu() ---> invoke_softirq() ----> __do_softirq() --->到此处(1)硬件中断处理完成(即中断上半部分执行完 成), gic_handle_irq() 主函数...
通过对`request_irq()`和`setup_irq()`这两个核心函数的源代码分析,我们可以更深入地理解Linux内核如何管理和调度中断处理程序。这些知识对于开发高质量的设备驱动程序至关重要,也是理解和优化系统性能的基础。
stm32f407单片机RFID—RC522门禁控制系统,本程序适用于所有的stm32f407开发板,管脚连线如下:3.3->3.3,RST->PF4,GND->GND,NC(IRQ)->悬空,MISO->PF3,MISI->PF2,SCK->PF1,NSS(SDA)->PF0。打开串口助手把...
dev->irq = map->irq; /* request_irq() is delayed to open-time */ } /* ignore other fields */ return 0; } /* * Receive a packet: retrieve, encapsulate and pass over to upper levels */ void ...
NVIC->ISER[NVIC_InitStruct->NVIC_IRQChannel >> 0x05] = (uint32_t)0x01 (NVIC_InitStruct->NVIC_IRQChannel & (uint8_t)0x1F); } else { /* Disable the Selected IRQ Channels --------------------------...
库函数版本,运行后通过按键选择收发模式,通过串口通讯发送收发信息至电脑,波特率9600,本工程引脚对应MOSI->PA7 MISO->PA6 SCK->PA5 CE->PA4 CSN->PA3 IRQ->PA2,CE、CSN、IRQ引脚可自行在头文件更改。...
在探讨如何检测并纠正I/O地址和IRQ冲突之前,首先需要理解这几个概念的基本含义。 **IRQ(Interrupt Request)**: - **定义**:IRQ指的是中断请求,是一种允许外部硬件向中央处理器(CPU)发送信号的机制。当设备...
request_irq(pdev->irq, et_isr, IRQF_SHARED, dev->name, et); // 注册硬件中断 } ``` 在这个过程中,我们看到了几个关键步骤: - **alloc_etherdev()**: 分配网络设备结构。 - **ioremap_nocache()**: 映射IO...
本文将深入探讨Android中的KeyEvent事件及其流程,帮助开发者更好地理解和掌握这一机制。 #### 二、输入子系统基础 输入子系统是Android系统的核心组成部分之一,用于管理各种类型的输入设备,包括键盘、触摸屏、...
在深入探讨“硬件IRQ分配表”这一主题之前,我们首先需要理解IRQ(Interrupt Request)的基本概念。IRQ,即中断请求,是计算机系统中用于处理外部设备请求的一种机制。当一个设备需要与处理器通信时,它会发送一个...
### Linux Event层机制详解 #### 一、引言 在探讨Linux输入子系统的Event层机制之前,我们需要了解一些...通过深入理解这一机制,开发人员能够更加高效地编写驱动程序和应用程序,充分利用Linux内核提供的强大功能。
- **步骤:** `ar6000_android_avail_ev` -> `ar6000_avail_ev_p` -> `BMIInit` -> `ar6000_init` -> `BMIDone` -> `HTCStart` -> `DevUnmaskInterrupts` -> `HIFUnMaskInterrupt` -> `sdio_claim_irq`。 - **解释:**...
C8T6核心板的NRF代码,可接收可发送,接收到的结果会通过串口打印出来。 引脚设置是CE ->PA4、 SCK-> PA5、MISO-> PA6、MOSI-> PA7、 CS->PB12、IRQ-> PA1、
2. 处理中断处理例程:调用`desc->handler(irq, desc)`,这里的`desc->handler`是中断处理函数指针,通常对应于特定硬件设备的中断服务例程(ISR)。 3. 清除中断状态:如果是边沿触发的中断,需要清除硬件中断标志...
### USB鼠标驱动完全注释分析 #### 一、概述 USB鼠标驱动是计算机硬件与操作系统之间的重要...对于初学者来说,深入理解这些代码不仅有助于掌握USB编程的基础知识,还能为后续开发复杂的USB设备驱动打下坚实的基础。
- 通过系统设置中的“设备管理器”,可以查看各个设备所占用的IRQ值,并根据需要进行调整。 #### 实际操作案例 假设我们遇到了一个IRQ冲突的情况,例如COM2端口(IRQ3)和Bt848视频捕捉设备都使用了IRQ5。在这种...
PA7 -> MOSI PC5 <- CE PB0 <- IRQ *********************************************/ 开发环境:MDK4.22+固体库V3.5+J-Link仿真器+自行设计开发板 主处理器:STM32FVET6 ,使用硬件SPI1,如果需要用到SPI2或SPI3,...
为了让 ALPHA 工作:在 DOSBox 中,您必须首先运行 SETUP.EXE 并更改这些设置:声音设置 -> SoundBlaster -> 16 位 -> 立体声 -> 32 -> 44 KHz -> 220h(默认) - > Sound Blaster 16 or AWE32 -> IRQ 7 -> Channel...
### DM9000网卡驱动分析 ... ##### `dm9000_init`函数 该函数是DM9000网卡驱动的入口点,...通过以上分析,可以深入理解DM9000网卡驱动的内部结构和工作原理,这对于进一步开发或调试类似的驱动程序具有重要的参考价值。
通过对`down()`和`up()`操作的深入理解,我们可以更好地掌握如何在实际编程中使用这些工具来保护共享资源,提高系统的稳定性和可靠性。在未来的学习和开发过程中,了解并熟练掌握这些内核机制将对我们大有裨益。