s3c2440中断体系结构:如何用中断?1.中断发生:保存别人的状态如何中断可以事先设置,对程序初始化,使能中断。
中断发生后,进入中断模式2.中断处理分辨中断源进行不同的处理清理工作3.恢复别人的状态过程:外界信号上升沿、下降沿,高电平、低电平都可以设置成信号引脚设置,再进入状态寄存器。
状态寄存器连接屏蔽寄存器进入第二个状态寄存器,储存各种中断,可以储存多个中断进入优先级寄存器,判断中断运行顺序再进入屏蔽使能寄存器和模式寄存器进入优先级寄存器进入cpu处理cpu的处理:进入入口地址 b handleIRQ计算返回地址,被中断处地址保存现场,即各寄存器状态调用处理函数函数运行完后恢复现场函数的处理:分辨终端处理中断清除数据,即清除中断1.中断寄存器arm的七种模式r 用户模式r0-r152.fiq 快中断模式r0-r7专用寄存器r8-r15,3.svc 管理模式专用寄存器r13-r14,4.abt 数据访问终止模式5.sys 系统模式6.und 未定义指令终止模式7.irq 中断模式几种模式的区别:嵌入式的中断:a.不同的寄存器b.不同的权限c.触发条件不一样何时使用几种模式:usr 用户模式:arm处理器正常的程序执行状态fiq 快中断模式:高速数据传输和通道处理svc 管理模式:操作系统使用的保护模式abt 数据访问终止模式:数据或者指令终止时进入,用于虚拟存储或者存储保护sys 系统模式:运行具有特权的操作系统任务und 未定义指令终止模式:未定义的指令执行时进入该模式,用于支持硬件处理器的软件仿真.irq 中断模式:用于通用的中断处理后六种是特权模式,用于处理中断、异常和特殊权限处理用户模式是最常见的模式2.中断中的异常中断是一种异常。
当发生中断时,cpu进入中断模式cpu进入异常入口,异常入口是硬件规定的一个地址运行模式ARM920T 支持7 种运行模式:●用户(usr)):正常ARM 程序执行状态●快中断(fiq)):为支持数据传输或通道处理设计●中断(irq)):用于一般用途的中断处理●管理(svc)):操作系统保护模式●中止(abt ): 数据或指令预取中止后进入●系统(sys)):操作系统的特权用户模式●未定义(und)):执行了一个未定义指令时进入模式的改变可由软件控制,或者由外部中断或进入异常引起。
大部分应用程序都将在用户模式执行。
被称为特权模式的非用户模式,都将进入到中断服务或异常中去,或者访问受保护的资源。
内部寄存器ARM920T 总共有37 个寄存器,其中31 通用32 位寄存器和6 个状态寄存器,但不能在同一时刻对所有的寄存器可见。
处理器状态和运行模式决定了哪些寄存器对程序员可见。
ARM状态时内部寄存器集在ARM 状态,16 个通用寄存器和一个状态寄存器在任意时刻都可见。
在特权(非用户)模式下,将切换到指定模式的分组(banked)寄存器。
图2-3 显示了哪些寄存器在各模式下是可见的:分组寄存器被标记了阴影三角形。
ARM 状态时寄存器被设为包含16 个直接可以访问的寄存器:R0 到R15。
除了R15,其他全部寄存器都为通用寄存器,如可能用于保存数据或地址值。
除此之外,还有第17 个寄存器用于存储状态信息。
FIQ 模式包含7 个分组寄存器,分别映射到R8-14(R8_fiq-R14_fiq)。
在ARM 状态,有很多不需要保存寄存器的FIQ 处理程序。
用户,IRQ,管理中止和未定义模式都包含两个分组寄存器映射到R13 和R14,允许这些模式都都包含私有堆栈指针和链接寄存器。
Thumb 状态时内部寄存器集Thumb 状态时的寄存器集为ARM 状态时的寄存器的分配的一个子集。
程序员能够直接访问8 个通用寄存器R0 至R7,还有程序计数器(PC),一个堆栈指针寄存器(SP),一个链接寄存器(LR)和CPSR。
各自特权模式还分别有分组堆栈指针,链接寄存器和进程保存状态寄存器(SPSR)。
如图2-4 所示。
Thumb 状态访问高寄存器(Hi-Registers )在Thumb 状态,寄存器R8-R15(“Hi registers”)不是标准的寄存器集的一部分。
然而,汇编语言程序员可以受限的对它们的进行访问,可以将它们用于快速暂存。
使用MOV 指令的特殊变量可以将一个值从R0-R7(“Lo register”)范围内的寄存器传送到高寄存器或从高寄存器到第低寄存器。
使用CMP 和ADD 指令也可以对高寄存器的值与寄存器的值进行比较以或相加。
更多内容请参考表3-34。
程序状态寄存器ARM920T 包含了一个当前程序状态寄存器(Current Program Status Register-CPSR),还有5 个用于异常程序处理的程序状态保存寄存器(Saved Program Status Registers-SPSR)。
这些寄存器的功能为:●保存最近已处理的ALU 操作的信息●控制中断的使能与禁止●设置处理器的运行模式图2-6 显示了各位的编排状态代码标志位N,Z,C 和V 位为状态代码标志位。
算术或逻辑操作结果可能会改变这些位,并检验以决定是否应该执行某条指令。
在ARM 状态,所有指令都可能为条件执行:详情见表3-2。
在Thumb 状态,只有分支指令才能条件执行:详情见表3-46。
控制位PSR (包含I,F,T 和M[4:0])的末端8 位,统称为控制位。
当发生异常时将会改变这些位。
如果处理器运行在特权模式,它们也可由软件控制。
异常:程序暂时停止当正常程序流程被暂时停止发生异常,例如响应一个来自外设的中断。
在处理异常前,必须保护当前的处理器状态,以便在完成处理程序后能恢复到原来的程序。
如果同时发生好几个异常,将会按照固定的顺序来分配,见P2-13 的异常优先级。
进入异常行为当处理一个异常时,ARM920T 将会进行以下活动:1. 相应链接寄存器保存下条指令的地址。
如果在ARM 状态进入异常,下条指令的地址将会复制到链接寄存器(当前PC+4 或PC+8,由异常决定。
详情见表2-2)中。
如果在Thumb 状态进入异常,写入链接寄存器的值则为当前PC 偏移一个值,这样异常返回后程序能从正确的位置恢复。
这意味着异常处理不需要确定异常是从什么状态进入的。
例如,在SWI 的情况,无论是在ARM 状态还是Thumb 状态执行SWI,MOVS PC,R14_svc 语句都将返回到下一条指令。
2. 复制CPSR 的内容到相应SPSR 中。
3. 根据异常类型强制将CPSR 模式位设为某一个值。
4. 强制PC 从相关异常向量处取下条指令。
通常也会置位中断禁止标志位,以防止不同的难处理的异常嵌套。
如果一个异常发生时处理器处于Thumb 状态,当装载异常向量地址到PC 时会自动切换到ARM 状态。
离开异常行为:当异常结束,异常处理程序将会:1. 将链接寄存器适当减去一个偏移量并放入到PC 中。
(偏移量由异常类型决定)2. 复制SPSR 的内容返回给CPSR 中。
3. 如果在异常进入时置位了中断禁止标志位异常,清除中断禁止标志位。
注意:不需要在异常结束时切换回Thumb 状态,因为在异常前会立刻保存CPSR 中T 位的值到SPSR 中,并在退出异常时从SPSR 恢复到CPSR 中。
异常进入/ 退出总结表2-2 总结了进入异常时保存在相关R14 中的PC 值和被推荐的退出异常的指令。
注释:1. 此处PC 为含预取中止的BL/SWI/未定义指令取指令的地址。
2. 此处PC 为由于FIQ 或IRQ 抢先而未执行的指令地址。
3. 此处PC 为发生了数据中止的Load 或Store 指令的地址。
4. 当复位时保存在R14_svc 的值将是不可预测的。
快中断FIQFIQ(快中断请求)异常是为支持数据传输或通道处理而设计的,在ARM 状态拥有足够的私有寄存器来消除对寄存器保存的需求(这样最小化了对上下文的切换的开销)。
将nFIQ 输入端拉低可以实现外部产生FIQ。
由ISYNC 输入信号端的状态决定是同步还是异步传输。
当ISYNC 为低电平,认为nFIQ 和nIRQ 为异步,中断前会引起同步周期延迟并影响处理器流程。
无论是从ARM 还是Thumb 状态进入的异常,FIQ 处理时执行SUBS PC,R14_fiq,#4 时,都应该避免中断。
如果设置CPSR 的F 标志位,FIQ 将会被禁止(但主义这不可能在用户模式中发生)。
如果F 标志位为零,ARM920T将在每条指令末检测FIQ 同步发生器的输出是否为低电平。
中断IRQIRQ(中断请求)异常是一个由nIRQ 输入端的低电平产生的一个普通中断。
IRQ 的优先级低于FIQ,当进入了相关的FIQ,会屏蔽IRQ。
除非是在特权(非用户)模式,其他任何时刻都禁止设置CPSR 内的I 位。
无论是从ARM 还是Thumb 状态进入的异常,IRQ 处理时执行SUBS PC,R14_fiq,#4 时,都应该避免中断。
中止中止表示不能完成当前对存储器的访问。
通过外部ABORT 输入端指示的。
ARM920T 在存储器访问周期期间检测中止异常。
有两种类型的中止:●预取中止(Prefetch Abort):发生在指令预取期间●数据中止(Date Abort):发生在数据访问期间如果发生预取中止,将屏蔽预取指并为无效,但并不会立刻带来异常,直到指令到达流水线的执行阶段才发生。
若未执行该指令,将不会发生中止,因为流水线发生了分支。
如果发生数据中止,由指令类型决定其行为:●单一的数据转移指令(LDR,STR)回写到被修改的基址寄存器:中止处理程序必须意识到这点。
●交换指令(SWP)执行失败,就如同没有被执行。
●块数据转移指令(LDM,STM)完成。
如果设置了回写,基址寄存器将被更新。
如果指令会覆盖基址寄存器数据(转移列表中包含基址),覆盖将会被阻止。
表明了中止后所有寄存器的覆盖都会被阻止,特别是R15(通常是最后转移的寄存器)在一个被中止的LDM 指令会被阻止覆盖。
中止机制使得分页虚拟存储器系统可以被实现。
在这样一个系统中允许处理器产生任意地址。
当无法获取某一地址上的数据时,内存管理单元(Memory Management Unit-MMU)将表明产生一个中止。
中止处理程序必须紧接着找出中止原因,使得被请求的数据可用并重试被中止的指令。
应用程序并不需要了解可以使用的内存总量,也不需要关心中止对其状态以任何方式被影响。
当确定中止原因后,处理程序应该不顾状态(ARM 或Thumb)执行下列语句:SUBS PC,R14_abt,#4 ; 预取中止SUBS PC,R14_abt,#8 ; 数据中止这将恢复PC 和CPSR,并重试被中止的指令。
软件中断SWI软件中断指令(Software Interrupt Instruction-SWI)用于进入管理模式,通常请求一个特定的管理功能。