• Cortex-M3 操作模式与特权等级


    Cortex-M3支持2个模式(Handler模式、线程模式)和2个特权等级(特权级、非特权级)。

    • 当处理器处在线程模式时,既可以使用特权级,也可以使用非特权级。
    • 当处理器处在Handler模式时,总是特权级的。
    • 在复位后,处理器进入“线程模式+特权级”。
    • 在“线程模式+非特权级(用户级)”下,禁止对系统控制空间(SCS)的访问。
    • 在“线程模式+非特权级(用户级)”下,禁止使用MRS/MSR访问除了APSR之外的特殊功能寄存器。

    【操作模式与特权等级状态转换图】

    【线程模式特权级 与 Handler模式特权级 相互切换】

     当CONTROL[0]=0时,线程模式特权级,在异常处理的始末,只发生了处理器模式的切换,如:

    【线程模式非特权级 与 Handler模式特权级 相互切换】

    当CONTROL[0]=1时,线程模式非特权级(用户级),则在异常处理的始末,处理器模式和特权等级都发生变化,如:

    【线程模式非特权级 与 线程模式特权级&Handler模式特权级 切换】

    • 芯片复位后,进入线程模式特权级
    • 线程模式特权级与Handler模式特权级之间通过异常/中断的进出来切换。
    • 在特权级下的代码可以通过置位CONTROL[0]来进入非特权级。
    • Handler模式永远都是特权级的。不管是任何原因产生了任何异常,处理器都将以特权级来运行其服务例程,异常返回后,系统将回到产生异常时所处的级别。
    • Handler模式通过异常/中断进入,退出即返回线程模式。从Handler模式异常返回时,也可以通过置位CONTROL[0](非特权级的线程模式)或清零CONTROL[0](特权级的线程模式)来改变返回线程模式的级别。
    • 线程模式非特权级下的代码不能再试图修改CONTROL[0]来回到线程模式特权级。它必须通过一个异常进入到Handler模式,由那个异常Handler处理来修改,清零CONTROL[0]为线程模式特权级,才能在返回到线程模式后拿到特权级。

    参考摘录:

    《Cortex-M内核系列和STM32-讲座2教程.pdf》

    《ARM Cortex-M3权威指南.pdf》

  • 相关阅读:
    小希的迷宫(hdu1272 并查集)
    How many Fibs?(poj 2413)大数斐波那契
    图练习-BFS-从起点到目标点的最短步数(sdut 2830)邻接边表
    最大流(EK)
    趣写算法系列之--匈牙利算法(真的很好理解)
    Saving Princess claire_(hdu 4308 bfs模板题)
    Knight Moves(hdu1372 bfs模板题)
    The Die Is Cast(poj 1481简单的双dfs)
    Oil Deposits(poj 1526 DFS入门题)
    WTL:下载、安装、初见
  • 原文地址:https://www.cnblogs.com/utank/p/11249228.html
Copyright © 2020-2023  润新知