`
insertyou
  • 浏览: 910454 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

【我所认知的BIOS】->深入理解IRQ7

DOS 
阅读更多

【我所认知的BIOS】->深入理解IRQ7

by lightseed

12/13/2010

这篇文章的线索是因为偶然间发现自爱DOS下面,IRQ7对应的中断服务程序(ISR)只有一个Iret.那我不经会问,这是为什么呢?因为在BIOS下面IRQ7是有对应的ISR的。

这个问题归根结底是由于8259的中断产生机制造成。

简单回顾一下8259中断的产生过程。共分了6步:

1. 一个或者多个中断请求产生的时候,8259把对应的IRRinterrupt 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处理,最后发EOIend of interrupt)给82598259于是清掉ISR

整个中断过程结束。

根据8259 datasheet的说明,有这样一种可能性。在第③步发生了一种特殊情况,从第③到第④步的时候,并没有interrupt request了。(比如说中断请求太短),这样的话两片8259均会把中断7填到data bus上去。看上去就想是触发了IRQ 7了一样。

我想也正是这个原因,BIOSDOS都对IRQ 7对应的ISR做了特殊的处理。比如说,BIOS的里面的IRQ7对应的ISR什么动作都没做。DOSIRQ7对应的ISR被直接替换成了IRET.

不过上面都只是我对8259 datasheet的研究的时候发现的,也纯粹是理论上的理解。真实原因也许不是这样个原因。

以上整个过程在后续的ICH和最新的南桥spec沿用了同样的规则。

分享到:
评论

相关推荐

    Linux Kernel5.10的软中断(softirq)的本质

    ---> 基本处理完硬件中断后,调用---> irq_exit() ---> ---> __irq_exit_rcu() ---> invoke_softirq() ----> __do_softirq() --->到此处(1)硬件中断处理完成(即中断上半部分执行完 成), gic_handle_irq() 主函数...

    linux中断处理之IRQ中断

    通过对`request_irq()`和`setup_irq()`这两个核心函数的源代码分析,我们可以更深入地理解Linux内核如何管理和调度中断处理程序。这些知识对于开发高质量的设备驱动程序至关重要,也是理解和优化系统性能的基础。

    STM32F407RFID-RC522门禁控制系统.zip

    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 ...

    双极电机文件及驱动.zip

    NVIC->ISER[NVIC_InitStruct->NVIC_IRQChannel >> 0x05] = (uint32_t)0x01 (NVIC_InitStruct->NVIC_IRQChannel & (uint8_t)0x1F); } else { /* Disable the Selected IRQ Channels --------------------------...

    STM32F103RCT6使用SPI通讯NRF24L01无线模块

    库函数版本,运行后通过按键选择收发模式,通过串口通讯发送收发信息至电脑,波特率9600,本工程引脚对应MOSI->PA7 MISO->PA6 SCK->PA5 CE->PA4 CSN->PA3 IRQ->PA2,CE、CSN、IRQ引脚可自行在头文件更改。...

    调制解调器和传真板 — 如何检测并纠正I-O地址和IRQ冲突

    在探讨如何检测并纠正I/O地址和IRQ冲突之前,首先需要理解这几个概念的基本含义。 **IRQ(Interrupt Request)**: - **定义**:IRQ指的是中断请求,是一种允许外部硬件向中央处理器(CPU)发送信号的机制。当设备...

    linux内核数据流

    request_irq(pdev->irq, et_isr, IRQF_SHARED, dev->name, et); // 注册硬件中断 } ``` 在这个过程中,我们看到了几个关键步骤: - **alloc_etherdev()**: 分配网络设备结构。 - **ioremap_nocache()**: 映射IO...

    android keyevent事件

    本文将深入探讨Android中的KeyEvent事件及其流程,帮助开发者更好地理解和掌握这一机制。 #### 二、输入子系统基础 输入子系统是Android系统的核心组成部分之一,用于管理各种类型的输入设备,包括键盘、触摸屏、...

    硬件IRQ分配表

    在深入探讨“硬件IRQ分配表”这一主题之前,我们首先需要理解IRQ(Interrupt Request)的基本概念。IRQ,即中断请求,是计算机系统中用于处理外部设备请求的一种机制。当一个设备需要与处理器通信时,它会发送一个...

    Linux event层机制

    ### Linux Event层机制详解 #### 一、引言 在探讨Linux输入子系统的Event层机制之前,我们需要了解一些...通过深入理解这一机制,开发人员能够更加高效地编写驱动程序和应用程序,充分利用Linux内核提供的强大功能。

    ar6003 wifi 分析

    - **步骤:** `ar6000_android_avail_ev` -> `ar6000_avail_ev_p` -> `BMIInit` -> `ar6000_init` -> `BMIDone` -> `HTCStart` -> `DevUnmaskInterrupts` -> `HIFUnMaskInterrupt` -> `sdio_claim_irq`。 - **解释:**...

    C8T6核心板NRF.rar

    C8T6核心板的NRF代码,可接收可发送,接收到的结果会通过串口打印出来。 引脚设置是CE ->PA4、 SCK-> PA5、MISO-> PA6、MOSI-> PA7、 CS->PB12、IRQ-> PA1、

    linux驱动之中断处理过程C程序部分.docx

    2. 处理中断处理例程:调用`desc->handler(irq, desc)`,这里的`desc->handler`是中断处理函数指针,通常对应于特定硬件设备的中断服务例程(ISR)。 3. 清除中断状态:如果是边沿触发的中断,需要清除硬件中断标志...

    usb鼠标驱动完全注释

    ### USB鼠标驱动完全注释分析 #### 一、概述 USB鼠标驱动是计算机硬件与操作系统之间的重要...对于初学者来说,深入理解这些代码不仅有助于掌握USB编程的基础知识,还能为后续开发复杂的USB设备驱动打下坚实的基础。

    玩转儿IRQ(中断) 轻松分配板卡资源

    - 通过系统设置中的“设备管理器”,可以查看各个设备所占用的IRQ值,并根据需要进行调整。 #### 实际操作案例 假设我们遇到了一个IRQ冲突的情况,例如COM2端口(IRQ3)和Bt848视频捕捉设备都使用了IRQ5。在这种...

    STM32_NRF24L01+

    PA7 -> MOSI PC5 <- CE PB0 <- IRQ *********************************************/ 开发环境:MDK4.22+固体库V3.5+J-Link仿真器+自行设计开发板 主处理器:STM32FVET6 ,使用硬件SPI1,如果需要用到SPI2或SPI3,...

    Classic Alphas and Betas:PC 经典的 alpha 和 beta 版本-开源

    为了让 ALPHA 工作:在 DOSBox 中,您必须首先运行 SETUP.EXE 并更改这些设置:声音设置 -> SoundBlaster -> 16 位 -> 立体声 -> 32 -> 44 KHz -> 220h(默认) - > Sound Blaster 16 or AWE32 -> IRQ 7 -> Channel...

    dm9000网卡驱动分析

    ### DM9000网卡驱动分析 ... ##### `dm9000_init`函数 该函数是DM9000网卡驱动的入口点,...通过以上分析,可以深入理解DM9000网卡驱动的内部结构和工作原理,这对于进一步开发或调试类似的驱动程序具有重要的参考价值。

    Linux内核中的同步和互斥分析报告

    通过对`down()`和`up()`操作的深入理解,我们可以更好地掌握如何在实际编程中使用这些工具来保护共享资源,提高系统的稳定性和可靠性。在未来的学习和开发过程中,了解并熟练掌握这些内核机制将对我们大有裨益。

Global site tag (gtag.js) - Google Analytics