异常类型如下:
- 复位:在加电或热复位时调用复位。异常模型将复位视为一种特殊形式的异常。当复位置为有效时,处理器停止工作(可能停止在指令执行的任何位置)。当复位置为无效时,处理器从矢量表中复位条目所指定的地址重新开始执行。在线程模式下,执行以特权级执行方式重新启动。
- 硬故障:硬故障是由于异常处理期间发生错误或某个异常无法通过任何其他异常机制管理而引发的异常。硬故障的优先级固定为 –1,这意味着它们的优先级高于具有可配置优先级的任何异常。
- 总线故障:总线故障是由于指令或数据存储器事务的内存相关故障(例如预取故障或内存访问故障)而发生的异常。这种故障可启用或禁用。
- 使用故障:使用故障是由于与指令执行相关的故障而发生的异常,例如:
- 未定义的指令
- 非法的未对齐访问
- 指令执行中的无效状态
- 返回异常时出错
当内核配置正确时,对字或半字内存访问中的未对齐地址或除以零的操作都会触发使用故障。
- SVCall:监管调用 (SVC) 是由 SVC 指令触发的异常。在操作系统环境中,应用程序可以使用 SVC 指令访问操作系统内核功能和设备驱动程序。
- 调试监控器:该异常是由调试监控器(未停止时)引起。该异常仅在启用时有效。如果该异常的优先级低于当前激活的优先级,则该异常不会激活。
- PendSV:PendSV 是一种可挂起、由中断驱动的系统级服务请求。在操作系统环境中,当没有其他异常处于活跃状态时,使用 PendSV 执行上下文切换。PendSV 使用中断控制和状态 CPU_SCS:ICSR 寄存器来触发。
- SysTick:当系统计时器达到 0 且允许生成中断时,会生成 SysTick 异常。软件也可以使用中断控制和状态寄存器 CPU_SCS:ICSR 来生成 SysTick 异常。在操作系统环境中,处理器可以使用此异常作为系统节拍。
- 中断 (IRQ):中断或 IRQ 是由外设发出信号或由软件请求生成并通过 NVIC(具有优先级)馈送的异常。所有中断都与指令执行异步。在系统中,外设使用中断与处理器进行通信。表 6-7 列出了 CC13x2 和 CC26x2 器件平台的控制器上的中断。
对于除复位以外的异步异常,处理器可以在触发异常和处理器进入异常处理程序之间执行另一条指令。
特权软件可以禁用 表 6-1 显示为具有可配置优先级的异常(请参阅 节 3.9.4 中的 CPU_SCS:SHCSR 寄存器和 CPU_SCS:NVIC_ICER0 寄存器)。
有关硬故障、、总线故障和使用故障的更多信息,请参阅 节 6.2。
表 6-1 异常类型
| 异常类型 |
矢量编号 |
优先级 (1) |
矢量地址或偏移量 (2) |
激活 |
| — |
0 |
— |
0x0000 0000 |
栈顶在复位时从矢量表的第一个条目加载。 |
| 复位 |
1 |
-3(最高) |
0x0000 0004 |
异步 |
| — |
— |
— |
— |
— |
| 硬故障 |
3 |
-1 |
0x0000 000C |
— |
| 总线故障 |
5 |
可编程 (3) |
0x0000 0014 |
精确时同步,不精确时异步 |
| 使用故障 |
6 |
可编程 |
0x0000 0018 |
同步 |
| — |
7 至 10 |
— |
— |
保留 |
| SVCall |
11 |
可编程 |
0x0000 002C |
同步 |
| 调试监控器 |
12 |
可编程 |
0x0000 0030 |
同步 |
| — |
13 |
— |
— |
保留 |
| PendSV |
14 |
可编程 |
0x0000 0038 |
异步 |
| SysTick |
15 |
可编程 |
0x0000 003C |
异步 |
| 中断 |
16 及以上 |
可编程 (4) |
0x0000 0040 及更高 |
异步 |
(1) 0 是所有可编程优先级的默认优先级。