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.

[参考译文] TMS570LS3137:复位后、查询 STCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCR[3:0]以使 STC 测试继续

Guru**** 2482105 points
Other Parts Discussed in Thread: HALCOGEN

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/700234/tms570ls3137-query-stcscscr-3-0-for-stc-test-continuation-after-reset

器件型号:TMS570LS3137
主题中讨论的其他器件:HALCOGEN

您好、CPU 是如何返回到 STC 执行后剩余的位置的?

在"C:\ti\Hercules \Hercules 安全 MCU 演示\4.0.0\TMS570LS3x_target_sources\HALCoGen\sources\sys_main.c"中

//##############################################################################################################

_coreBackupStackPointer_();

/**-启用 STC 自检*/
stcREG->STCGCR1 = 0xA;

/**-进入 ARM IDLE 状态以开始测试*/
asm (" WFI");
asm (" nop");
asm (" nop");
asm (" nop");
/**- STC 测试完成时,发生 CPU 复位。
*-在检查复位是否由 STC 引起后
*代码将在此处转接以继续重置代码*/
asm ("_CONTINUE_ACT_STC:NOP");
asm (" nop");
asm (" nop");
asm (" nop");
asm (" nop");
//########################################################

我看到您创建了一个全局标签"_CONTINUE_ACT_STC"
CPU 被空闲、以便 由 asm (" WFI")运行 STC;
但是,STC 完成后,它将如何返回到该标签?
STC 完成后、将发生 CPU 复位、在这里我看不到任何 JMP 指令跳转到此 Lebel。
您能解释一下吗  

谢谢  

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

    应该有一个从复位处理程序到这个例程的函数调用。 复位处理程序在 sys_startup.c 文件中定义 CPU 自检(使用自检控制器、STC)完成后、CPU 被复位。 此 CPU 复位由系统异常状态寄存器(SYSESR)中的标志指示。 复位处理程序会检查此情况、以确定 CPU 复位是否由 STC 运行引起。 然后、它跳转到 STC 之后恢复器件进一步配置的函数。

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

    是的,我本来是这样期望的,但是在 sys_startup.c 中,没有调用此 Lebel。 或者我没有看到任何函数。

    我找到的所有"C:\ti\Hercules \Hercules 安全 MCU 演示\4.0.0\TMS570LS3x_target_sources\HALCoGen\source\sys_startup.c"
    ##############################################################
    否则((SYS_EXCE异常 和 CPU_RESET)!=0)

    /*由于 CPU 复位导致的复位。
    CPU 复位可能由 CPU 自检完成、或引起
    通过切换 CPU 复位控制寄存器的"CPU RESET"位。 *

    /*用户代码开始(18)*/
    /*用户代码结束*/

    /*清除所有复位状态标志*/
    SYS_EXception = CPU_RESET;

    /*用户代码开始(19)*/
    /*用户代码结束*/


    ##############################################################################################################
    您能否附加一个良好的文件 sys_startup.c
    谢谢

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    如果您正在使用 LS3137 MCU 开发新项目、我建议从 HALCoGen 开始。 我已验证 HALCoGen 生成的复位处理程序中是否存在正确的函数调用。

    我将在安全演示中验证实施情况并返回给您。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好,当我使用 HALCoGen 创建 sys_startup.c 时,复位处理程序会调用 fterSTC(),并调用 main()。

    但是、自检完成后、它将从 main 开始。
    但我想去、它被调用的位置。
    想法是从函数调用 STC 自检。 在自检后、程序计数器将返回到函数。

    我在 C:\ti\Hercules \Hercules 安全 MCU 演示\4.0.0\TMS570LS3x_target_sources\"中找到了类似的示例
    他们使用汇编语言创建了全局标签"_CONTINUE_After _STC"。
    但是、在自检完成后、我看不到任何对该标签的调用。


    //################################
    /**
    -当 STC 测试完成 CPU 复位时、
    -在检查复位是否由 STC 引起后、
    -代码将在此处转接以继续重置代码
    *
    asm ("_CONTINUE_ACT_STC:NOP");
    //############################

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您当然可以编写自己的函数来执行 STC。 请注意、CPU 确实会在 STC 结束时复位、因此您需要手动操作 STC 完成后它跳转到的地址、就像在示例中完成的那样。 CPU 复位会导致所有上下文信息丢失、因此在 STC 完成后需要再次执行所有 CPU 初始化步骤。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您的问题是否已得到解答? 我将把这个帖子标记为已解决并关闭它。 请随时发表您的任何问题。

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

    您好、不是没有问题。

    我找到 了 Hercules 安全 MCU 演示示例、但在 sys_startup.c 文件中有"void _c_int00 (){}"

    在 STC 自检后、CPU 将复位、程序将进入那里、您可以在代码下方看到。


    void _c_int00 ()

    _coreInitRegisters_();//初始化内核寄存器以避免 CCM 错误*/


    _coreInitStackPointer_();//初始化堆栈指针*/

    .



    因此、我认为 CPU 复位后、不仅是重新加载上下文、而且是从开始。


    您是否 有任何运行 STC 自检的工作项目定期运行于任何微控制器?

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

    调用函数以启用 CPU 自检仅启用 CPU 自检。 CPU 自检执行所选数量的测试间隔、然后引起一个 CPU 复位(而不是系统复位)。 这就是 CPU 自检与正常函数调用的区别。

    然后、复位处理程序确定 CPU 复位的原因是一个自检执行。 每次 CPU 复位后、需要再次进行 CPU 初始化、这正是您观察到的情况。 然后、应用在 CPU 自检后跳转到 MCU 初始化步骤。 请注意、在这种情况下仅执行 CPU 初始化、器件的其余部分仍按先前配置的工作(时钟、外设等)。