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:引导加载程序、应用程序和 SafeTI 库

Guru**** 2481465 points


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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/931840/tms570lc4357-bootloader-application-and-safeti-library

器件型号:TMS570LC4357

大家好、

我正在为 TMS570LC43x 实施引导加载程序和应用。 在应用中、我想使用 SafeTI 库。 根据提供的示例、我将在   应用程序开头从 sl_asm_api.asm 调用 sl_Init_R5Registers ()和 sl_Init_StackPointers ()例程。 而在引导加载程序中、我从  HL_sys_core.asm 调用_coreInitRegisters_()和_coreInitStackPointer_()。

我注意到的是、当在 应用程序中留下 SL_Init_R5Registers ()时、连接寄存器(LR)为返回地址保留了错误的值。 因此、在调用 sl_Init_R5Registers ()后执行不会继续、这是错误的。 据我所知、发生这种情况的原因是 sl_Init_R5Registers ()假定控制器处于监控器模式、但并非因为我们已经在引导加载程序中切换到了系统模式(在 _coreInitRegisters_()中)。

  1. 我应该如何处理这个问题? 这些例程是否应仅在复位后调用、是否仅在引导加载程序中调用?
  2. 在读取这些例程的代码后、我不清楚 HL_SYS_CORE.asm 和 sl_ASM_API.asm 的例程_coreInitRegisters_()和_coreInitStackPointer_()与 sl_ASM_API.asm 的例程 SL_Init_R5Registers()和 sl_Init_StackPointers()之间有何差异?

感谢你的帮助、

Simon

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

    您好、Simon、

    通常在器件上电或复位后调用此函数。 如果要从其他位置调用此函数、请在函数开头添加以下指令:

        CPS  ARM_MODE_SVC  

    这将在监控器模式下将返回地址存储到 R14寄存器。

    2、这两个函数都是初始化 MCU 通用寄存器和浮点寄存器。 正如您所知、SL 中的功能切换到 SVC 模式、但第一个功能切换到系统模式。 当您在 应用程序中调用 sl_Init_R5Registers()时,返回地址(R14)是由引导加载程序中的 coreInitRegisters_()定义的值。 因此返回地址不正确。  

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

    您好 QJ、

    感谢你的帮助。 正如您所建议的、在调用例程之前切换到监控器模式可以正常工作。

    [引用用户="QJ Wang "]

        CPS  ARM_MODE_SVC  

    [/报价]

    对于我来说、仍然不是100%清楚拥有两个几乎相同的函数版本(除了切换模式)的原因是什么。 是否需要在 SVC 模式下执行 SafeTI 库中的函数?

    谢谢、

    Simon

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

    您好、Simon、

    SafeTI 库需要在特权模式(所有非用户模式)下执行。

    默认情况下、SafeTI 库使用 SVC 模式。 您可以改用系统模式:

    注释掉第264行: