首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

ARM中的异常和中断更新

ARM中的异常和中断更新

ARM中的异常和中断

   ARM处理器中主要有7个异常(2个中断异常):

      1、复位异常;在以ARM为核的单片机中,常把下列事件作为引起复位的原因。

      • 上电复位:在上电后,复位使内部达到预定的状态,特别是程序跳到初始入口;

      • 复位引脚上的复位脉冲:这是由外部其他控制信号引起的;

      • 对系统电源检测发现过压或欠压;

      • 时钟异常复位。

    ARM处理器复位后,处理器硬件将进行以下操作:

      • 强制进入管理模式;

      • 强制进入ARM状态;

      • 跳转到绝对地址PC=0x00000000处执行;

      • 禁止IRQ中断和FIQ中断。

      复位后,程序状态寄存器如下:        

                  

......

I

F

T

M4

M3

M2

M1

M0


1

1

0

1

0

0

1

1

        上电复位后,进入管理模式,执行操作系统程序,一般用做对系统初始化,例如开中断等;然后切换到用户模式,开始执行正常的用户程序。

        切换到用户模式可使用下列程序:

        MRS R0,CPSR    ;读状态寄存器
        BIC R0,R0,#03   ;把末两位清0
        MSR CPRS_c,R0   ;把修改后的值加载给状态寄存器,切换结束
        ......          ;用户程序

    2、未定义指令异常;由于ARM使用32位代码,包含的信息量很大,可达2的31方(4G)。ARM指令集不能用尽所有代码。当ARM处理器遇到无法译码的指令时就会发

生未定义指令异常。进入中断处理程序。

    ARM的未定义指令异常有以下两种情况:

    (1)遇到一条无法执行的指令,此指令没有定义;

    (2)执行一条对协处理器的操作指令,在正常情况下,协处理器应该应答,但协处理器没有应答。

    未定义异常中断时,状态寄存器中的F位不变。使用下列指令退出异常中断,返回原程序 。

    • 把下一条指令的地址拷贝给LR;

    • 把程序状态寄存器CPSR拷贝给SPSR_und;

    • 强制进入未定义模式;

    • 强制进入到ARM模式;

    • 跳转到绝对地址PC=0x00000004处执行;

    • 禁止IRQ中断。

    进入中断后,程序状态寄存器如下:

                  

......

I

F

T

M4

M3

M2

M1

M0


1

x

0

1

1

0

1

1

     MOVS PC,R14.

     3、软件中断异常;是由指令SWI引起的。程序在执行这一指令后,进入异常中断。处理器响应中断,硬件执行如下的操作。

     • 把下一条指令的地址拷贝给LR;

     • 把程序状态寄存器CPSR拷贝给SPSR_svc;

     • 强制进入管理模式;

     • 强制进入到ARM状态;

     • 跳转到绝对地址PC=0x00000008处执行;

     • 禁止IRQ中断。

     进入中断后的程序状态寄存器如下:

                  

......

I

F

T

M4

M3

M2

M1

M0


1

x

0

1

0

0

1

1

     软件中断处理程序完成后,使用下列指令返回到原中断处:MOVS PC,R14.
返回列表