中断简述 上

1、ARM体系的CPU有7种工作模式:

1)用户模式(usr):ARM处理器正常的程序执行状态。

2)快速中断模式(fiq):用于高速数据传输或通道处理。

3)中断模式(irq):用于通用的中断处理。

4)管理模式(svc):操作系统使用的保护模式。

5)数据访问终止模式(abt):当要取的数据或指令不存在或地址不允许访问时进入该模式,用于虚拟存储和存储保护。

6)系统模式(sys):运行具有特权的操作系统任务。

7)未定义指令中止模式(und):ARM处理器认为当前指令未定义时进入该模式,该模式可用于协处理器的软件仿真。


另外ARM体系的CPU有2种工作状态

1)ARM状态:此时处理器执行32位的ARM指令。

2)Thumb状态:此时处理器执行16位的Thumb指令。

CPU一上电后是ARM状态。


 2、 ARM920T有31个通用的32位寄存器和6个程序状态寄存器。这37个寄存器分为7组,当进入某个工作模式时就使用他那组的寄存器,有些寄存器,不同的工作模式下有自己的副本,当切换到另一个模式时,那个模式下的寄存器副本将被使用,这些寄存器被称为备份寄存器。


       图中R0到R15可直接访问,这些寄存器中除R15外都是通用寄存器,他们技能保存数据也能保存地址。R13~R15稍有特殊,R13就是栈指针寄存器,通常被用于保存栈指针,R14又称为程序连接寄存器,当执行BL跳转指令时,R14得到R15(程序计数器PC)的备份,而当发生中断或异常时,对应的R14_svc、R14_irq、R14_fiq、R14_abt、R14_und中保存程序计数器R15的返回值。

       快速中断模式有7个备份寄存器,所以进入快速中断模式时,若是R0~R7不变,基本不需要保存其他寄存器,可直接进入,从而大大提高了进入该模式的速度。

        每种工作模式除了有R0~R15共16个寄存器外,还有第17个寄存器CPSR(当前程序状态寄存器),CPSR中一些位被用于标示当前的程序状态,一些位被用于标示当前处于什么工作模式。

CPSR寄存器各位代表的意思:

       各种工作模式除了有CPSR寄存器外还有SPSR(程序状态保存寄存器),当切换进入另一个工作模式时,在SPSR中保存前一个工作模式的CPSR的值,等到返回前一个工作模式的时候,可以把SPSR的值恢复到CPSR中。


综上所述,当一个异常发生时,将切换到相应的工作模式,这是ARM920T CPU核将完成以下事情:

1)在异常异常工作模式的连接寄存器R14中保存前一个工作模式的下一条指令。

2)将CPSR的值复制到异常工作模式的SPSR中。

3)将CPSR的工作模式设为这个异常工作模式的对应的值。

4)令程序计数器PC的值等于这个异常模式在异常向量表中的地址,即中断入口地址。

相反的,从异常工作模式退出回到前一个工作模式时,需要:

1)将连接寄存器里保存的地址返还给PC。

2)将异常工作模式的SPSR的值返还给CPSR。


3、s3c2440的中断控制器

           CPU运行过程中,要知道外设发生不预期的事件有2中方法:

1)查询方式:通过循环不断的查询个设备的状态是否有改变,从而做出判断在该设备上是否有事件发生。

2)中断方式:当中断发生时,硬件会改变某个寄存器的值,CPU执行完一条指令后,用过硬件查看该寄存器的值,如果关注的事件发生了,则中断当前的的程序,跳转到该事件对应的地址处理这件事,处理完后又跳回来执行先前的程序。这种方法实现较复杂,但效率高。


CPU处理中断的方式基本相同:

1)中断控制器汇集各类设备发出的中断信号,然后告诉CPU

2)CPU保存当前程序的运行环境,调用中断服务程序(ISR)来处理这些中断

3)在ISR中通过读取中断控制器、外设的相关寄存器来识别这是哪个中断,并进行相应的处理。

4)清除中断:通过读写中断控制器和外设的相关寄存器来实现

5)最后恢复被中断程序的运行环境,继续运行。


中断体系中外设以CPU的关系图:



这篇是对中断进行了大概简述,下篇会涉及到中断相关寄存器和具体操作。

中断是指CPU在正常执行程序的过程中,遇到外部(IO引脚中断)/内部(定时器中断)的紧急事件需要处理,暂时中断当前程序的执行,而转去为事件服务,待服务完毕,再返回到暂停处继续执行原来的程序[^1]。中断产生的条件主要有以下几点: - **外部事件触发**:外部设备需要与CPU进行数据交互时,会向CPU发出中断请求信号。例如,当键盘有按键按下、打印机完成打印任务等情况发生时,相应的外部设备会产生中断请求,请求CPU进行处理。 - **内部异常情况**:CPU在执行程序过程中,可能会遇到一些异常情况,从而触发中断。如除零错误、非法指令、内存访问越界等。这些异常会使CPU暂停当前程序的执行,转而处理相应的异常中断。 - **定时器事件**:内部定时器达到预设的时间时,会触发定时器中断。定时器中断常用于实现定时任务,如操作系统的时间片轮转调度、周期性的数据采集等。 - **中断允许控制**:CPU要能够对中断请求进行允许或禁止的控制。只有当CPU允许中断时,才会响应外部或内部产生的中断请求;若CPU禁止中断,则会忽略这些请求,继续执行当前程序。 - **优先级排队**:当有多个中断请求同时发生时,需要对这些中断请求进行优先级排队。只有优先级较高的中断请求才会被CPU优先响应和处理,以确保重要的事件能够得到及时处理。 ### 代码示例(以Python模拟简单的中断控制) ```python # 模拟中断允许标志 interrupt_enabled = True # 模拟外部设备产生中断请求 def external_device_interrupt(): global interrupt_enabled if interrupt_enabled: print("外部设备产生中断请求,CPU开始处理") else: print("中断被禁止,忽略外部设备中断请求") # 模拟CPU禁止中断 def disable_interrupt(): global interrupt_enabled interrupt_enabled = False print("CPU禁止中断") # 模拟CPU允许中断 def enable_interrupt(): global interrupt_enabled interrupt_enabled = True print("CPU允许中断") # 测试 enable_interrupt() external_device_interrupt() disable_interrupt() external_device_interrupt() ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值