ARM_Cortex-M3内核结构(12)
发布时间:2021-06-07
发布时间:2021-06-07
LDR R1,=0x01 STR R1,[R0]
将片上外设 I/O 端口的 A 口的第 0 位(也即 PORTA0)为输出,其 A 口的方向寄存器地址为 0x40004400, 设置 1 作为输出,可根据上述关系计算出位带别名为 0x42088000。如程序清单 L2.2 所示。
程序清单 L2.2 片上外设位操作实例
LDR R0,=0x42088000 LDR R1,=0x01 STR R1,[R0]
注:采用大端格式时,对位邦定别名区的访问必须以字节方式,否则访问不可预知。
2.5 异常
ARM Cortex-M3 中异常涉及异常的类型、优先级、向量表等,本节并以 Luminary 系列微控制器为 例
说明异常的具体行为。
2.5.1 异常类型
在 Cortex-M3 中有 一个 与内 核紧 耦 合部 件叫 嵌套向 量 中断 控制 器( NVIC, Nested Vectored Interrupt Controller),定义了 16 种系统异常和 240 路外设中断。通常芯片设计者可自由设计片上外 设,因此具体的片上外设中断都不会用到多达 240 路。如表 2.4 所示系统异常类型,表 2.5 所示为外设 中断类型。
Cortex-M3 中目前只有 11 种系统异常可用分别是:系统复位、NMI(不可屏蔽中断)、硬件故障、 存储器管理、总线故障、用法故障、SVCall(软件中断)、调试监视器中断、PendSV(系统服务请求)、 SysTick(24 位定时器中断)。240 路外设中断,是指片上外设的各模块,比如 I/O 口、UART 通信接口、 SSI 总线接口等所需的中断。
表 2.4 异常类型
表 2.5 中断类型
2.5.2 优先级
Cortex-M3 的异常功能非常强大,机制非常灵活,异常可以通过占先、末尾连锁和迟来等处理来降 低中断的延迟。优先级决定了处理器何时以及怎样处理异常。
Cortex-M3 支持 3 个固定的高优先级和多达 256 级的可编程优先级,并且支持 128 级抢占,绝大多 数芯片都会精简设计,实际中支持的优先级数会更少,如 8 级、16 级、32 级等,通常的做法是裁掉表 达优先级的几个低端有效位(防止优先级反转),以减少优先级的级数。比如 Luminary 的芯片采用 8 级优先级。
Cortex-M3 中 NVIC 支持由软件指定的可配置的优先级(称为软件优先级),其寄存器地址为: 0xE000_E400-0xE000_E4EF。通过对中断优先级寄存器的 8 位 PRI_N 区执行写操作,来将中断的优先级 指定为 0-255。硬件优级随着中断中的增加而降低。0 优先级最高,255 优先级最低。指定软件优先级 后,硬件优先级无效。例如:如果将 INTISR[0]指定为优先级 1,INTISR[31]指定为优先级 0,则 INTISR[0] 的优先级比 INTISR[31]低。 为了对具有大量中断的系统加强优先级控制,Cortex-M3 支持优先级分组,通过 NVIC 控制,设置 为占先优先级和次优先级。可通过对应用程序中断及复位控制寄存器(AIRCR,地址为:0xE000_ED00) 的[10:8]位进行设置。如果有多个激活异常共用相同的组优先级,则使用次优先级区来决定同组中的异 常优先级,这就是同组内的次优先级。如表 2.6 应用程序中断及复位控制寄存器,表 2.7 为占先优先级
和次优级的关系。
表 2.6 应用程序中断及复位控制寄存器(AIRCR,地址:0xE000ED00)