• 正文
    • 1.LPC82x (Cortex-M0+ CPU)的中断系统概述
    • 2.中断编号
    • 3.中断开关控制示意图
    • 4.在LPC8xx上使用中断
    • 5.LPC8xx的CPU内核(M0+)支持的其它中断
    • 6.中断向量表
    • 7.LPC82x启动文件(keil_startup_lpc82x.s)中的中断向量表
  • 相关推荐
  • 电子产业图谱
申请入驻 产业图谱

LPC82X 的中断系统概述

02/10 17:06
521
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

1.LPC82x (Cortex-M0+ CPU)的中断系统概述

1.1 M0+内部集成了中断系统的核心功能:

  • 管理中断的进入、退出、嵌套,与优先级制度;自动保存与恢复现场
  • 这一切都是全自动的,软件看不见——也就是说不用写汇编代码!

1.2 M0+自带了一个嵌套中断控制器,简称NVIC,支持32路中断输入

  • 提供开关控制
  • 反映和控制待决标志
  • 设置优先级
  • 反映ISR是否已进入
  • 如果发生嵌套,可以出现两个以上中断的ISR已进入的情况

1.3 除了来自NVIC的中断,M0+自身还定义了其它的特殊中断类型

  • 不可屏蔽中断(NMI), 硬故障(Hard_Fault), 系统服务(SVCall, PendSV),系统节拍定时器(SysTick)

2.中断编号

2.1 M0+ CPU为每个中断都分配了唯一识别号

  • 你可以把它当作是中断源的身份证号

2.2 中断号非常重要,它是识别和响应中断的凭据

  • 中断号用于寻找ISR的入口地址
  • M0+内核以变换后的中断号记录当前的中断
  • NVIC就是以中断号管理各路中断源的

2.3 在NVIC的API函数中也是以中断号作为参数

  • 这个和我们写程序时关系最密切了
  • 在cmsis.h中的”IRQn_Type”定义了LPC8xx的中断编号分配
    • NVIC管理的中断从0号开始
    • M0+直接管理的特殊中断,中断号为负

3.中断开关控制示意图

4.在LPC8xx上使用中断

5.LPC8xx的CPU内核(M0+)支持的其它中断

除了来自NVIC的中断,M0+还支持其它的特殊中断类型,用于任何以M0+为内核的MCU

  • NMI: 不可屏蔽中断。LPC8xx可以任选一个中断源连接到NMI
    • 常用的是把看门狗中断或者欠压警告中断连接到NMI,它们的后果很严重。
  • Hard_fault: 软件或总线错误导致程序不能执行下去时,就会产生hardfault(硬故障),并且走中断响应的流程进入Hard_Fault中断
    • 例如,软件存取了一个不存在的地址,或者地址没有对齐
    • 又如,CPU读取到的指令译码失败(如果M3的bin文件烧到了M0的器件上)
  • SVCall和PendSV: 给操作系统选用的系统服务中断(咱们一般不用)
    • 在严格划分特权级别以保护系统的RTOS上可能会用到SVCall
    • PendSV专用于上下文切换
  • SysTick: 这是M0+自带的一个简单的节拍定时器所对应的中断源。
    • 在一般情况下可以作为系统的时基,有超低功耗要求时不能用。

6.中断向量表

6.1 M0+要求程序在CPU看到的0地址存储一张表,称为“中断向量表”

  • 每个表目存储一个ISR的入口地址(有些位置没有用到)
  • 每个中断源在表中有自己的位置
    • NVIC管理的中断,就是中断号+16
    • M0+自己管理的中断,另有编号机制
  • 0号表目有些特殊,它存储复位后的栈指针,会被装载到SP寄存器
  • 默认的中断向量表存储在启动代码中

6.2 LPC8xx提供“0地址重映射”功能,把0地址开始的512字节范围映射到Flash, RAM, 或者Boot ROM

  • 用户程序执行时默认把Flash映射到0.
  • 用户程序可以今后再手工把向量表放到Flash或RAM
  • 映射成RAM后,Flash的前512字节内容无法被访问到!

6.3 启动后,M0+允许把向量表放到别处 (NVIC的VTOR寄存器)

7.LPC82x启动文件(keil_startup_lpc82x.s)中的中断向量表

前16个是M0+内核自己管理的特殊向量,有两个比较特殊:

  • 0号:栈指针初值
  • 1号:复位后第1条指令的地址
  • 7号: 是前面7个向量之和的checksum补码由开发工具自动计算

后面32个是NVIC管理的最多32路中断未用到的填0

点赞
收藏
评论
分享
加入交流群
举报

相关推荐

电子产业图谱