经过前一期的芝识课堂,我们了解了东芝MCU产品所基于Arm Cortex-M3内核的基本结构和寄存器分配的细节。大家一定迫不及待地想知道Arm Cortex-M3内核的操作模式又有哪些技巧吧?今天芝子就带大家详细学习一下吧!
Arm Cortex-M3有两个特权(特权/非特权)和两种操作模式(线程/处理者)。对于嵌入式使用,可以选择只有特权级别的基本配置或在特权和非特权之间切换的配置。在特权/非特权级别下,通过在分配给寄存器R13的主栈指针(MSP)与进程栈指针(PSP)之间切换,堆栈区域可由操作系统内核以及用户例程等处理功能分离和管理。
如果发生异常/中断的程序,控制寄存器的状态以及堆栈指针的切换情况是怎么样的呢?如图1所示,当发生异常/中断时,使用中的堆栈会随控制寄存器CONTROL的状态而改变。以显示主栈指针(MSP)和进程栈指针(PSP)之间的切换状态。
图1 发生异常/中断的程序时控制寄存器的状态
以及堆栈指针的切换
Arm Cortex-M3内核的所有异常都在特权模式下运行,且具有中断特权并支持嵌套中断,所有异常都集成在NVIC寄存器中。值得注意的是,因每个设备而异,部分设备中断过程支持外部中断。异常可通过复位、中断、故障和系统调用执行。异常类型和特权级别如图2所示。
图2 异常类型和特权级别
对于集成异常的NVIC控制寄存器,当发生异常和中断操作时,它作为从主内核到存储器的设备被访问,用于控制各中断使能的设置与清除、控制各中断请求的设置与清除(释放保留)以及控制中断的优先级。
下面我们再带大家了解NVIC块的基本功能之一——外部中断处理控制,将使能位和挂起位分配给每个外部中断信号,并配置控制寄存器。控制寄存器分为仅设置寄存器和仅清除寄存器。外部中断的产生通过优先级寄存器的信息来控制。该寄存器用于设置中断优先级以及使能位和挂起位的状态,如图3。Arm Cortex-M3通过NVIC控制实现高速入栈/出栈处理,此外,如果中断处理过程中同时发生中断请求或发生高优先级的中断请求,则入栈/出栈处理的寄存器自动保存将被忽略,从而改善处理时间。
图3
介绍完异常和中断操作,我们再来看看Arm Cortex-M3规格的存储器映射。图4是Arm Cortex-M3规格的存储器映射示意图,可以清楚看到每个存储器对应的存储功能。图5则展示了这款MCU的存储器映射细节,从中可以看到相比于Arm Cortex-M3标准的规格,该芯片的部分存储器映射进行了深度优化。
图4
图5
在CPU接收到外部中断/异常时,它会先查询向量表,以查找到相应的中断服务程序地址。向量表是指中断服务程序入口地址的偏移量与段基址,一个中断向量占据4字节空间。各种异常的处理者(处理例程)的起始地址是分别设置的。当异常或中断事件发生时,从地址开始获取异常处理者。各种异常的向量表如图6所示。
图6
此外,关于位带和位带别名区的详细信息如图7所示。存储器中的数据通过1位单元进行有效运算。1位单元通过将位带区的数据加载或存储到位带别名区来访问这些数据。
那么位带区数据和位带别名区的地址如何分配?位带别名区的地址以字为单位进行分配(1个字=32位):位带别名区的字地址bit0访问位带区的每个位;位带别名区的字地址的分配方式为,每个地址分配给位带区的每个位。
图7
今天的芝识课堂,我们深入探讨了Arm Cortex-M3内核的操作模式,并分析了存储器映射的具体细节。接下来我们会一起进入东芝MCU产品的外围电路部分,学习如何针对不同应用增加各种功能单元,从而助力低功耗高性能解决方案开发的,敬请期待!
审核编辑:刘清
全部0条评论
快来发表一下你的评论吧 !