Cortex-M0(3)---ARM Cortex-M0 异常与中断

ARM Cortex-M0 异常与中断

  1. 异常类型及编号 
    Cortex-M0的每个异常源都有一个单独的编号: 
    1~15内部系统异常:Reset(1), NMI(2), H/W Error(3), SVC(11), PndSV(14), SysTick(15)其他编号未用; 
    16~47外部中断: IRQ#0~IRQ#31.

  2. 异常优先级 (Cortex-M0 支持7个) 
    1). Cortex-M0 支持3个固定的最高优先级(Reset(-3), NMI(-2), H/W Error(-1))和4个可编程优先级; 
    2). 可编程寄存器有8bit宽,但只有Bit7和Bit6可配置,其余Bits为0. (优先级由高到低:0x00,0x40,0x80,0xC0); 
    3). 如果两个同时发生的异常的优先级相同,则先执行异常编号小的。(IRQ#0,IRQ#1 则先执行IRQ#0)

  3. 向量表(异常处理所需的起始地址信息) 
    异常向量的地址为异常编号乘以4(Reset向量的地址为:1*4=0x00000004),其他向量地址如下图所示: 
    这里写图片描述

  4. EXC_RETURN(32Bits) 
    该值用于异常返回机制,下图是其位域的含义: 
    这里写图片描述

    3个合法值: 
    0xFFFFFFF1 返回处理模式(嵌套异常发生的情况) 
    0xFFFFFFF9 返回线程模式并在返回中使用主栈(MSP); 
    0xFFFFFFFD 返回线程模式并在返回中使用进程栈(PSP);

  5. 异常的流程

    接受异常请求: 
    1) 中断和SysTick中断使能; 
    2) 未被NMI屏蔽掉; 
    3) 异常优先级大于当前执行的异常优先级。

    压栈及相关寄存器更新: 
    1) 压栈并更新栈指针(8个registers被压栈:R0~R3, R12, R14/LR, R15/PC, xPSR); 
    2) 取出异常向量写入PC中; 
    3) 3个寄存器更新(LR<–EXC_RETURN, IPSR<–异常编号, NVIC<– 对应的中断控制和状态)

    执行异常处理: 
    1) 自动定位异常向量,并处理; 
    2) 利用EXC_TURN的值来触发异常返回机制。

    异常退出: 
    1) 寄存器出栈; 
    2) 恢复返回地址,并执行异常前程序。

  6. 3种主要的异常及其机制:(单异常,末尾连锁,延迟到达) 
    1)单异常 
    这里写图片描述

    2)末尾连锁 
    这里写图片描述

    3)延迟到达 
    这里写图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值