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.

[参考译文] PROCESSOR-SDK-AM64X:在 SBL 启动汇编代码中定义不同模式和堆栈的目的

Guru**** 2396215 points


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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1491087/processor-sdk-am64x-purpose-of-defining-different-modes-and-stacks-in-sbl-boot-up-assembly-code

器件型号:PROCESSOR-SDK-AM64X

工具与软件:

您好!   

在 C:\ti\mcu_plus_sdk_am64x_09_01_00_41\source\kernel_nortos\dpl\r5\boot_armv7r_asm.S 中、  

我看到过在汇编代码中、它会初始化7种模式。 IRQ、FIQ、用户、系统中止等  

_SET_TO_FIQ_MODE:
    //*-------------------------------------------------------
    //*设置为 FIQ 模式
    //*
    //*-------------------------------------------------------
      r0女士、CPSR
    bic  r0、r0、#0x1F //清除模式
    ORr r0  、r0、#0x11 //设置 FIQ 模式
    MSR  CPSR_CF、r0

_init_fiq_mode_stack
    //*-------------------------------------------------------
    //*初始化 FIQ 模式堆栈
    //*-------------------------------------------------------
    LDR  sp、c_fiq_stack_end

    //*-------------------------------------------------------
    //*设置为 IRQ 模式
    //*-------------------------------------------------------
      r0女士、CPSR
    bic  r0、r0、#0x1F //清除模式
    ORr r0  、r0、#0x12 //设置 IRQ 模式
    MSR  CPSR_CF、r0

    //*-------------------------------------------------------
    //*初始化 IRQ 模式堆栈
    //*-------------------------------------------------------
    LDR  sp、c_irq_stack_end

    //*-------------------------------------------------------
    //*设置为 SVC 模式
    //*-------------------------------------------------------
      r0女士、CPSR
    bic  r0、r0、#0x1F //清除模式
    ORr r0  、r0、#0x13 //设置 SVC 模式
    MSR  CPSR_CF、r0

    //*-------------------------------------------------------
    //*初始化 SVC 模式堆栈
    //*-------------------------------------------------------
    LDR  sp、c_SVC_STACK_END

    //*-------------------------------------------------------
    //*设置为中止模式
    //*-------------------------------------------------------
      r0女士、CPSR
    bic  r0、r0、#0x1F //清除模式
    ORr r0  、r0、#0x17 //设置中止模式
    MSR  CPSR_CF、r0

    //*-------------------------------------------------------
    //*初始化中止模式堆栈
    //*-------------------------------------------------------
    LDR  sp、c_abort_stack_end

    //*-------------------------------------------------------
    //*设置为中止模式
    //*-------------------------------------------------------
      r0女士、CPSR
    bic  r0、r0、#0x1F //清除模式
    ORr r0  、r0、#0x1B //设置中止模式
    MSR  CPSR_CF、r0

    //*-------------------------------------------------------
    //*初始化未定义的模式堆栈
    //*-------------------------------------------------------
    LDR  sp、c_undefined_stack_end

    //*-------------------------------------------------------
    //*设置为系统模式
    //*-------------------------------------------------------
      r0女士、CPSR
    bic  r0、r0、#0x1F //清除模式
    ORR r0  、r0、#0x1F //设置系统模式
    MSR  CPSR_CF、r0




我的问题、

1. 进入每种模式并初始化所有这些模式的目的是什么,如果我们在 SBL 中不使用该模式,那么这种冗余是什么?  


2.在 SBL 中、实际上我们只需要系统模式。   跳转到应用程序后、应用程序汇编还会设置7种模式 是否正确?

3.我们可以删除其他6种模式,因为,它永远不会被使用,然后跳到  应用程序主。  

谢谢。




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

    尊敬的 Jun Tu:

    这个文件和函数_c_int00也被所有 R5应用程序使用、而不仅仅是 SBL 使用。

    在 SBL 中、实际上、我们只需要系统模式

    这实际上并不正确、这些模式是 R5功能的一部分、内核可以根据特定条件进入任何模式、例如在发生任何中断请求时将进入 IRQ 模式。 为此、需要为每种模式完成堆栈初始化。

    Unknown 说:
    我们可以删除其他6种模式、因为在跳转到  应用程序 main 之前、它从未使用过。  [报价]

    此堆栈初始化应保持原样。

    此致、

    开会。

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

    您好、认识我们:

    感谢您的回答。  

    最后一个问题,关于文档,例如:在哪里可以找到信息?例如:信息关于必须做7用户模式。


    我知道 armv7  https://developer.arm.com/documentation/ddi0406/cd/?lang=en 中引入了该模式

    但是、它从未提到过、也从未给出过清晰的指导方针。  

    7模式是我计数并从  boot_armv7r_asm.s.


    谢谢。

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

    好的、我找到它了、它不在 armv7中、  

    但在 cortex_r5_r1p2_trm 文档中对此进行了很好的说明

    Cortex-R5技术参考手册 r1p2

    谢谢