2316361_zh-CN

取消
显示结果 
显示  仅  | 搜索替代 
您的意思是: 

2316361_zh-CN

2316361_zh-CN

RTD- 需要支持在 saf9000 上使用 Wdg(看门狗)驱动程序

RTD 驱动程序版本(R23-11 v1.0.0)

我们来自 Quantum rfp 团队,为 SAF9000 芯片工作。我们正在尝试使用 RTD 的 Wdg(看门狗)驱动程序,发现了一些问题,例如 wdg 调用试图挂起所有中断,然后又恢复中断。因此希望得到一些支持,以帮助确定 wdg 的根本原因/正确使用方法,并解决我们面临的问题。请支持一下。

我们尝试使用的当前 RTD 配置(wdg 和平台 xdm 文件)附后:

wdg- 启用直接服务模式。

使用以下调用:

用于初始化:

Wdg_43_Instance0_Init ((wdg_configType *) NULL_PTR); //因为 使用了后期版本变 体
 
我们定期使用切换/喂食看门狗:
Wdg_43_Instance0_SetMode(wdgif_fast_mode);

请告诉我在直接服务模式下,用于初始化和喂养看门狗的调用是否正确?

这些调用是否会干扰其他中断,从而导致其他功能问题?

RTDRe: RTD- Need support for using Wdg(watchdog )driver for saf9000

谢谢 Cuong。

首先,我们开始使用间接服务,但是由于我们已经将 gptChannelConfiguration_0 用于其他计时器目的,因此我们无法在 " Wdg 外部触发计数器 " 的 wdg 配置中使用同样的间接服务。我们还尝试在 wdg tresos 配置中定义 gptChannelConfiguration_1,并尝试将其用于 wdg tresos 配置中的 " Wdg 外部触发信号计数器 ",但由于某些原因(出现了红十字标记)它不允许这样做。就在那时,我们改用了直接模式。

根据您的建议,我将尝试使用 Wdg_43_Instance0_Service 函数。如果问题仍然存在,我将再次尝试使用间接服务,至于配置问题,我将与您联系。

Re: RTD- Need support for using Wdg(watchdog )driver for saf9000

你好@renukasc
我发现你使用 SetMode 喂养看门狗是错误的。
使用直接服务:使用 Wdg_43_Instance0_Service
函数使用间接服务:使用 WDG_43_instance0_setTriggerCondition 函数。
请在 Wdg 模块中查看我们的示例,以了解我们如何使用 wdg_43_instance0_setTriggerCondition
路径: \ plugins\ wdg_ts_t40d34m50i0r0\ examples



此外:Wdg_43_Instance0_Instance0_Instance0_NULL_PTR)-> 与预编译一起使用,而不是后期版本

Re: RTD- Need support for using Wdg(watchdog )driver for saf9000

我可以尝试使用 Wdg_43_Instance0_Service。如前所述,监视程序功能很好。如果不馈电,看门狗 isr 将按预期触发信号。但是问题是当使用监视程序 API 时,我可以看到它会影响我们所有其他功能。看起来它正在影响中断。

请提供一个 WDT 示例应用程序,其中有定时器和其他 ISR(如 UART),使用直接服务模式时,WDT 不会影响这些 ISR。

 

Re: RTD- Need support for using Wdg(watchdog )driver for saf9000

正如之前在我们的应用程序中使用 wachdog 调用时指出的那样,再进行一次更新,看起来计时器 (gpt) 等其他中断没有得到服务,我们再也不会因此触发 isrs 了。
尝试改变中断的优先级,但无济于事。
还尝试在 /RTD/eclipse/plugins/Rte_TS_T40D94M10I0R0/src/SchM_Wdg.c 中注释OsIf_SuspendAllInterrupts()、OsIf_ResumeAllInterrupts() 。这也无济于事。

请提供一个 WDT 示例应用程序,其中有定时器和其他 ISR(如 UART),使用直接服务模式时,WDT 不会影响这些 ISR。

 

Re: RTD- Need support for using Wdg(watchdog )driver for saf9000
以下是调用 WDG 服务时的流程:
Wdg_43_Instance0_Service()
→ Wdg_ChannelService(WDG_IPW_INSTANCE0)
→ Wdg_Ipw_Service(实例)
→ Swt_Ip_Service(实例)
SchM_Enter_Wdg_WDG_EXCLUSIVE_AREA_09(); // 可以调用 OsIf_SuspendAllInterrupts()
→ ...
SchM_Exit_Wdg_WDG_EXCLUSIVE_AREA_09(); // 这可以调用 OsIf_ResumeAllInterrupts()

所以,如果您调用 Wdg_43_Instance0_Service,并且在您的 RTE 中,SchM_Enter_Wdg_WDG_EXCLUSIVE_AREA_09 和 SchM_Exit_Wdg_WDG_EXCLUSIVE_AREA_09 的定义是调用 OsIf_SuspendAllInterrupts/OsIf_ResumeAllInterrupts,那么是可以影响中断的。
不过,调用该函数后,中断应该会恢复正常。
你的意思是即使退出这个函数 Wdg_43_Instance0_Service,仍然无法触发信号中断吗?
您能告诉我在您的项目中是如何实现 OsIf_SuspendAllInterrupts()、OsIf_ResumeAllInterrupts() 的吗
Re: RTD- Need support for using Wdg(watchdog )driver for saf9000

@renukasc
当启用"开发错误检测" 时,Wdg API 会使用 Wdg_ChannelValidateGlobalCall 和 Wdg_ChannelEndValidateGlobalCall。

这些函数使用 SchM_Enter/Exit_Wdg_WDG_EXCLUSIVE_AREA_06 和 SchM_Enter/Exit_Wdg_WDG_EXCLUSIVE_AREA_07。

请在您的 SchM 实现中验证 SuspendAllInterrupts 和 ResumeAllInterrupts 的行为方式。特别是:调用 ResumeAllInterrupts 后,所有中断是否都恢复到正常状态?

Re: RTD- Need support for using Wdg(watchdog )driver for saf9000

在调试过程中,我们最终观察到,如果Wdg_43_Instance0_Init 和 Wdg_43_Instance0_Service 调用 tresos 配置"Development Error Detection" 被设置,正常的定时器中断将停止,并且不会恢复。

当我们禁用 tresos 中的 "开发错误检测 "时,我们发现在使用 wdg 调用时,其他中断都正常。

 
标记 (1)
无评分
版本历史
最后更新:
‎02-26-2026 05:27 AM
更新人: