单片机学习之cortex芯片核心技术解析
关联:ACMP模拟比较器、CORETEXM3寄存器组、操作模式和特权级、嵌套向量中断控制器、存储器映射
一.ACMP(Analog Comparator,模拟比较器)
是一种电子电路
ACMP通常用于模拟信号的检测、数字化和触发其他电路的动作。
主要功能:
ACMP的主要功能是将模拟信号转换为数字信号。它有两个输入端,一个是正输入(+)端,另一个是负输入(–)端。当正输入端的电压大于负输入端时,比较器输出高电平;反之,则输出低电平。
类型:
ACMP有多种类型,常见的有:
应用场景:
ACMP广泛应用于各种电子设备中,以下是一些常见的应用:
- 过压或欠压检测:通过设定一个阈值,监测系统电压是否超出预定范围,触发报警或进行保护。
- 零交叉检测:用于交流电源的零交叉点检测,通常用于功率调节电路中。
- 信号比较和转换:将模拟信号(如传感器输出的电压)与参考电压进行比较,并输出数字信号(如在ADC之前的前端滤波)。
- 脉冲宽度调制(PWM)生成:通过比较一个周期性的信号(例如三角波)与一个参考信号,生成PWM波形,用于电源控制、电机控制等。
- 模拟信号的开关控制:比如在自动化控制系统中,ACMP可以用来根据输入信号的变化决定开关状态。
二.Cortex‐M3寄存器组
Cortex‐M3 处理器拥有 R0‐R15 的寄存器组。其中 R13 作为堆栈指针 SP。SP 有两个,但在同一 时刻只能有一个可以看到,这也就是所谓的“banked”寄存器。
R0‐R12 都是 32 位通用寄存器,用于数据操作。但是注意:绝大多数16位Thumb指令只能访 问R0‐R7,而32位Thumb‐2指令可以访问所有寄存器。
Banked R13: 两个堆栈指针
Cortex‐M3 拥有两个堆栈指针,然而它们是banked,因此任一时刻只能使用其中的一个。
主堆栈指针(MSP):复位后缺省使用的堆栈指针,用于操作系统内核以及异常处理例程(包括中断服务例程) 进程堆栈指针(PSP):由用户的应用程序代码使用。 堆栈指针的最低两位永远是0,这意味着堆栈总是4字节对齐的。
R14:连接寄存器
当呼叫一个子程序时,由R14存储返回地址
不像大多数其它处理器,ARM为了减少访问内存的次数(访问内存的操作往往要3个以上指令周期,带MMU 和cache 的就更加不确定了),把返回地址直接存储在寄存器中。这样足以使很多只有1级子程序调用的代码无需访 问内存(堆栈内存),从而提高了子程序调用的效率。
R15:程序计数寄存器
指向当前的程序地址。如果修改它的值,就能改变程序的执行流
三.操作模式和特权极别(Control寄存器)
Cortex‐M3 处理器支持两种处理器的操作模式,还支持两级特权操作。 两种操作模式分别为:处理者模式(handler mode,以后不再把handler中译——译注)和线程模式(thread mode)。引入两个模式的本意,是用于区别普通应用程序的代码和异常服务例程的代码 ——包括中断服务例程的代码。 Cortex‐M3 的另一个侧面则是特权的分级——特权级和用户级。这可以提供一种存储器访问的保护机制,使得普通的用户程序代码不能意外地,甚至是恶意地执行涉及到要害的操作。处理器支持两种特权级,这也是一个基本的安全模型。
在CM3运行主应用程序时(线程模式),既可以使用特权级,也可以使用用户级;但是异常服 务例程必须在特权级下执行。复位后,处理器默认进入线程模式,特权极访问。在特权级下,程序 可以访问所有范围的存储器(如果有MPU,还要在MPU规定的禁地之外),并且可以执行所有指令。
用户级进入特权级
用户级的程序不能简简单单地试图改写CONTROL寄存器 就回到特权级,它必须先“申诉”:执行一条系统调用指令(SVC)。这会触发 SVC 异常,然后由异常 服务例程(通常是操作系统的一部分)接管,如果批准了进入,则异常服务例程修改CONTROL寄存 器,才能在用户级的线程模式下重新进入特权级。从用户级进入特权级的唯一途径就是异常
四.内建的嵌套向量中断控制器
嵌套向量中断控制器NVIC(Nested Vectored Interrupt Controller)
Cortex‐M3 在内核水平上搭载了一颗中断控制器——嵌套向量中断控制器NVIC(Nested Vectored Interrupt Controller)。它与内核有很深的“私交”——与内核是紧耦合的。NVIC提供如下的功能: 可嵌套中断支持 向量中断支持 动态优先级调整支持 中断延迟大大缩短 中断可屏蔽
抢占中断
这些异常都可以被赋予不同的优先级。当前优先级被存储在 xPSR 的专用字段中。当一个异常发生 时,硬件会自动比较该异常的优先级是否比当前的异常优先级更高。如果发现来了更高优先级的异 常,处理器就会中断当前的中断服务例程(或者是普通程序),而服务新来的异常——即立即抢占。
中断处理过程的详细步骤
当中断发生时,STM32 中的处理器会执行以下步骤:
-
自动保存现场:处理器会将当前的执行上下文(寄存器值)自动推送到栈中。具体来说,以下内容会被保存:
- R0 到 R3:这些寄存器通常用作传递参数。
- R12:这个寄存器通常用作通用寄存器。
- LR (Link Register):保存中断发生前的返回地址。
- PC (Program Counter):保存当前执行的地址,通常是中断向量表中对应中断的地址。
- xPSR (Program Status Register):保存处理器的状态,包括条件标志、控制标志和中断状态等。
-
进入中断服务例程(ISR):中断向量会跳转到对应的中断服务例程,执行中断处理。
-
中断处理完成后恢复现场:当中断服务例程执行完毕后,处理器会自动从栈中恢复现场。恢复的内容包括:
- PC:恢复中断发生前的执行位置(返回到中断发生之前的代码位置)。
- xPSR:恢复执行状态。
- R0 到 R3 和 R12:恢复之前的寄存器值。
- LR:恢复中断返回的地址。
-
返回主程序:中断处理完成后,执行返回指令(通常是
bx lr
),返回到中断发生前的位置,继续执行主程序。
中断可屏蔽
既可以屏蔽优先级低于某个阈值的中断/异常 (设置 BASEPRI 寄存器),也可以全体封杀(设 置PRIMASK 和FAULTMASK 寄存器)。这是为了让时间关键(time‐critical)的任务能在死线(deadline, 或曰最后期限)到来前完成,而不被干扰。
五.存储器映射
通过把片上外设的寄存器映射到外设区,就可以简单地以访问 内存的方式来访问这些外设的寄存器,从而控制外设的工作。
特点:
硬件层面:存储器映射通常涉及物理地址和处理器地址之间的映射关系。它会将处理器的地址空间划分成不同的区域,每个区域可能对应一个外设、外部存储器或内存的不同部分。
访问方式:CPU 通过读取或写入特定的地址来访问外部设备或内存。例如,单片机的 GPIO 寄存器、串口(USART)、定时器(Timers)等外设通常通过特定的内存地址进行访问,这些地址就属于存储器映射的一部分。
静态映射:存储器映射在设计时就已经固定好,不会根据数据的访问变化而变化。CPU 通过直接访问内存中的地址来进行读写操作。
作者:q2380957683