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.

[参考译文] MSP430FR6989:看门狗计时器清除计数器

Guru**** 2614265 points
Other Parts Discussed in Thread: MSP430FR6989, ENERGYTRACE, SYSBIOS

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/667119/msp430fr6989-watchdog-timer-clear-the-counter

部件号:MSP430FR6989
主题中讨论的其他部件: ENERGYTRACESysBIOS

您好。

我正在使用看门狗计时器,下面是我的代码  

INT MAIN ()

WDTCTL = WDTPW + WDTHOLD

初始化GPIO  

初始化SPI

初始化ADC

初始化UART

初始化计时器

Watchdog启用WDTCTL = WDT_ADLY_16 -->我使用ACLK来实现功耗  

BIOS_START();/*不返回*/
返回(0);

通过上述代码设置,我能够获得约80-110uAmpere的电流,并按预期输入LMP3 ,但我有一些以下查询  

由于我正在使用任务来执行某些功能,所以我是否需要清除任务 WDTCTL = WDTPW+WDTCNTCL中的看门狗计数器???

或者,必须清除看门狗的声音  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    感谢您提交有关MSP430FR6989监视程序计时器的问题。
    是的,您需要定期"重置"看门狗计数器,以防止看门狗超时并导致CPU重置。
    以下操作应起作用:

    WDCTL = WDTPW | WDTCNCTCL



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

    INT MAIN ()



    WDTCTL = WDTPW + WDTHOLD

    初始化GPIO

    初始化SPI

    初始化ADC

    初始化UART

    初始化计时器

    WDTCTL = WDT_ADLY_16 -->我使用ACLK来实现功耗

    BIOS_START();
    返回(0);
    }

    空任务1()

    同时(1)

    IF (semaphorepend (sem1,timeout)

    WDTCTL = WDTPW|WDTCNTCL;
    处理一些数据();
    }
    }
    }

    任务2()无效

    同时(1)

    IF (semaphorepend (sem2,timeout)

    WDTCTL = WDTPW|WDTCNTCL;
    处理一些数据();
    }
    }
    }

    任务3()无效

    同时(1)

    IF (semaphorepend (sem3,timeout)

    WDTCTL = WDTPW|WDTCNTCL;
    处理一些数据();
    }
    }
    }

    如果我用上述参考代码清除看门狗计数器,那么当energytrace++进入LMP1模式时,这不应该发生,实际上应该是LMP3模式
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    清除看门狗计时器与低功耗模式无关。 使用Energytrace跟踪MCU的功耗只能测量Energytrace电路提供给MCU的电流和电压,因此与低功耗模式无关。

    您似乎正在运行RTOS -您在哪里将LPM3指定为低功耗模式? 如何知道MCU输入LPM1而不是LPM3?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    你(们)好

    我正在RTOS中指定闲置模式应为LMP3

    Clock.timerId = 1;
    Power.idleMode = Power.LPM3;
    BIOS.runtimeCreatesEnabled =假;
    bios.cpufreq.lo = 800万;

    如何知道MCU输入LPM1而不是LPM3?
    -->我正在使用能量追踪技术进行检查
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好,Parth:

    我必须联系我们的RTOS团队,以获得此问题的答案。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好,Parth:

    以下是我们的RTOS团队的回应:

    我认为使用EnergyTrace查看此信息的最简单方法是查看状态信息选项卡,如本应用报告的4.4 -4.6 中所述: www.ti.com/.../slaa603.pdf

    使用我们的内核,通过pokes SR进入LPM模式的电源模块功能是:TI_SysBIOS_family_MSP4S_Power_idleCPU__E()

    您可以进入此函数中的__bis_sr_register()调用,以查看为LPM模式指定的4位组合。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

     您好,

    我已经在我的代码中实现 了,我只是想交叉检查它是Wright还是错误

    NT主菜单()

    WDT_A_HOLD (WDT_A_BASE);

    初始化GPIO

    初始化SPI

    初始化ADC

    初始化UART

    初始化计时器

     WDT_A_initIntervalTimer (WDT_A_BASE,WDT_A_CLOCKSOURCE_ACLK,WDT_A_CLOCKDIVIDER_8192); /250millisec

     WDT_A_START (WDT_A_BASE);

    BIOS_START();

    返回(0);

    }

    空任务1()

    同时(1)

    /*每200ms:它进入循环*/

     WDT_A_resetTimer (WDT_A_BASE);

    IF (semaphorepend (sem1,timeout)  --------------------------- 超时1秒

    处理一些数据();

    }

    }

    }

    任务2()无效

    同时(1)

    {/*Every 1 second:它进入循环*/

     WDT_A_resetTimer (WDT_A_BASE);

    IF (semaphorepend (sem2,timeout) ----------------------- 超时3秒

    处理一些数据();

    }

    }

    }

    任务3()无效

    {//*Every 1 second:它进入循环*/

    同时(1)

    {  

    WDT_A_resetTimer (WDT_A_BASE);

    IF (semaphorepend (sem3,timeout) ----------------------- 超时3秒

    处理一些数据();

    }

    }

    }

    空任务4()

    {//*Every 1 second:它进入循环*/

    同时(1)

    { WDT_A_Resett定时器(WDT_A_base);

    IF (semaphorepend (sem3,BIOS_WAY_Forever)

     WDT_A_resetTimer (WDT_A_BASE);

    处理一些数据();

    }

    }

    }

    请参阅上述代码 ,并提供您的宝贵反馈,说明是否有效  

    如何检查看门狗是否工作正常  

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

    要查看看看门狗是否工作以及超时发生了什么,最简单的方法是,您可以注释掉重置看门狗的代码。 它应该在250毫秒内超时,但我不知道RTOS是否有针对此情况的“陷阱”,或者MSP430是否经过系统重置。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

     您好,

    根据你的评论,我做了以下更改以测试看门狗,我注释了整个代码

    空任务1()

    同时(1)

    /*每200ms:它进入循环*/

    WDT_A_resetTimer (WDT_A_BASE);

    }

    }

    任务2()无效

    同时(1)

    {/*Every 1 second:它进入循环*/

    WDT_A_resetTimer (WDT_A_BASE);

    }

    }

    任务3()无效

    {//*Every 1 second:它进入循环*/

    同时(1)

    {  

    WDT_A_resetTimer (WDT_A_BASE);

    }

    }

    空任务4()

    {//*Every 1 second:它进入循环*/

    同时(1)

    { WDT_A_Resett定时器(WDT_A_base);

    }

    }

    但我仍然不知道看门狗是否运作正常  

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

    好的,您似乎可以正常工作。

    您可以看到活动模式能量百分比的差异。

    这告诉我WDT正在触发,所以当您取消评论该代码行时,应该是好的。

    它还向我展示了RTOS在其各种低功耗状态中使用LPM3,LPM1和LPM0,因此您也应该很好。