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:使用 TMS570LS3137ZWT 芯片制作看门狗

Guru**** 2540720 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/1343058/tms570ls3137-making-a-watchdog-using-tms570ls3137zwt-chip

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

尊敬的所有人。

我正在尝试使用 TMS570LS3137ZWT 芯片制作看门狗。
如果您查看 Halcogen 的"Help topics"、这里有一个在"examples"中实现 dwwd 的示例源。

因此、我根据示例设置 Halcogen、创建了一个任务、并对其进行了测试。

rtiInit();
/*启用 RTI 比较0通知*/
rtiEnableNotification (rtiNOTIFICATION_COMPARE0);
/*启动计数器*/
rtiStartCounter (rtiCOUNTER_BLOCK0);
/*初始化和启动 DWD */
dwwdInit (generate_NMI、4095、 size_100_percent);
dwdCounterEnable();


然而、当安全装置定时器计时终止时、它不在 rtiNotification 内被调用。

我想做的是、
当在一个任务内部运行一个诸如 while (1)的无限循环时、安全装置被捕捉并尝试将硬件复位。

您能告诉我该怎么办?

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

    您好!

    该代码中存在一个小错误、请参阅以下错误:

    (+)[常见问题解答] TMS570LC4357:您可以提供 HALCoGen (HCG)中存在的故障列表吗? -基于 Arm 的微控制器论坛-基于 Arm 的微控制器- TI E2E 支持论坛

    您还可以参阅熔断看门狗常见问题解答:

    (+)[常见问题解答] TMS570LC4357:如何使用数字看门狗-基于 Arm 的微控制器论坛-基于 Arm 的微控制器- TI E2E 支持论坛

    --
    谢谢。此致、
    Jagadish。

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

    尊敬的 Jagadish:

    非常感谢。
    "你说什么?
    下面显示了我测试的代码。

    1.编码为在任务中设置 dwwd 后运行无限循环

    /*启用 IRQ 和 FIQ 中断*/
    _enable_interrupt_();
    /*初始化 RTI */
    rtiInit();
    /*启用 RTI 比较0通知*/
    rtiEnableNotification (rtiNOTIFICATION_COMPARE2);
    /*启动计数器*/
    rtiStartCounter (rtiCOUNTER_Block1);
    /*初始化和启动 DWD */
    dwwdInit (generate_nmi、65535 /* 4095*/、size_100_percent);
    /// dwdInit (25);
    dwdCounterEnable();
    onlyFirst = false;

    while (1);

    2. rtiNoirification 函数

    void rtiNotification (UINT32通知)
    {
    /*在用户代码 begin 和用户代码 end 之间输入用户代码。 */
    /*用户代码开始(9)*/
    dwdReset();
    /*用户代码结束*/

    3. esmGroup2Notification 功能

    空 esmGroup2通知(UINT32通道)
    {
    /*在用户代码 begin 和用户代码 end 之间输入用户代码。 */
    /*用户代码开始(3)*/
    if (CHANNEL =24)
    {
    dwdGenerateSysReset();

    测试后、我发现了以下内容。

    dwdReset 函数继续 DWD 计数。

    如果你不使用 dwdReset 函数、迟早将调用 esmGroup2Notification 函数、并且 dwdGenerateSysReset 函数将被调用。

    但有一件事发生在我身上。
    在我看来
    如果在任务内部使用 while (1)运行无限循环、则不会调用 rtiNotification 函数、因此我认为最终会调用 esmGroup2Notification -> dwdGenerateSysReset、但事实并非如此。
    即使您如上所述任意运行无限循环,仍然继续调用 rtiNotification 函数并执行 dwdReset()。 因此、我所需的 SysReset 功能无法正常工作。
    你为什么不做我认为你在做的事情? 您能解释一下吗?

    此致、
    IBLEE

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

    您好、IBLEE:

    如果您在任务内使用 while (1)运行无限循环,则不会调用 rtiNotification 函数,因此我认为最终将调用 esmGroup2Notification -> dwdGenerateSysReset,但事实并非如此。
    即使您如上所述任意运行无限循环,仍然继续调用 rtiNotification 函数并执行 dwdReset()。 所以我想要的 SysReset 不起作用。

    此处的示例是使用 RTI 中断方法开发的、而此处的看门狗馈送使用 RTI 中断。 这种看门狗方法对于在任务内部循环的 while (1)内复位系统没有帮助。 此示例仅用于演示目的。 如果您需要这样的实施、我的建议将使用以下代码:

    int Main(void)
    {
    	
    	
    	while(1)
    	{
    		Task_1();
    		Task_2();
    		Taks_3();
    		dwdReset();
    	}
    }

    因此、与其使用 RTI 中断馈送看门狗、不如将 dwdReset 功能保留在 while 循环内部、如上所示。 所以、如果任何任务有一个无限循环、那么 dwdReset 函数将不会被调用、并且最终看门狗 NMI 中断将生成。

    --
    谢谢。此致、
    Jagadish。

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

    尊敬的 Jagadish:
    哇、这真的是一个很好的方法。
    我试着做你刚才所说的,但 esmGroup2Notification 函数的调用时间太短了。
    如果我想使看门狗计时器更长(例如3秒)、我应该进行什么更改?
    由于 dwwdInit()函数的第二个参数是 uint16类型,因此最多只能设置为65535。

    此致、
    IBLEE

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

    您好、IBLEE:

    最大预加载值为4095、仅限65535。

    但是、该值将被左移13位。 和到期时间公式如上所示。

    如果您的 RTI 时钟75MHz 且预载值4095、则过期时间将为:0.447秒、如果您的应用中的此过期时间不足、则应减小 RTI 时钟以进一步延长过期时间。

    --
    谢谢。此致、
    Jagadish。

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

    尊敬的 Jagadish:
    非常感谢。
    这是我第一次使用 TI 产品、也是第一次使用 Halcogen、很抱歉我对它不是很了解。
    我再问一个问题。
    在 Halcogen 中将 RTI1CLK 设置为90、但我无法更改该值。
    您能再告诉我一次该怎么办?

    此致、
    IBLEE

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

    您好、IBLEE:

    这是我第一次使用 TI 产品、也是我第一次使用 Halcogen、很抱歉我对它一无所知。

    没有问题,我们将随时为您提供帮助。

    Unknown 说:
    RTI1CLK 在 Halcogen 中设置为90,但我无法更改该值。
    您能再告诉我一次该怎么做吗?

    验证哪个源连接到了"RTI1 Post src"、如果是 VCLK 则意味着时钟由 VCLK1驱动、因此为了减小时钟、我们必须增大"VCLK1分频器"。

    --
    谢谢。此致、
    Jagadish。

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

    尊敬的 Jagadish:

    非常感谢。

    下次请注意。

    谢谢。此致、

    IBLEE