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.

[参考译文] TMS570LS0432:了解初始化例程

Guru**** 2482225 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/721933/tms570ls0432-understanding-the-initialization-routine

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

  TMS570LS04x/03x (SPNA163)的初始化序列指向对 任何 ESM 组3错误的检查、实际上、HALcogen 生成的相应源代码为:

/*检查加电期间是否存在 ESM 组3错误。
*这些可能发生在电子保险丝自动加载期间或从闪存 OTP 读取期间
*在加电期间。 器件运行不可靠、不建议这样做
*。
* ESM 组3错误仅将 nERROR 引脚驱动为低电平。 外部电路
*监控 nERROR 引脚的器件必须采取适当的措施来确保这一点
*系统被置于安全状态,由应用程序确定。
*
if ((esmREG->SR1[2])!= 0U)
{
//*用户代码开始(24)*/
//*用户代码结束*/
/*SAFETYMCUSW 5 C MR:NA "for (;;)可通过在上述和下方的用户代码中添加"#if 0"和"#endif"来删除。"*/
/*SAFETYMCUSW 26 S MR:NA "for (;;)可通过在上述和下方的用户代码中添加"#if 0"和"#endif"来删除。"*/
/*SAFETYMCUSW 28 D MR:NA "for (;;)可通过在上述和下方的用户代码中添加"#if 0"和"#endif"来删除。"*/
for (;;)
{
}/*等待*/
/*用户代码开始(25)*/*
用户代码结束*/
} 

然而,在 Halcogen 没有 ESM 组3可供选择。 无论如何,它会检查组2 (!!!) 仅限。 是否有人可以帮助我了解如何检查 ESM 错误组3?

谢谢您的观看。

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

    您好、Marco、
    您应该添加用于检查 ESM 组3的代码。 ESM 组3通道没有中断生成并且 nERROR 引脚有预定义的运行方式并且为高严重性。 只有四个误差源被映射到组3 (查看数据表、所以请参阅映射的通道)。

    此致、
    米罗

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

    您好、Miro、

    感谢您的解释、但问题可能不是很清楚:代码注释和初始化说明的目的是检查是否存在 group3错误、但代码此时所做的实际上只是检查 group2错误。 实际上、在寄存器定义(reg_esm.h 文件)中、您可以发现 SR1[2]实际上是组2的状态寄存器、而不是组3的状态寄存器。 为什么不检查 SR1[3],而是?

    我希望现在能够更清楚地看到这一点,并感谢我的答复。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    尊敬的 Marco:
    此代码仅检查组2! 同样、可以检查组3。 我会将此事转交给我的同事,以便在评论中作出澄清。

    此致、
    米罗
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Miro、
    感谢您的快速回复。
    请告诉我、这是故意的、还是在与您的同事讨论后实际上是错误的。 谢谢您的观看。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    SR1数组被定义为由三个32位寄存器组成的数组、其中包括地址0x18 (ESMSR1)、0x1C (ESMSR2)和0x20 (ESMSR3)。

    这样数组的索引2实际上指的是组3状态标志。

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

    感谢 Sunil 的调查结果。 我暂时忘记了、在 C 语言中还有要计数的项目0。

    有关初始化的其他问题。 在 PLL 设置时、将参数 MASK_SLIP ( PLLCTL1的第30-29位、偏移= 70h)设置为"所有其他值"以绕过 PLL 差异、不是吗? 我之所以提出这一要求、是因为有关该 MCU 的标准初始化的文档(SPNA163)中未指定该值。 请附上以下代码。

    systemREG1->PLLCTL1 =(uint32) 0x00000000U
    |(UINT32) 0x20000000U //<--问题
    |(UINT32)((UINT32) 0x1FU << 24U)
    |(UINT32) 0x00000000U
    |(UINT32)((UINT32)(6U - 1U)<<16U)
    |(UINT32)(0x7700U); 

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    尊敬的 Marco:
    MASK_SLIP = 10忽略 FMPLL 宏标记的 PLL 差异条件。
    向 MASK_SLIP 写入任何其他值会导致 FMPLL 被旁路、以便 OSCIN 用作 FMPLL 宏的输出。
    如果您使用 HALCoGen 生成此文件、您可以取消选中 PLL 选项卡下的"Bypass on PLL Slip"、然后该值将为(UINT32) 0x40000000U。
    此致、
    米罗