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.

[参考译文] RTOS/TM4C1292NCPDT:定时器复位

Guru**** 2462880 points


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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/654513/rtos-tm4c1292ncpdt-timer-reset

器件型号:TM4C1292NCPDT
Thread 中讨论的其他器件:SYSBIOS

工具/软件:TI-RTOS

您好!

我正在使用 TIRTOS 2.16.01.14。

我在配置文件中配置了一个定时器模块、如下所示。

要启动我正在使用的计时器、

KEY = Hwi_disable();

Timer_stop (WDT);

Timer_setPeriodMicroSecs (WDT、(TimeOutValue[0]* 1000));

定时器_START (WDT);

Hwi_restore (密钥);

我想清除计时器的计数器。 为此、我必须使用哪个 API? 在 CDOC 文档中找不到用于清除计时器计数器寄存器的 API。 您能告诉我如何重置计时器的计数器吗?

此致

Sandra

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

    如果在 RTOS 中配置看门狗计时器外设这么简单、那就不是很好了。 如果您使用 CCS6-7 REX 遍历文件夹树、搜索 RTOS 示例项目文件夹、可能会有所帮助。 在某些示例项目中、可以在(EK_TM4C1294XL.c)电路板中找到几个预先配置的外设、包括 WDT。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!
    感谢您的回复。

    我想使用通用计时器。
    没有任何 API 可用于计时器复位?

    我尝试了代码、
    HWREG (TIMER3_base + TIMER_O_TAV)=0;

    但这不会重置计数器。 有适合它的解决方案吗?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您知道 GPTM3不是看门狗计时器、根据数据表文本只能通过四种不同的方式进行配置?

    您必须在周期模式下访问 GPTM3特定寄存器才能复位特定计数。 请相信复位计数寄存器名称会随计数方向的上升或下降而变化。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我在计数方向向上的周期模式下使用 GPTM3。

    "复位计数寄存器名称更改"意味着、寄存器 TIMER_O_TAV 可能会更改?

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

    [引用 user="Sandra george78"]是否没有任何可用于计时器重置的 API?

    当"万能的"API -"缺乏如此确切的功能"时、可能表明(API 中的其他方法)可以实现所寻求的目标?

      您是否希望通过"定时器负载"(0 -递增计数时、或最大定时器值-递减计数时)来满足"定时器复位"?

    请注意 、在受此类 RTOS 限制时、公司或我都不使用"供应商受限" RTOS (或其他"辅助工具")-所述方法可能不适用。

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

    e2e.ti.com/.../651080

    建议不要使用 driverlib 调用。

    如果在配置文件中配置了计时器、我可以使用 driverlib 调用吗?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    抱歉-如上所述-客户要求公司/I 避免任何"供应商限制"(RTOS 或程序"辅助")。 (除了精彩的 API -当然...)

    只有您/您的团队知道、"如果(潜在)优势-由(有限) RTOS 承诺"-证明失去了 API、"加速、放松、增强"!

    从未有理由(甚至是简短的)浏览您 的"供应商受限 RTOS " -"如果其中存在"定时器加载"功能-该功能应足以"定时器重置"-当 "按详细说明加载"时、更早...

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

    只需确认...您需要一个计时器、如果它在一段时间 X 后过期、则需要执行某种类型的恢复操作(例如、重置设备)。 换句话说...看门狗。 我可以想到 TI-RTOS 有四种解决方案。

    1.在 TI-RTOS 中使用看门狗驱动程序
    2.创建 TI-RTOS 内核计时器(就像您所做的那样)、只需使用 Timer_stop/Timer_start (不禁用中断)。 Timer_stop 将禁用计时器。 Timer_start 将在初始周期后再次启动计时器。
    3.使用时钟功能(并保存计时器)。 与计时器模块类似、有一个 Clock_stop/Clock_start 来"复位"倒计时。 该周期需要是时钟模块的倍数(默认为1ms)。
    4.使用 driverlib 调用来管理定时器、但插入优先级为0的 Hwi_create 函数的中断。 这会告诉内核不要管理此中断。 ISR 无法调用内核 API (例如 Semaphore_post)、因为它不在内核的运行范围内。

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

    Todd、

    感谢您提供信息。

    我现在正在使用 看门狗驱动程序 。 我打开看门狗、如下所示、

    Watchdog_Params_init (wdtParams);

    wdtParams.callbackFxn =(Watchdog_Callback) WatchdogResetFxn;

    wdtParams.resetMode = Watchdog_reset_off

    wdtHandle = Watchdog_open (Board_WATCHDOG1、wdtParams);

    Watchdog_setReload (wdtHandle、(TimeOutValue[0]* 1000));

     

    在这里、TimeOutValue[0]是我将从寄存器获取的值。 我可以像这样设置重新加载值吗?

    看门狗第一次工作正常。 在尝试重新打开看门狗时、看门狗未打开。  我在重新打开之前尝试使用 API Watchdog_close (wdtHandle)。

    但在 WatchdogTiva.h 文件参考中,我看到 该驱动程序实现不支持 Watchdog_close()。

    我可以使用什么替代解决方案? 您能 建议一个解决方案吗?

     

    此致

    Sandra

     

     

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

    Sandra、

    我修改了 TI-RTOS 中的看门狗示例。 我把看门狗回调改为这个

    #include

    void watchdogCallback (uintptr_t 未使用)

      静态 int tick = 0;

      静态 int tick=0;

      静态 int reloadVal = 90000000;

      静态 int delta  =-10000000;

      reloadVal += delta;

      if (重新载入 Val <= 10000000){

        Delta = 10000000;

      }

      ticktick = tick;

      tick = Clock_getTicks();

      system_printf (" tick delta =%d val =%d\n"、tick - tpremeTick、reloadVal);

      /*清除看门狗中断标志*/

      Watchdog_setReload (watchdogHandle、reloadVal);

      Watchdog_clear (watchdogHandle);

      GPIO_TOGGLE (Board_LED0);

    我还在.cfg 文件中将 SysMin。bufSize 凸出为1024。 尝试运行此程序、然后停止运行并查看 ROV 中的 SysMin。 您可以看到节拍数发生了相应变化。

    您还可以看到 LED 切换的变化。

    您所做的事情应该是好的。 您使用什么价值? 您是否在 回调函数中调用 Watchdog_clear?

    Todd

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

    感谢你的答复。 重新加载值集工作正常。 我在回调函数中使用了 Watchdog_clear()。

    重新打开看门狗时、看门狗不会打开。

    线程中
    e2e.ti.com/.../631194
    我看到只有在硬件复位完成时、看门狗才可以关闭。

    但在我的应用中、无法为关闭看门狗完成硬件复位。 是否有任何其他方法关闭看门狗?

    在我的应用中、我有两种模式。 在模式1中、我将打开看门狗。 在 mode2中、我必须关闭看门狗。 然后、当一个条件发生时、再次进入 Mode1。 然后必须重新打开看门狗。 由于关闭不正确、我无法重新打开看门狗。

    我尝试使用计时器执行此操作。 在 mode1中、我启动了计时器、在 mode1中、我停止了计时器。 但我无法重置计时器的计数器。

    您能否提供建议、哪一个选项会更好?
    另外、请告诉我如何正确关闭看门狗。

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

    您好、Sandra、

    很高兴看到您选择了 RTOS 狗设备,我甚至在树中看不到狗:(

     
    为什么不将狗留在院子里、只给狗喂食、使其不会在任务循环开始时过期。 这是许多应用中的典型狗行为。 只要每次任务/循环开始时重新加载 dog 计时器、它就永远不会过期并导致软件 MCU 复位或分支到另一个函数。

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

    不支持 Watchdog_close、因为看门狗的理念是具有安全网。 您可以在"mode2"条件下将 reload 值设置为更大的值。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    非常感谢您的回复。 这正常工作。

    谢谢、此致

    Sandra

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

    默认情况下、在默认 CPU 时钟频率下、看门狗负载设置为80000000、持续1s 周期。 由于最大可加载值为32位,因此可以设置的最大超时值(2^32/8000000) s 吗? 我能否设置等效于天数周期的看门狗超时值?

    此致
    Sandra
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Todd 同意 BP101、但对于狗狗最佳行为、没有奖励绿、肯定会在头拍几天后让狗狗狗狗狗尾
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Sandra、

    请参阅 TM4C 数据表、了解看门狗在合法值方面的功能。 驱动程序只写入您提供的任何内容。 您将无法获得这么长的时间段。

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

    [报价用户="Sandra george78"]能否设置相当于天数周期的看门狗超时值?

    如此"过度延长期限"(一天!) 远远超出"正常/习惯"看门狗利用率。   ("最大可加载"中的限制-看门狗值-是-有意!)

    看门狗更常用于"捕获 MCU"问题" (通常以毫秒或更短的时间为单位)-并且(仅在那时)生成"有序恢复过程"(通过 MCU 复位)。

    种重要功能已被这种建议的"看门狗误用!   不是很好!

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    客观地说、如果馈送狗的应用程序循环从未停止执行、则可以将狗计时器设置为永不过期。

    狗狗失效时间相当长(8000000个周期)、120MHz SYSCLK 的圈数为66ms。

    似乎狗失效时间可以更长、如果需要甚至一分钟、并且100%同意设定的过期天数。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    [引用 user="BP101"]……如果需要,可以延长超时时间,甚至一分钟,并100%同意设置过期天数的结束。[/引用]

    即使读了三读(两位员工和我)、也能证明 "无法理解您的意思"。   您是否可以要求我们(也可能是其他人)并再次说明?

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

    对于设置 狗失效的天数的结束时间、只要 函数循环永不结束、 将天数作为周期加载的想法是相反的直观。  也不是 您的观点。 海报似乎不知道 看门狗如何通过 RTOS 回调(即 "空")或仅在第二次超时时 POR 来分支程序执行。