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.

[参考译文] AM5706:当 WDT 计时器耗尽时、无法触发看门狗计时器处理程序功能

Guru**** 2652475 points

Other Parts Discussed in Thread: AM5706, SYSBIOS

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1592444/am5706-unable-to-trigger-the-watchdog-timer-handler-function-when-the-wdt-timer-runs-out

部件号: AM5706
主题中讨论的其他器件: SYSBIOS

您好、
我尝试使用 TI AM5706 处理器中的 MPU WDT。 对于 MPU WDT、我已禁用复位并且只启用中断、以便当 WDT 计时器结束时、不会启动处理器复位、而只会生成中断。 并且运行正常。 但当我将处理程序附加到这个 WDT 中断时、不会触发。
此外、根据 TRM、我发现要使用的中断号为 139、但它也映射到 GIC 中的 ID171。 现在我不清楚要使用什么。

此外、我在 TRM 中找到了一个名为 CTRL_CORE_MPU_IRQ_138_139 的寄存器 0x4A002B4C、我应该如何处理它?

以下是我正在做的事情:



Void MPU_Watch Dog_Timer ()

  Hwi_Params hwiParams;
  Error_Block EB;

  UART_printf(“MPU WDT\n“);
  uint32_t TimeOutValue = 1000000;
  uint32_t 预分频器= 0xFFFFFFFF;
  uint32_t Count = 0、temp;
  uint32_t Read_Value;
  Char Uart_Recv_Buffer [1000];

  UART_printf(“按 Enter 键触发 WDT\n“);
  UART_Gets (Uart_Recv_Buffer、32);

  /*将 ISR 映射到 WDT 中断*/
  HW_WR_REG32 (0x4828102、0x800);
  HW_WR_REG32 (0x4A002B4C、(139<<16));

  Read_Value = HW_RD_REG32 (WDT_RESET_STATUS_REGISTER_0);
  UART_printf(“状态寄存器= 0x%x\n“、Read_Value);

  ERROR_INIT (&EB);

  Hwi_Params_初始化 (&hwiParams);
  hwiParams.arg   = 0;
  hwiParams.priority = 1;
  hwiParams.enableInt = true;
  hwiParams.EventID = 1;
  hwiParams.maskSetting = Hwi_Masking option_self;
  hwiParams.type = ti_sysbios_family_ARM_GIC_IRq. Hwi_Type_;


  Hwi_Handle h = Hwi_create (139、wdtISR、&hwiParams、&EB);

  hwi_enableirq();

  if (h == NULL)
  {
    UART_printf(“\n Hwi_create 失败!!\n“);
  }
  暴露
  {
    UART_printf(“\n Hwi_create successfull!!\n“);
  }

  /*设置比例尺值*/
  HW_WR_REG32 (WDT_PRESCALER_REGISTER_0、PRESCAR);

  /*加载初始计数器 */
  HW_WR_REG32 (WDT_LOAD_REGISTER_0、TimeOutValue);

  Read_Value = HW_RD_REG32 (WDT_COUNT_REGISTER_0);
  UART_printf(“初始计数=%d\n“、Read_Value);

  /*清除状态寄存器*/
  HW_WR_REG32 (WDT_RESET_STATUS_REGISTER_0、0x1);

  /*在 WDT 控制中禁用复位并启用中断*/
  HW_WR_REG32 (WDT_CONTROL_REGISTER_0、0x2);

  /*启用 WDT */
  TEMP = HW_RD_REG32 (WDT_CONTROL_REGISTER_0);
  HW_WR_REG32 (WDT_CONTROL_REGISTER_0、(TEMP | 0x1));   //禁用 MPUSS 复位 — 0x103、启用 MPUSS 复位 — 0x10B

  /*轮询 STATUS 寄存器的第 0 位以查看是否发生超时*/
  while(!(HW_RD_REG32 (WDT_RESET_STATUS_REGISTER_0)& 0x1))
  {
    Read_Value = HW_RD_REG32 (WDT_COUNT_REGISTER_0);
    UART_printf(“\n 当前计数=%d“、Read_Value);

  }

  Read_Value = HW_RD_REG32 (WDT_RESET_STATUS_REGISTER_0);
  UART_printf(“状态寄存器= 0x%x\n“、Read_Value);


  while (1)
  {
    if(!(计数% 10000))
    {
      UART_printf(“%d “、Count++);
      fflush(空);
    }
    count++;
  }
}

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

    您好、

    请介绍一下  CSL 计时器示例  PDK 中提供。 看门狗计时器 (WDT) 功能包含在该计时器示例中。  如果这对我们有帮助、请告诉我们。

    该示例可在以下位置找到:

    /packages/ti/csl/example/timer/timer_test.c

    此致、

    Karthik

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

    你好 Karthikean S.

    找到了解决方案,谢谢!!