物联网之ARM体系结构及接口技术三(异常处理)

异常处理

异常种类

•   中断     IRQ  FIQ        外部硬件触发

•    软中断   Soft interrupt  系统调用

•    复位     Reset           如手机死机了,按power键 

•    未定义指令  Undefined instruction  

•    数据异常    Data abort    数据越界 

中断异常

ARM 有两级外部中断 FIQ,IRQ.

可是大多数的基于ARM 的系统有 >2个的中断源!
因此需要一个中断控制器

Note: 通常中断处理程序总是应该包含清除中断源的代码。

物联网之ARM体系结构及接口技术三(异常处理)

异常处理 过程

物联网之ARM体系结构及接口技术三(异常处理)

异常 向量表

异常与工作模式关系:

复位, 软中断                         -->  SVC

Prefetch(预取), Data Abort   -->  Abort

user system 模式不是异常触发切换的, 程序员修改CPSR,实现切换的 

异常是随机的

物联网之ARM体系结构及接口技术三(异常处理)

软中断程序

.section  .text

    .global  _start

_start:

     b    reset

     ldr  pc,_undefined_instruction  @突破32M范围的限制

     ldr  pc,_software_interrupt

     ldr  pc,_prefetch_abort

     ldr  pc,_data_abort

     ldr  pc,_not_used

     ldr  pc,_irq

     ldr  pc,_fiq

_undefined_instruction:   .word  _undefined_instruction

_software_interrupt:        .word

softirq_handler

_prefetch_abort:             .word  _prefetch_abort

_data_abort:             .word  _data_abort

_not_used:             .word  _not_used

_irq:             .word  _irq

_fiq:             .word  _fiq

softirq_handler:

      stmfd     sp!, {r0-r12, lr}

     ldr           r0,[lr,#-4]

     bic           r0,r0,#0XFF000000

     bl             swi_do

     ldmfd       sp!, {r0-r12, pc}^

eset:

        mov  r0,#0x10

        swi  0x01

        mov  r0,#0x20

        swi  0x02

        b     reset

 

swi_do:

    cmp  r0,#0x01

    beq  num1_do

    cmp  r0,#0x02

    beq  num2_do

    b    swi_do_end

num1_do:

    mov r4,#1

num2_do:

    mov r4,#1

swi_do_end:

    mov  pc,lr

 

        .align    4

        .data

        .word  20*4

stack_top:

        .end