Cortex-M的掌握
真正掌握好一个MCU就需要充分掌握它的内核指令集和寄存器。对于一个MCU而言,其每次升级和进化都伴随着这两个或一个的改变,这个改变也是带来MCU质的飞跃的重要因素,针对ARM Cortex M3内核的MCU而言,其ARM Cortex M3处理器具有寄存器R0-R15以及多个特殊寄存器。R0-R12为通用目的寄存器,其又划分为R0-R7和R8-R12,R0-R7为低寄存器,它可通过所有的16位的thumb指令和32位的thumb-2指令,而R8-R12为高寄存器,它可通过所有的thumb-2指令,而有些16位的thumb指令就不可以,R13位栈指针寄存器,在ARM Cortex内核中共有两个,一个为主栈指针寄存器(MSR),另一个为进程栈指针寄存器(PSR),设置有两个的目的是在于实时操作系统中,一个可供操作系统内核使用或其他异常使用,另一个供我们普通用户程序使用,这样即使我们用户自己设计的程序跑飞也至少不会影响到我们操作系统,R14为连接寄存器(LR),其作用是用来在调用子程序时一级嵌套有时候保存返回地址的,前面讲到早期程序跳转是这么做的,这点在ARM是体现的,也是为了向早期的产品向下兼容,另外一个原因是这样有一级嵌套程序时候可以做到高效,但多级嵌套还是得用到栈指针寄存器,R15为程序计数器,这就不多讲了。再来看下特殊寄存器,先给个图认识先:
程序状态寄存器组这个就很清楚,不过多介绍了。
中断屏蔽寄存器组简单理解就是如何设置中断优先级好来应对各个不同的响应,第一个PRIMASK为总中断,相当于中断使能,M0内核没有FAULTMASK和BASEPRI,M3和M4内核才有。
控制寄存器可用来控制使用MSR还是PSR堆栈指针,也可控制操作模式(用户或特权)