【RTOS】ARM Cortex-M异常处理过程

Cortex-M3与Cortex-M4

1. 处理器输入、输出和外设访问

一般来说,外设在使用前需要初始化,一般包括以下几步:

  1. 如果需要,设置时钟控制回路使能连接到外设和对应引脚的时钟。许多现代微控制器允许对时钟信号分布的精细调节,如使能/禁止到每个外设的时钟连接以节省功耗。外设时钟一般是默认关闭的,需要在编程外设前使能时钟。有些情况下,可能还需要使能外设总线系统的时钟。
  2. 有些情况下,可能还需要配置I/O引脚的操作模式。大多数微控制器都有复用的I/O引脚,可用于多种目的。为了使用外设,配置I/O引脚以匹配用途是很有必要的(如输入/输出方向、功能等)。另外,可能还需要编程其他的配置寄存器,定义输出类型等预想的电气特性(电压、上拉/下拉和开漏等)。
  3. 外设配置。多数外设中包含多个可编程寄存器,它们需要在使用前进行配置。有些情况下,会发现配置流程比8位微控制器要稍微复杂一些,这是因为32位微控制器的外设一般要比8位/16位系统的外设要复杂得多。另外,微控制器供应商一般会提供设备驱动库代码,可以使用这些驱动函数以降低所需的编程工作量。
  4. 中断配置。若外设需要使用中断操作,则需要编程Cortex-M3/M4处理器的中断控制器(NVIC),使能中断和配置中断优先级。

微控制器供应商需要将下面的部件添加到存储器系统中;

  • 程序存储器,一般是Flash。
  • 数据存储器,一般是SRAM。
  • 外设

2. Cortex-M3与Cortex-M4 OS支持和系统级特性

Cortex M3Cortex-M4处理器在设计时就考虑了对嵌人式OS的高效支持。它们具有一个内置的系统节拍定时器SysTick,可以为OS定时提供周期性定时中断。由于SysTick定时器在所有的Cortex-M3Cortex-M4设备中都存在,嵌人式OS的源代码可以很容易地就能用在所有的这些设备上,而无须为设备相关的定时器进行修改。

Cortex-M3Cortex-M4具有两个栈指针: OS内核和中断用的主栈指针(MSP)以及应用任务用的进程栈指针(PSP)。这样,OS内核用的栈就和应用任务的栈分离开来了,可靠性得到提高的同时,栈空间的使用也得到了优化。没有OS的简单应用可以只使用MSP

为了进一步提高可靠性,Cortex-M3Cortex-M4支持独立的特权和非特权操作模式,处理器在启动后默认处于特权模式。当使用OS且执行用户任务时,用户任务可以在非特权操作模式中执行,这样可以增强某些限制,如阻止对一些NVIC寄存器的访问。特权和非特权操作模式也可以同MPU一道,防止非特权任务访问某些存储器区域。这样,用户任务就无法破坏OS内核以及其他任务的数据,因此,也就提高了系统的稳定性。

3. 寄存器

3.1 R13,栈指针(SP)

R13为栈指针,可通过PUSHPOP操作实现栈存储的访问。物理上存在两个栈指针:主栈指针(MSP,有些ARM文献也称其为SP_main)为默认的栈指针,在复位后或处理器处于处理模式时

你可能感兴趣的:(RTOS,arm,单片机,arm开发,iot)