TIwilliam hill官网
直播中

杨阳

7年用户 220经验值
私信 关注

请问在哪里可以设置外设寄存器的user和privilege模式?设置的过程应该遵循怎样的规则?

本帖最后由 一只耳朵怪 于 2018-5-25 14:09 编辑

对外设寄存器的读操作可以在user和privilege两种模式下进行
而写操作只能在privilege模式下进行
问题:
1. 在哪里可以设置外设寄存器的user和privilege模式?
2. 设置的过程应该遵循怎样的规则?

回帖(5)

李麒铭

2018-5-25 07:26:25
Hi Xuecheng,
    关于你的问题:
    1. user和privilege模式是ARM Cortex-R4F CPU的工作模式,不是外设模式。需要通过汇编语言,设置CPU内部寄存器来更改CPU的工作模式。
    2. 设置方法和过程中的规则请参考下面的帖子:
        http://www.deyisupport.com/question_answer/microcontrollers/hercules/f/70/p/24380/82135.aspx#82135
举报

杨阳

2018-5-25 07:34:11
引用: testd27 发表于 2018-5-25 07:26
Hi Xuecheng,
    关于你的问题:
    1. user和privilege模式是ARM Cortex-R4F CPU的工作模式,不是外设模式。需要通过汇编语言,设置CPU内部寄存器来更改CPU的工作模式。

Hi Renton,
谢谢你给的链接,我有学习相关材料,但是不得要领。
另外我在 TI E2E Community上也搜了相关话题,似乎被讨论两年多了也不见有很具体的说明。
我假设了一个应用例子:
有一些寄存器的特定位需要在程序运行过程中被周期性写入,写入的前提是将CPU转换为privileged mode(这么多种privileged mode,我只想重写寄存器的某些位,需要选哪一种),写入成功之后让cpu重新回到user mode,进而对寄存器内容起到保护作用。
我的问题是:
这种应用假设是否现实合理?
如果合理,这种周期性变换operation mode的做法是不是实现了安全手册中提到的安全机制“privileged mode access”?
不知道你们团队有没有做过类似的应用设计,如果做过,有没有可以供用户参考的成功代码?
或者说在程序运行过程中根本就不会出现频繁更改operation mode的情况发生?
Best regards,
举报

李麒铭

2018-5-25 07:39:17
引用: jjdwe 发表于 2018-5-25 07:34
Hi Renton,
谢谢你给的链接,我有学习相关材料,但是不得要领。
另外我在 TI E2E Community上也搜了相关话题,似乎被讨论两年多了也不见有很具体的说明。

Hi Xuecheng,
    1. 周期性或者不同层面的软件在不同模式下运行的方式,应该就是ARM的设计初衷。
        所以我认为这样的做法是合理的。
        比如,软件分为[硬件驱动层]和[应用层],可以设置应用层为User mode,不允许直接访问硬件寄存器,所有动作要调用[硬件驱动层]实现,而在硬件驱动层,CPU才进入previledged mode。一般是Supervisor mode, irq mode或fiq mode。这里可以操作硬件寄存器。
        这样的话,不论应用层如何复杂或有可能出现跑飞等问题,都不会错误的修改硬件的配置。
    2. TI是可以提供SafeTI软件库的,这套软件经过了第三方的认可,可以用来做安全相关的底层开发。但是不是免费发布的。如果需要的话,您得联系相应的销售人员来获取。
    3. CPU工作模式切换例子可以参考HALCoGen生成的代码中的sys_core.asm文件的操作方法,如下图:
举报

杨阳

2018-5-25 07:49:54
引用: testd27 发表于 2018-5-25 07:39
Hi Xuecheng,
    1. 周期性或者不同层面的软件在不同模式下运行的方式,应该就是ARM的设计初衷。
        所以我认为这样的做法是合理的。

谢谢Renton的回答,给了我很多启发。
我还想追加一个问题,就是privileged mode中的supervisor mode和system mode有什么区别?
举报

更多回帖

发帖
×
20
完善资料,
赚取积分