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

异常处理

异常种类

•   中断     IRQ  FIQ        外部硬件触发

•    软中断   Soft interrupt  系统调用

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

•    未定义指令  Undefined instruction  

•    数据异常    Data abort    数据越界 

中断异常

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

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

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

异常处理 过程

异常 向量表

异常与工作模式关系:

复位, 软中断                         -->  SVC

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

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

异常是随机的

软中断程序

.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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值