Cortex-M3 杂记


cortex-M3 架构

【1】

r0-r12 :通用寄存器组

r13 :堆栈指针寄存器。有两个堆栈指针,(MSP,PSP)。

r14:连接寄存器。LR,当使用BL(branch and link)指令时,自动填充LR的值。

r15:程序计数器。(LSB必须为1,表明在Thumb状态下执行,若为0,则试图转入ARM模式,将产生一个fault异常)。

【2】特殊功能寄存器组

xPSR:状态寄存器,包含三部分。(APSR:application processor state regiser。IPSR:interrupt number。EPSR:执行PSR)

PRIMASK:该寄存器只有一位,为1时关闭所有可屏蔽中断,只剩下NMI,Fault 。为0没有关中断。

FAULTMASK:只有一位,为1时,只有NMI可以响应,所有其他异常,包括fault都屏蔽。默认为0,没有屏蔽。

扫描二维码关注公众号,回复: 174063 查看本文章

BASEPRI:该寄存器最多有9位,定义了屏蔽优先级的阀值,优先级比该阀值低的中断会被屏蔽。优先级号越小优先级越高。

只有在特权级才能访问三个屏蔽寄存器,为了快速开关中断,M3/M4专门设置了一条CPS指令。

CPSID    I    ;PRIMASK=1  ;关中断

SPCIE    I    ; PRIMASK=0  ;开中断

SPSID    F    ;FAULTMASK=1 ;关异常

SPSIE    F    ;FAULTMASK=0  ;开异常

CONTROL:控制寄存器。只能在特权级下才能操作CONTROL[1/0]。

        CONTROL [1]:堆栈指针选择,0=MSP(复位后缺省值);

                        1=PSP;在线程模式下可以使用MSP和PSP,在Handler 模式下只能使用MSP。

        CONTROL [0]:选择工作模式,0=特权级的线程模式。1=用户级的线程模式。

                                    Handler 模式永远都是特权级。

【3】复位后,处理器默认进入线程模式,特权级。在特权级可以访问所有存储器,可以执行所有指令。一旦程序进入用户级,再想会到特权级只能通过异常(软中断,进入特权模式,然后修改CONTROL[0] bit)。


猜你喜欢

转载自blog.csdn.net/register_k/article/details/80046208
今日推荐