STM32F1 Programming manual学习笔记2.3

2.3 Exception model

Exception states

  1. Inactive:异常既不是运行态也不是挂起态
  2. Pending:异常正在等待被控制器控制服务,一个由外设或软件产生的中断可以改变相关中断的状态为挂起态
  3. Active:一个正在被处理器服务且没有完成的异常,注意:一个异常处理可以中断另一个异常处理的执行,在这种情况下,两个异常都处于运行态
  4. Active and pending:这个异常正在处理里服务同时这有一个来自同样资源的挂起异常

Exception types

  1. Reset:复位在电源启动或热复位时调用的,异常模型将reset视为异常的一种特殊形式。当reset被断言时,处理器的操作就会停止,可能是在指令中的任何位置。当reset被取消断言是,执行将从vector表中的reset条目提供的地址重新启动。以县城模式以特权模式重新启动执行
  2. NMI:一个NonMaskable Interrupt(NMI)可以被外设以信号通知或者被软件触发。这是除了reset之外最高优先级的异常。它被永久性的使能并有一个固定的优先级-2。NMI只能被RESET抢占,不能被任何其他异常从activation状态组织
  3. Hardfault:因为在异常处理的过程中出现一个错误或者因为一个异常不能在其他的异常中被管理,那么就会产生hardfault,它的优先级限定为-1,意味着它的优先级高于任何可配置的优先级
  4. Memory management fault:产生是由于一个内存保护相关的错误
  5. Bus fault:产生由于因指令或数据内存处理导致的内存相关的错误
  6. Usage fault:产生原因包括:一个未定义的指令、一个非法的为对齐的入口、在指令执行中的无效状态、在异常返回中的错误;在应用中如下问题会导致usage fault:一个在内存入口中未以字和半字对齐的地址、除以0
  7. SVCall:SVC是由SVC指令引起的异常,在OS环境中,应用程序可以用SVC指令访问OS内核函数和设备驱动
  8. PendSV:PendSV是对系统级服务的中断驱动请求,在一个操作系统环境,当没有其他异常活动时,使用PendSV进行上下文切换
  9. SysTick:SysTick异常是系统计时器在它达到零时生成的异常。软件还可以生成SysTick异常。在操作系统环境中,处理器可以使用此异常作为系统标记
  10. IRQ: 中断是有外围设备发出信号或由软件请求生成的异常。所有中断都是与指令执行异步的。在系统中,外围设备使用中断与处理器通信。
  11. 对于除了reset之外的异步异常,处理器可以在异常被触发和处理器进入异常处理程序之间执行其他的指令

2.3.3 Exception handlers

  1. Interrupt Service:Interrupts IRQ0 to IRQ67 are the exceptions handled by ISRs.
  2. Fault handlers:Hard fault ,memory management fault, usage fault, bus fault are fault exceptions handled by the fault handlers
  3. Sytem handlers:NMI,PendSV,SVCall SysTick and the fault exceptions are all system exceptions that are handled by system handlers.

2.3.4 Vector table (中断向量表)

在这里插入图片描述

在系统reset之后,中断向量表被固定在地址address 0x00000000;特权软件可以写到VTOR来重定位中断向量表的起始地址到不同的内存地址,从0x00000080到0x3FFFFF80

2.3.5 异常优先级

  1. 小的优先级值代表更高的优先级
  2. 除了Reset Hard fault 和 NMI都可以配置优先级

2.3.6 中断优先级组

中断优先级可以分为两部分:抢占优先级和子优先级;当具有不同的抢占优先级的时候,不管子优先级,处理器会处理更低数值的抢占优先级的异常;当具有相同的抢占优先级的时候,两个异常具有不同子优先级同时到来,那么处理器会处理具有低子优先级的异常;如果多个挂起中断具有相同的抢断优先级和子优先级,那么处理器会优先处理IRQ值最低的中断;

2.3.7 Exception entry and return

术语

  1. Preemption:抢占
  2. Return: 异常处理执行完成,处理器会弹出堆栈并重新保存在中断之前的处理器状态到状态位
  3. Tail-chaining:这种机制加快了异常的服务,在异常处理完之后,如果还有一个挂起的异常需要处理,那么堆栈弹出这一步将会被跳过,同时控制直接转移到新的异常处理
  4. Late-arriving:我个人的理解就是相对于3一样,也是为了加快异常的服务,也就是在进入一个异常前的保存state阶段,如果有一个更高优先级的异常进来,那么继续状态保存,保存完去执行更高优先级异常的处理,原因是状态保存是不能被打断的,而且对于两个异常的状态保存都是必须且一样的

Exception Entry

待消化理解

Exception return

通过lr返回EXC)RETURN的值,来表示不同的含义,如下所示:
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/u012850592/article/details/89679458