zoukankan      html  css  js  c++  java
  • 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》

  • 相关阅读:
    updatepanel中不能使用fileupload的弥补方法
    AJAXPro用法,关于JS同步和异步调用后台代码的学习
    How do I get data from a data table in javascript?
    记不住ASP.NET页面生命周期的苦恼
    浅谈ASP.NET中render方法
    解决AjaxPro2中core.ashx 407缺少对象的问题
    ServU 6.0出来了
    关于X Server/Client和RDP的畅想
    这个Blog好像没有分页功能嘛
    AOC的显示器太烂了
  • 原文地址:https://www.cnblogs.com/utank/p/11249228.html
Copyright © 2011-2022 走看看