This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] TMS570LC4357:MPU 上的 QS:MPU 函数中的臂组件和 C 有何区别?

Guru**** 2470720 points


请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1068821/tms570lc4357-qs-on-mpu-what-difference-between-arm-assembly-and-c-in-mpu-function

部件号:TMS570LC4357

大家好:

   我 是第一次使用臂组件和 MPU 功能。 在我看来,如果我需要配置 MPU 函数,我将在 lc4357数据表中设置 MPU 寄存器,而不是在 ARM 程序集中设置 MPU 寄存器。

   在我们的产品中,我发现 MPU 的任何使用或配置都是通过臂组件实现的,而不是通过 C 实现的    

   我的问题是:

   1.在 MPU 配置过程中,装配体和 C 之间有何区别?

   2.使用装配体是否必要?

   PSMA 正姐妹“DRBAR”和 MPU 寄存器“MPUREGBASE”之间有何区别?

祝你一切顺利

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    你好,李

    MPU 通过 CP15寄存器配置,使用 ARM MCR 和 MRC 指令(如使用以下代码启用 MPU):

    MRC P15,0,R1,C1,c0, 0

    ;阅读 CP15寄存器1

    Orr R1,R1,#0x1

    DSB

    MCR P15,0,R1,C1,c0, 0;启用 MPU

    ISB

    [引用 userid="487390" url="~ë/support/icls/arm-based 微处理器-组/基于 ARM 的微控制器/f/arm-based 微控制器- forum/1068821/tms570lc4357-QS-On-MPU-whit-difference - arm-assembly-和 c-寅-imfunction-]    2.是否需要使用程序集?

    是的,程序集代码用于配置 MPU

    [引用 userid="487390" url="~ë/support/icros/arm-based 微处理器组/基于 ARM 的微控制器/f/arm-based 微控制器-forum/1068821/tmsreglc4357-QS-on-MPU-DAB- ARM 组装和基于 MPU 的三 者之间的区别是什么?]

    我不知道 PSMA,DRBAR 和 MPUREGBASE 寄存器。 你能告诉我这些名字在哪里?

    请参阅 ARM TRM: https://developer.arm.com/documentation/ddi0460/d/Memory-Protection-Unit

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    QJ 您好:

    对于 Q1,我认为可以通过 C 代码而不是臂组件来配置 MPU。对吗?

    第三季度 ,DRBAR 是 PMSA 注册,它们来自《ARMRegistered体系结构参考手册 ARMv7-A 和 ARMv7-R 版》,第1840页,第 B6.1.36节;

    DRBAR数据区域基本地址寄存器。 PMA受保护的内存系统体系结构。

    以下是装配体中的示例:

    要访问 DRBAR,软件读取或写入 CP15寄存器,<opc1>设置为0,<CRN>设置为 C6,<CRM>设置为
    C1和<opc2>设置为0。 例如:
    MRC P15,0,<RT>,C6,C1, 0;将 DRBAR 读入 Rt
    MCR P15,0,<Rt>,C6,C1, 0;将 Rt 写入 DRBAR

    在我们的产品中,有以下代码:

    =================================================================
    //初始帮助程序
    // mpuInitRegion
    =================================================================
       全球    mpuInitRegion
       键入      mpuInitRegion,函数
       func      mpuInitRegion
       拇指功能
    mpuInitRegion: //仅用于 init!
       MOV IP,#0                         //在操作前禁用区域
       MCR   P15,#0,r0,C6,C2, 0    // RGNR,MPU 地区编号寄存器
       MCR   P15,0,IP,C6,C1, #2    // DRSR,数据区域大小和启用寄存器
       MCR   P15,0,R1,C6,C1, #0//   DRBAR,数据区域基本地址寄存器
       MCR   P15,0,R3,C6,C1, #4   // DRACR,数据区域访问控制寄存器
       MCR   P15,0,R2,C6,C1, #2   // DRSR,数据区域大小和启用寄存器
       BX LR    
       endfunc
    =================================================================

    我认为上述代码是 DRBAR 寄存器与"MPUREGBASE-"寄存器相同。