嵌入式系统 中断.ppt

嵌入式系统 中断.ppt

ID:56813799

大小:261.00 KB

页数:51页

时间:2020-06-28

嵌入式系统 中断.ppt_第1页
嵌入式系统 中断.ppt_第2页
嵌入式系统 中断.ppt_第3页
嵌入式系统 中断.ppt_第4页
嵌入式系统 中断.ppt_第5页
资源描述:

《嵌入式系统 中断.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、中断与异常主要内容中断的基本知识中断描述符表的初始化中断处理中断的下半部处理机制中断的应用-时钟中断中断的基本概念硬中断的概念硬中断即和硬件相关的中断也就是通常意义上的“中断处理程序”,它是直接处理由硬件发过来的中断信号的。中断执行的过程当某个设备发出中断请求时,CPU停止正在执行的指令,转而跳到包括中断处理代码或者包括指向中断处理代码的转移指令所在的内存区域。这些代码一般在CPU的中断方式下运行。就回去自己驱动的设备上去看看设备的状态寄存器以了解发生了什么事情,并进行相应的操作。当中断处理完毕以后,CPU将恢复到以前的状态,继续执行中断处理前正在执行的指令。中断的流程如图i82

2、59.c负责对外部中断的支持。8259芯片负责接收外部设备——如定时器、键盘、声卡等——的中断,两块8259共支持16个中断Linux中断处理特色分为上半部和下半部执行上半部屏蔽所有中断下半部允许中断,执行几乎所有中断中断控制的主要优点:CPU只有在I/O需要服务时才响应外部中断:外部设备所发出的I/O请求内部中断:也称之为“异常”,是为解决机器运行时所出现的某些随机事件及编程方便而出现的中断常识中断向量:中断源的编号外设可屏蔽中断:屏蔽外部I/O请求异常及非屏蔽中断:CPU内部中断或计算机内部硬件出错引起的异常中断描述符表:描述中断的相关信息中断的相关汇编指令:中断向量:每个中

3、断源都被分配一个8位无符号整数作为类型码,即中断向量中断的种类:中断:外部可屏蔽中断外部非屏蔽中断异常:不使用中断控制器,不能被屏蔽故障陷阱中断向量-中断源的类型Intelx86通过两片中断控制器8259A来响应15个外中断源,每个8259A可管理8个中断源。外部设备拥有相应权限时,可以向特定的中断线发送中断请求信号外部I/O请求的屏蔽:从CPU的角度,清除eflag的中断标志位从中断控制器的角度,将中断屏蔽寄存器的相应位置位外设可屏蔽中断异常就是CPU内部出现的中断,即在CPU执行特定指令时出现的非法情况。非屏蔽中断就是计算机内部硬件出错时引起的异常情况Intel把非屏蔽中断作

4、为一种异常来处理在CPU执行一个异常处理程序时,就不再为其他异常或可屏蔽中断请求服务异常及非屏蔽中断中断的相关数据结构从数据结构入手,应该说是分析操作系统源码最常用的和最主要的方法。因为操作系统的几大功能部件,如进程管理、设备管理、内存管理等,都可以通过对其相应的数据结构的分析来弄懂其实现机制。很好的掌握这种方法,对分析Linux内核大有帮助。中断向量在保护模式下的实现机制是中断描述符表(InterruptDescriptorTable,IDT),中断描述符表的结构如图3.4所示。中断描述符表即中断向量表相当于一个数组,包含256个中断描述符,每个中断描述符8位,对应硬件提供的2

5、56个中断服务例程的入口,即256个中断向量。IDT的位置由idtr确定,idtr是个48位的寄存器,高32位是IDT的基址,低16位为IDT的界限(通常为2k=256*8)。中断的相关数据结构图3.4Linux的中断处理数据结构中断的相关数据结构在i386系统中,Linux启动时要设置系统的中断描述符表IDT。IDT中包含各个中断(以及异常,诸如浮点运算溢出)的服务程序地址,中断服务程序地址由Linux提供。每个设备驱动程序可以在图3.4所示的结构(irq_action)中注册自己的中断及中断处理程序地址。Linux的中断服务程序根据irq_action中的注册信息调用相应的设

6、备驱动程序的中断处理程序。和硬件相关的中断处理代码隐藏在中断服务程序中,这样,设备驱动程序的中断处理程序可在不同平台之间方便移植。一般来说,CPU在处理中断时,首先要在堆栈中保存与CPU指令执行相关的寄存器(例如指令计数寄存器),然后调用中断服务程序,中断服务程序结束时再恢复这些寄存器。中断的相关数据结构irq_action实际是一个数组,其中包含指向irqaction的指针,每个数组元素分别定义一个IRQ。Linux内核提供相应的操作函数,设备驱动程序可调用这些操作函数设置相应的中断处理函数。一般在系统启动时,由各个设备驱动程序通过如下途径获取相关的设备IRQ并设置对应的irq

7、_action数组元素所指向的irqaction结构。由于0-31号中断向量已被Intel保留,就剩下32-255共224个中断向量可用。在Linux中,这224个中断向量除了0x80(SYSCALL_VECTOR)用作系统调用总入口之外,其它都用在外部硬件中断源(包括可编程中断控制器8259A的15个irq)上。实际上,当没有定义CONFIG_X86_IO_APIC时,其它223(除0x80外)个中断向量,只利用了从32号开始的15个,其它208个空着未用。这些中断服务程序入口

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。