工具与软件:
你(们)好
我将读取和清除 ESM 的状态寄存器。 EG ESM 状态寄存器1 (ESMSR1)
我想在读取后清除通道位、以检查错误是否再次发生。 写入只在特权模式中。 我如何知道 MCU 是否处于特权模式? 我读取的数值表明控制寄存器中有一个位指示 MCU 是处于特权模式还是用户模式。 请让我知道哪个位,即哪个寄存器和哪个位。 如果 MCU 处于用户模式、如何将其设置回特权模式?
期待您的回复。 谢谢你
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.
工具与软件:
你(们)好
我将读取和清除 ESM 的状态寄存器。 EG ESM 状态寄存器1 (ESMSR1)
我想在读取后清除通道位、以检查错误是否再次发生。 写入只在特权模式中。 我如何知道 MCU 是否处于特权模式? 我读取的数值表明控制寄存器中有一个位指示 MCU 是处于特权模式还是用户模式。 请让我知道哪个位,即哪个寄存器和哪个位。 如果 MCU 处于用户模式、如何将其设置回特权模式?
期待您的回复。 谢谢你
尊敬的 LayEng:
CPSR 寄存器中的 MODE 位指示工作模式:
如上所示、除了用户模式、所有其他模式都表示内核处于特权模式。
您还可以参考以下内容以了解更多信息并获取与模式验证和更改相关的代码:
(13) TMS570LS0714:组7擦除问题-基于 Arm 的微控制器论坛-基于 Arm 的微控制器- TI E2E 支持论坛
——
谢谢、此致、
Jagadish。
尊敬的 LayEng:
这不是控制器 TRM、而是 cortex-R5内核 TRM:
以下是核心 TRM:
e2e.ti.com/.../3000.DDI0460C_5F00_cortexr5_5F00_trm.pdf
——
谢谢、此致、
Jagadish。
尊敬的 Jagadish
感谢您的答复。 我可以说权限模式为0x0000001f 和0x00000013吗? 我可以使用这个库函数 _getCPSRValue_()来获得这个值? 我使用此代码来获取特权模式。 请告诉我是否正确。
uint32_t u32PCStat=_getCPSRValue_()和0x0000001f;
if ((u32PCStat=0x00000013)||(u32PCStat==0x0000001f))
{
返回 true;
}
设计
{
返回 false;
}
TRUE =>特权、FALSE =>非特权
谢谢
尊敬的 LayEng:
用户模式以外的模式统称为特权模式:
因此、我建议您按如下方式修改您的代码:
uint32_t u32PCStat=_getCPSRValue_()和0x0000001f;
if ((u32PCStat==0x00000010))
{
返回 false;
}
设计
{
返回 true;
}
TRUE =>特权、FALSE =>非特权/用户模式
——
谢谢、此致、
Jagadish。