arm的异常和中断处理

    arm处理器有7种可以使正常指令中止执行的异常情况:数据中止,快速中断请求,中断请求,预取指令中止,软件中断,复位及未定义指令.arm把中断定义为一类特殊的异常.

    大多数异常都对应一个软件的异常处理程序--一个在异常发生时执行的软件程序.每种异常都导致内核进入一种特定的模式.此外,可以通过编程改变cpsr,进入任何arm处理器模式.用户和系统模式是仅有的可不通过相应异常进入的2种模式,换句话说,要进入这2种模式,必须修改cpsr.

    复位异常处理程序对系统进行初始化,包括配置存储器和cache.外部中断源必须在IRQ或FIQ中断允许之前初始化,以避免在还没有设置好相应的处理程序前产生中断.复位处理程序还要为所有处理器模式设置堆栈指针.

    在流水线中,如果某条指令(试图取的指令)的"执行"阶段没有优先级更高的异常出现,将发生预取指令中止异常.在进入相应的处理程序时,内核禁止IRQ异常,而保持FIQ不变.如果允许了FIQ,并且发生了一个异常FIQ异常,则它可在处理预取指令中止过程中得到响应.

    软件中断(SWI)异常发生在执行SWI指令,且没有更高优先级的异常标志置位的情况下.在进入相应处理程序时,cpsr将被设置成管理模式.

    当一条不属于arm或thumb指令集的指令到达流水线的执行阶段时,若此时没有其它异常发生,就会产生未定义指令异常.arm处理器会"询问"协处理器,看它能否将其当作一条协处理器指令来处理.由于协处理器在流水线之后,所以指令确认可以在内核的执行阶段执行.如果这条指令不属于任何一个协处理器,则会产生未定义指令异常.

    SWI和未定义指令异常享有相同的优先级,因此不能同时发生.换句话说,正在执行的指令不可能既是一条SWI指令,又是一条未定义指令.

    当一个异常发生时,链接寄存器就设置成基于当前pc值的一个特定地址.

    arm处理器有2种类型的中断.第一类是由外设引起的,即IRQ和FIQ.第二类是一条引发中断的特殊指令--SWI指令.2种中断都会挂起正常的程序执行.

    中断延迟是指:从外部中断请求信号发出到取出对应的中断服务程序(ISR)的第一条指令,这期间的间隔时间.

你可能感兴趣的:(异常,职场,中断,ARM,休闲)