器件型号: J784S4XEVM
TI 是否有基于 CSL 的看门狗和 ICU 应用? 我只在 SDK 中找到了 mcusw 应用程序。 还欢迎 CCS 应用示例链接到 CSL 库
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.
器件型号: J784S4XEVM
TI 是否有基于 CSL 的看门狗和 ICU 应用? 我只在 SDK 中找到了 mcusw 应用程序。 还欢迎 CCS 应用示例链接到 CSL 库
尊敬的 Jim Zhang:
TI 为 PDK 中的 J784S4 提供了基于 CSL 的看门狗示例、但 PDK 中没有独立的基于 CSL 的 ICU 示例。
对于看门狗:
J784S4 上的看门狗在 RTI(实时中断)模块内作为数字窗口式看门狗 (DWWD) 实现。
您可以在以下 PDK 路径和 PDK 文档中找到该设计
/packages/ti/csl/example/rti
尊敬的 Jim Zhang:
目前、TI 未为 J784S4 提供基于 CSL 的独立 ICU 示例(CCS 样式裸机工程)。 ICU 驱动程序是 MCUSW (AUTOSAR MCAL) 软件包的一部分、可用示例 (ICU_APP) 是按照 AUTOSAR MCAL 架构实现的。 CSL 中没有单独的裸机 ICU 示例。
请参阅此处的 ICU 用户指南:
https://software-dl.ti.com/jacinto7/esd/processor-sdk-rtos-j784s4/latest/exports/docs/mcusw/mcal_drv/docs/drv_docs/ug_icu_top.html
此致、
Karthik
我遵循了这个应用 CSL_RTI_dwwd_test_app、并配置了 MCU_RTI1 看门狗计时器、当我调试该应用时、DWDCNTR 会持续计时。 是否有方法在调试模式下冻结 DWDCNTR?
DWDCNTR 使用哪个时钟或时基? MCU_RTI1 使用的时钟?
如果我使用 RTI1 作为纯看门狗计时器、我是否需要启用 UC0/FRC0 计数器或 UC1/FRC1 计数器? 我假设我不需要这些计数器、只需仔细检查即可
尊敬的 Jim Zhang:
该看门狗使用 MCU_RTI1 功能时钟、并且不受 CPU 时钟的影响工作。 因此、即使在调试期间 CPU 暂停、它也可以继续运行。
请确认:
您在哪个核心上运行?
您期望进行哪种类型的重置? (仅内核复位或完全 SoC 复位?)
我们没有专用文件上传系统。 但是、您可以共享相关代码(必要时压缩)、因为它将帮助我分析我这边的问题
此致、
Karthik
来自 TRM spruj52d:

RTI_GCTRL.COS 位应保存 DWD 计数器而不是递减、但实际上仅保存 UC 计数器、不保存 DWD 计数器。 您可能会要求开发人员进行验证。 如果我无法按住 DWD 计数器、则无法进行任何故障排除
我在 J784S4 MCU R5(辅助内核)上运行。 Dawdy、Luke 有私人共享框、我会在那里上传我的代码 (OEL_RTOS_RTI_WATCHDOG_CONFIG.s) 并分享给您。 您可以向他发送电子邮件以获取访问权限。 我不想公开我的代码
尊敬的 Jim Zhang:
TRM 中的单个合并表中未提供 MCU RTI 看门狗违例事件与相应 ESM 事件组/位之间的映射。 以下官方文档和 SDK 标头中对此进行了描述。
1.J784S4 技术参考手册 (TRM)
RTI 模块一章介绍了数字窗口式看门狗 (DWWD) 违例生成的错误事件被路由到错误信令模块 (ESM)。
相关章节:
RTI(实时中断)一章 — 数字窗口式看门狗
“错误信令模块 (ESM)“一章 — 事件输入和错误处理
软件诊断库 (SDL) 文档
SDL 文档 还介绍了 RTI 看门狗违例生成 ESM 错误事件以触发中断或系统安全响应的功能流程。
此致、
Karthik
我正在取得进展、 我现在遇到的问题是:发生看门狗违例 (wd_status 从 0x0 更改为 0x3A、ESM 事件寄存器中的任何位均未设置、ESM 事件模块未接收到该事件。
0x40800420 处的 ESM_ERR_GRP0_RAW) 为 0x00C0000。 当 wd_status 为 0 时、设置这些位。 它们不是由其他事件引起的、而不是由看门狗违例引起的。 关于我从一开始就提出的问题:看门狗违规事件如何映射到 ESM 事件寄存器? 哪个文档提供了映射信息?

对我来说、RTI 违例事件和 ESM 模块之间的硬件链路似乎缺失
您好、Jim、
软件诊断库 (SDL) 提供 API、使用一组可监测的特定事件来初始化 ESM。 可以参考以下常见问题解答来初始化您要监测的 ESM 事件- 【常见问题解答】TDA4VL-Q1:ESM 中断配置
以下 RTI ESM 事件-
MCU ESM:
#define SDLR_MCU_ESM0_ESM_PLS_EVENT0_MCU_RTI0_INTR_WWD_0 (104U)
#define SDLR_MCU_ESM0_ESM_PLS_EVENT0_MCU_RTI1_INTR_WWD_0 (105U)
主 ESM:
define SDLR_ESM0_ESM_PLS_EVENT0_RTI32_INTR_WWD_0 (685U)
#define SDLR_ESM0_ESM_PLS_EVENT0_RTI33_INTR_WWD_0 (686U)
define SDLR_ESM0_ESM_PLS_EVENT0_RTI15_INTR_WWD_0 (687U)
define SDLR_ESM0_ESM_PLS_EVENT0_RTI0_INTR_WWD_0 (688U)
define SDLR_ESM0_ESM_PLS_EVENT0_RTI1_INTR_WWD_0 (689U)
#define SDLR_ESM0_ESM_PLS_EVENT0_RTI2_INTR_WWD_0 (690U)
define SDLR_ESM0_ESM_PLS_EVENT0_RTI3_INTR_WWD_0 (691U)
#define SDLR_ESM0_ESM_PLS_EVENT0_RTI4_INTR_WWD_0 (692U)
define SDLR_ESM0_ESM_PLS_EVENT0_RTI5_INTR_WWD_0 (693U)
define SDLR_ESM0_ESM_PLS_EVENT0_RTI6_INTR_WWD_0 (694U)
#define SDLR_ESM0_ESM_PLS_EVENT0_RTI7_INTR_WWD_0 (695U)
define SDLR_ESM0_ESM_PLS_EVENT0_RTI28_INTR_WWD_0 (696U)
define SDLR_ESM0_ESM_PLS_EVENT0_RTI29_INTR_WWD_0 (697U)
#define SDLR_ESM0_ESM_PLS_EVENT0_RTI30_INTR_WWD_0 (698U)
define SDLR_ESM0_ESM_PLS_EVENT0_RTI31_INTR_WWD_0 (699U)
#define SDLR_ESM0_ESM_PLS_EVENT0_RTI16_INTR_WWD_0 (700U)
define SDLR_ESM0_ESM_PLS_EVENT0_RTI17_INTR_WWD_0 (701U)
#define SDLR_ESM0_ESM_PLS_EVENT0_RTI18_INTR_WWD_0 (702U)
define SDLR_ESM0_ESM_PLS_EVENT0_RTI19_INTR_WWD_0 (703U)
您可以在 — SDL/TEST/RTI 中参考实现
此致、
Josiitaa
SDLR_MCU_ESM0_ESM_PLS_EV0_MCU_RTI1_INTR_WWD_0 (105U) 表示组 3、位 9、但在我的测试中、wd_status=0x3A、 ESM_ERR_Grp3_raw (0x40800460)/ESM_ERR_Grp3_STS (0x40800464) 不应设置这些位、但不应设置这些位。 我的实施基于 SDL/TEST/RTI
我将 最新的代码上传至 包装盒、将 HD_WR_REG32 包装到我们自己的宏中、但宏名称告诉哪个寄存器可以访问。 应该很容易理解我为哪个寄存器配置了详细注释
尊敬的 Jim Zhang:
RTI 不会复位 SOC、它只是提供中断以及如何处理该中断、由代码决定。 当 RTI 计数器到期时、将触发一个 ESM 事件。 因此、一个选择是可以通过对来自 RTI 的此错误事件使用 ESM 错误引脚来生成 SOC 复位。 外部监控器可以根据 ERROR 引脚进行复位。
请将 RTI_RTIDWWDRXNCTRL 设置为 RTI_RTIDWWDRXNCTRL_DWWDRXN_INTERRUPT、并检查是否收到 ESM 中断。
此致、
Josiitaa
另一个问题:
watchdog0 在器件树的主域中定义、如下所示:
watchdog0:看门狗@2200000{
兼容=“ti、j7-RTI-WDT“;
REG =<0x00 0x2200000 0x00 0x100>;
Clocks =<&K3_CLKS 348 0>;
电源域=<&K3_PDS 348 TI_SCI_PD_EXCLUSTED>;
Assigned-clocks =<&K3_CLKS 348 0>;
assigned-clock-parament=<&k3_CLKS 3484>;
};
我的问题是:哪个核心拥有 watchdog0 的所有权?
哪个内核将为该看门狗配置时钟? Linux 内核(比如 A72)?
哪个内核将为 RTI 寄存器配置周期和超时操作?
哪个内核应该选通它?
TI 关于设置、配置和选通的内核分配的建议是什么?
谢谢
尊敬的 Jim Zhang:
[引述 userid=“346969“ url=“~/support/processors-group/processors/f/processors-forum/1616371/j784s4xevm-csl-based-watchdog-and-icu-application/6289137
我不需要中断、RTI 会向 ESM 错误引脚生成复位事件。 TRM 中提到的 RTI 可以生成复位事件。 重置事件是否映射到 ESM?
[/报价]是的、您必须将其设置为生成 NMI、这将在计数器到期时触发 ESM 事件。 然后、SW 事件处理程序可以根据 ESM 事件触发一个复位。
我的问题仍然没有得到解答:RTI 事件、无论它是中断还是重置事件、ESM 组事件中的哪个位是映射到的事件?
我已经分享了每个 RTI 的 ESM 事件以及将它们映射到 ESM 组事件的过程-
[报价 userid=“543431“ url=“~/support/processors-group/processors/f/processors-forum/1616371/j784s4xevm-csl-based-watchdog-and-icu-application/6270552软件诊断库 (SDL) 提供 API、使用一组可监测的特定事件来初始化 ESM。 可以参考以下常见问题解答来初始化您要监测的 ESM 事件- 【常见问题解答】TDA4VL-Q1:ESM 中断配置
以下 RTI ESM 事件-
MCU ESM:
#define SDLR_MCU_ESM0_ESM_PLS_EVENT0_MCU_RTI0_INTR_WWD_0 (104U)
#define SDLR_MCU_ESM0_ESM_PLS_EVENT0_MCU_RTI1_INTR_WWD_0 (105U)
主 ESM:
define SDLR_ESM0_ESM_PLS_EVENT0_RTI32_INTR_WWD_0 (685U)
#define SDLR_ESM0_ESM_PLS_EVENT0_RTI33_INTR_WWD_0 (686U)
define SDLR_ESM0_ESM_PLS_EVENT0_RTI15_INTR_WWD_0 (687U)
define SDLR_ESM0_ESM_PLS_EVENT0_RTI0_INTR_WWD_0 (688U)
define SDLR_ESM0_ESM_PLS_EVENT0_RTI1_INTR_WWD_0 (689U)
#define SDLR_ESM0_ESM_PLS_EVENT0_RTI2_INTR_WWD_0 (690U)
define SDLR_ESM0_ESM_PLS_EVENT0_RTI3_INTR_WWD_0 (691U)
#define SDLR_ESM0_ESM_PLS_EVENT0_RTI4_INTR_WWD_0 (692U)
define SDLR_ESM0_ESM_PLS_EVENT0_RTI5_INTR_WWD_0 (693U)
define SDLR_ESM0_ESM_PLS_EVENT0_RTI6_INTR_WWD_0 (694U)
#define SDLR_ESM0_ESM_PLS_EVENT0_RTI7_INTR_WWD_0 (695U)
define SDLR_ESM0_ESM_PLS_EVENT0_RTI28_INTR_WWD_0 (696U)
define SDLR_ESM0_ESM_PLS_EVENT0_RTI29_INTR_WWD_0 (697U)
#define SDLR_ESM0_ESM_PLS_EVENT0_RTI30_INTR_WWD_0 (698U)
define SDLR_ESM0_ESM_PLS_EVENT0_RTI31_INTR_WWD_0 (699U)
#define SDLR_ESM0_ESM_PLS_EVENT0_RTI16_INTR_WWD_0 (700U)
define SDLR_ESM0_ESM_PLS_EVENT0_RTI17_INTR_WWD_0 (701U)
#define SDLR_ESM0_ESM_PLS_EVENT0_RTI18_INTR_WWD_0 (702U)
define SDLR_ESM0_ESM_PLS_EVENT0_RTI19_INTR_WWD_0 (703U)
watchdog0 在器件树的主域中定义、如下所示:
watchdog0:看门狗@2200000{
兼容=“ti、j7-RTI-WDT“;
REG =<0x00 0x2200000 0x00 0x100>;
Clocks =<&K3_CLKS 348 0>;
电源域=<&K3_PDS 348 TI_SCI_PD_EXCLUSTED>;
Assigned-clocks =<&K3_CLKS 348 0>;
assigned-clock-parament=<&k3_CLKS 3484>;
};
我的问题是:哪个核心拥有 watchdog0 的所有权?
哪个内核将为该看门狗配置时钟? Linux 内核(比如 A72)?
哪个内核将为 RTI 寄存器配置周期和超时操作?
哪个内核应该选通它?
TI 关于设置、配置和选通的内核分配的建议是什么?
[/报价]我已经邀请了我们的 Linux 专家来帮助解决这个问题。
此致、
Josiitaa
您好:
[报价 userid=“543431“ url=“~/support/processors-group/processors/f/processors-forum/1616371/j784s4xevm-csl-based-watchdog-and-icu-application/6290429哪个核心拥有 watchdog0 的所有权?
哪个内核将为该看门狗配置时钟? Linux 内核(比如 A72)?
哪个内核将为 RTI 寄存器配置周期和超时操作?
哪个内核应该选通它?
TI 关于设置、配置和选通的内核分配的建议是什么?
[/报价]在 Linux 方面:
SOC ESM、PMIC ESM 在引导时由 R5 SPL 配置一次。 这可确保在出现看门狗事件时正确路由 ESM 信号、并且 PMIC 准备就绪。
Linux RTI 驱动程序启用时钟并启用 RTI 看门狗。
- Keerthy
如果是这种情况、我们将考虑以下使用场景:
1: Linux RTI 驱动器配置/启用 RTI 时钟
2: Linux RTI 驱动器 配置 WWDT 看门狗超时周期、选通窗口和超时操作
3: Linux RTI 驱动程序 启用 WWDT 看门狗
4:main0 R5 应用程序将选通看门狗、Linux 应用程序不选通看门狗
5:如果 main0 R5 应用程序未在右周期和右窗口选通 WWDT、将触发看门狗超时操作
这种情况是否可以接受?
Josiitaa:
我有一些问题:
问题 1: RTI0 有 3 个事件、EVENT0/EVEN1/EVENT2 定义了哪些事件 ?
define SDLR_ESM0_ESM_PLS_EVENT0_RTI0_INTR_WWD_0 (688U)
define SDLR_ESM0_ESM_PLS_EVEN1_RTI0_INTR_WWD_0 (688U)
define SDLR_ESM0_ESM_PLS_EVENT2_RTI0_INTR_WWD_0 (688U)
问题 2:数字窗口式看门狗的反应。 如果在配置定义的时间窗口之外维护看门狗、或者根本没有维护看门狗、窗口化看门狗将导致复位。 此系列 J784S4 是否支持看门狗复位?
问题 3:如果我不想在发生看门狗违规中断时执行任何操作、只需将事件传递到 ESM 即可进行本地复位、没有任何操作的虚拟 ISR 应该可以工作、对吧?
问题 4: 我无法直接从域 main0 R5 core0 访问 RTI 看门狗寄存器。 当我尝试选通看门狗时发生异常。 您是否有从 main0 R5 访问 RTI 寄存器的示例?
问题 5: 我有 soc ESM 配置的示例、但没有任何配置 PMIC ESM 的示例。 SDK 中的哪个示例配置 PMIC ESM?
您好、Jim、
问题 1: RTI0 有 3 个事件、EVENT0/EVEN1/EVENT2 定义了哪些事件 ?
define SDLR_ESM0_ESM_PLS_EVENT0_RTI0_INTR_WWD_0 (688U)
define SDLR_ESM0_ESM_PLS_EVEN1_RTI0_INTR_WWD_0 (688U)
define SDLR_ESM0_ESM_PLS_EVENT2_RTI0_INTR_WWD_0 (688U)
它们是 ESM 事件的 3 个来源。 尽管如此列出、但从 SW 角度没有区别、只有一个 ESM 事件编号(例如 688)、并且全部 3 个都是相同的源中断。 因此您无需担心多个事件。
问题 2:数字窗口式看门狗的反应。 如果在配置定义的时间窗口之外维护看门狗、或者根本没有维护看门狗、窗口化看门狗将导致复位。 此系列 J784S4 是否支持看门狗复位?
窗口化看门狗计时器 (WWDT) 会在一个可编程周期后生成复位(如果在该周期内未提供服务)。 此超时边界是可配置的、并且窗口功能允许启动时间边界可配置。 如果未在由开始时间和超时边界定义的窗口(开放窗口)内处理、WWDT 可以生成中断。 此外、如果在开放窗口期(封闭窗口内)外提供服务、WWDT 也会生成中断。 中断的生成取决于 WWDT 反应配置。 TI J784s4 SDK 支持看门狗计时器的配置。 它还支持通过 ESM 中断通知错误。 此外、还提供用于检查看门狗计时器状态的 API。
问题 3:如果我不想在看门狗违规中断发生时执行任何操作、只需将事件传递给 ESM 即可进行本地复位、没有任何操作的虚拟 ISR 应该起作用、对吧?
是的、可以根据 SW 用例修改 ESM 事件上的操作。
问题 4: 我无法直接从域 main0 R5 core0 访问 RTI 看门狗寄存器。 当我尝试选通看门狗时发生异常。 您是否有从 main0 R5 访问 RTI 寄存器的示例?
您可以 在 SDL\SDL\TEST\RTI\UNIT\中引用 SDL RTI 测试应用程序。 此测试对所有 RTI 实例进行配置。 您可以采用相同的方法。 SDL\SDL\examples\RTI 中的 SDL RTI 示例 包含使用 ESM 事件执行错误注入和验证的步骤。
此致、
Josiitaa
我似乎需要以不同的方式提出相同的问题:
问题 1: EVENT0、EVENT1、EVENT2 的 3 个来源是什么? 我知道他们有相同的 ID
问题 2:操作 5h 是否受 J784S4 支持? 这是从 J721E TRM 复制而来

问题 3: 看门狗计时器超时后需要本地复位、我是否应该使用软件从 ISR 触发复位? 或者 ESM 会根据硬件中的事件触发重置、我不需要从软件启动重置?
问题 4:SDL RTI 应用程序适用于 MCU_RTI。 我能够在 MCU 域上执行、但不能在 main0 域上执行。 如何从 main0 域访问 RTI 寄存器?
您好、Jim、
问题 1: EVENT0、EVENT1、EVENT2 的 3 个来源是什么? 我知道他们有相同的 ID
如前所述、源也相同。

复制而来问题 2:J784S4 是否支持操作 5h? 这是从 J721E TRM
J784s4 不支持此功能。 我们有一个看门狗 IP 限制、即不复位内核、如果看门狗未得到处理、则会触发 ESM 中断。 此 ESM 中断应向 PMIC 发送信号进行复位。
问题 3: 看门狗计时器超时后需要本地复位、我是否应该使用软件从 ISR 触发复位? 或者 ESM 将根据该事件从硬件触发重置、并且我不需要从软件启动重置?
您可以执行以下任一操作。 ESM 可以配置为在发生特定事件时触发复位、也可以通过 SW 事件处理程序触发复位。
Question4:SDL RTI 应用适用于 MCU_RTI。 我能够在 MCU 域上执行、但不能在 main0 域上执行。 如何从 main0 域访问 RTI 寄存器?
在这种情况下是否启用了 RTI 实例? 您是否在浏览时看到防火墙例外以及例外?
此致、
Josiitaa
我正在检查 SDK 中的中断向量:
CSL/INTR/j784s4/INTR$ soc grep -r --include=“cslr_intr_*.h““INTR_RTI“ src。
只有 RTI28/29 可用于域 0
.cslr_intr_r5fss1_core0.h:#define CSLR_R5FSS1_CORE0_INTR_RTI30_INTR_WWD_0 (2U)
.cslr_intr_r5fss1_core0.h:#define CSLR_R5FSS1_CORE0_INTR_RTI31_INTR_WWD_0 (3U)
.cslr_intr_r5fss2_core0.h:#define CSLR_R5FSS2_CORE0_INTR_RTI32_INTR_WWD_0 (2U)
.cslr_intr_r5fss2_core0.h:#define CSLR_R5FSS2_CORE0_INTR_RTI33_INTR_WWD_0 (3U)
.cslr_intr_r5fss2_core1.h:#define CSLR_R5FSS2_core1_INTR_RTI32_INTR_WWD_0 (2U)
.cslr_intr_r5fss2_core1.h:#define CSLR_R5FSS2_core1_INTR_RTI33_INTR_WWD_0 (3U)
.cslr_intr_r5fss0_core0.h:#define CSLR_R5FSS0_CORE0_INTR_RTI28_INTR_WWD_0 (2U)
.cslr_intr_r5fss0_core0.h:#define CSLR_R5FSS0_CORE0_INTR_RTI29_INTR_WWD_0 (3U)
.cslr_intr_r5fss1_core1.h:#define CSLR_R5FSS1_Core1_INTR_RTI30_INTR_WWD_0 (2U)
.cslr_intr_r5fss1_core1.h:#define CSLR_R5FSS1_Core1_INTR_RTI31_INTR_WWD_0 (3u)
.cslr_intr_r5fss0_core1.h:#define CSLR_R5FSS0_CORE1_INTR_RTI28_INTR_WWD_0 (2U)
.cslr_intr_r5fss0_core1.h:#define CSLR_R5FSS0_CORE1_INTR_RTI29_INTR_WWD_0 (3U)
./cslr_intr_esm0.h:#define CSLR_ESM0_ESM_PLS_EVENT0_RTI28_INTR_WWD_0 (696U)
./cslr_intr_esm0.h:#define CSLR_ESM0_ESM_PLS_EVEN1_RTI28_INTR_WWD_0 (696U)
./cslr_intr_esm0.h:#define CSLR_ESM0_ESM_PLS_EVENT2_RTI28_INTR_WWD_0 (696U)
CSL/j784s4/rtic$ soc grep -r --include=“cslr_intr_*.h“ src “。
RTI0 和 RTI1 仅可由 MCU 访问
./cslr_intr_comput_cluster0_clec.h:#define CSLR_COMPUTE_CLUSTER0_CLEC_SOC_EVENTS_IN_RTI0_INTR_WWD_0 (240U)
./cslr_intr_esm0.h:#define CSLR_ESM0_ESM_PLS_EVENT0_RTI0_INTR_WWD_0 (688U)
../cslr_intr_esm0.h:#define CSLR_ESM0_ESM_PLS_EVEN1_RTI0_INTR_WWD_0 (688U)
./cslr_intr_esm0.h:#define CSLR_ESM0_ESM_PLS_EVENT2_RTI0_INTR_WWD_0 (688U)
.cslr_intr_mcu_r5fss0_core1.h:#define CSLR_MCU_R5FSS0_CORE1_INTR_MCU_RTI0_INTR_WWD_0 (42u)
./cslr_intr_comput_cluster0_gic500ss.h:#define CSLR_COMPUTE_CLUSTER0_GIC500SS_SPI_RTI0_INTR_WWD_0 (240U)
./cslr_intr_mcu_r5fss0_core0.h:#define CSLR_MCU_R5FSS0_CORE0_INTR_MCU_RTI0_INTR_WWD_0 (42u)
./cslr_intr_mcu_esm0.h:#define CSLR_MCU_ESM0_ESM_PLS_EV0_MCU_RTI0_INTR_WWD_0 (104U)
.cslr_intr_mcu_esm0.h:#define CSLR_MCU_ESM0_ESM_PLS_EVEN1_MCU_RTI0_INTR_WWD_0 (104U)
./cslr_intr_mcu_esm0.h:#define CSLR_MCU_ESM0_ESM_PLS_EVENT2_MCU_RTI0_INTR_WWD_0 (104U)
现在我使用的是用于 main0 R51 的 RTI28、我有以下问题:
看门狗超时操作为 RTI_DWWDRXNCTRL_DWWDRXN_INTERRUPT
有 2 个中断:
RTI 模块的看门狗超时中断
ESM 模块的看门狗超时事件中断
我需要在软件中启用和处理哪个中断? 我的目的是通过 ESM 硬件复位内核;如果我不需要处理中断、我将跳过它;
我应该向 ESM_EN 写入什么以启用复位? ESM_en = 0xF 或 ESM_en=0xFFFFFFFF?
我首先通过写入 0xFFFFFFFF 来启用 ESM_en(实际上我尝试了 0xF、0xFFFFFFFF,相同的结果)、启用复位引脚;我配置了看门狗、在启用之前、我检查 ESM_en 仍为 0xFFFFFFFF。 但在让它运行并等待看门狗超时:2s) 后、没有发生复位。 i stopped、并检查 ESM_en 是否清除为全 0、wd_status=0x32。 我不明白为什么 ESM_en 更改为全 0
我正在 TI EVM 电路板上进行测试、2 个新文件上传至共享框中
尊敬的 Jim Zhang:
[引述 userid=“346969“ url=“~/support/processors-group/processors/f/processors-forum/1616371/j784s4xevm-csl-based-watchdog-and-icu-application/6311990只有 RTI28/29 可用于域 0
.cslr_intr_r5fss1_core0.h:#define CSLR_R5FSS1_CORE0_INTR_RTI30_INTR_WWD_0 (2U)
.cslr_intr_r5fss1_core0.h:#define CSLR_R5FSS1_CORE0_INTR_RTI31_INTR_WWD_0 (3U)
.cslr_intr_r5fss2_core0.h:#define CSLR_R5FSS2_CORE0_INTR_RTI32_INTR_WWD_0 (2U)
.cslr_intr_r5fss2_core0.h:#define CSLR_R5FSS2_CORE0_INTR_RTI33_INTR_WWD_0 (3U)
.cslr_intr_r5fss2_core1.h:#define CSLR_R5FSS2_core1_INTR_RTI32_INTR_WWD_0 (2U)
.cslr_intr_r5fss2_core1.h:#define CSLR_R5FSS2_core1_INTR_RTI33_INTR_WWD_0 (3U)
.cslr_intr_r5fss0_core0.h:#define CSLR_R5FSS0_CORE0_INTR_RTI28_INTR_WWD_0 (2U)
.cslr_intr_r5fss0_core0.h:#define CSLR_R5FSS0_CORE0_INTR_RTI29_INTR_WWD_0 (3U)
.cslr_intr_r5fss1_core1.h:#define CSLR_R5FSS1_Core1_INTR_RTI30_INTR_WWD_0 (2U)
.cslr_intr_r5fss1_core1.h:#define CSLR_R5FSS1_Core1_INTR_RTI31_INTR_WWD_0 (3u)
.cslr_intr_r5fss0_core1.h:#define CSLR_R5FSS0_CORE1_INTR_RTI28_INTR_WWD_0 (2U)
.cslr_intr_r5fss0_core1.h:#define CSLR_R5FSS0_CORE1_INTR_RTI29_INTR_WWD_0 (3U)
./cslr_intr_esm0.h:#define CSLR_ESM0_ESM_PLS_EVENT0_RTI28_INTR_WWD_0 (696U)
./cslr_intr_esm0.h:#define CSLR_ESM0_ESM_PLS_EVEN1_RTI28_INTR_WWD_0 (696U)
./cslr_intr_esm0.h:#define CSLR_ESM0_ESM_PLS_EVENT2_RTI28_INTR_WWD_0 (696U)
CSL/j784s4/rtic$ soc grep -r --include=“cslr_intr_*.h“ src “。
RTI0 和 RTI1 仅可由 MCU 访问
./cslr_intr_comput_cluster0_clec.h:#define CSLR_COMPUTE_CLUSTER0_CLEC_SOC_EVENTS_IN_RTI0_INTR_WWD_0 (240U)
./cslr_intr_esm0.h:#define CSLR_ESM0_ESM_PLS_EVENT0_RTI0_INTR_WWD_0 (688U)
../cslr_intr_esm0.h:#define CSLR_ESM0_ESM_PLS_EVEN1_RTI0_INTR_WWD_0 (688U)
./cslr_intr_esm0.h:#define CSLR_ESM0_ESM_PLS_EVENT2_RTI0_INTR_WWD_0 (688U)
.cslr_intr_mcu_r5fss0_core1.h:#define CSLR_MCU_R5FSS0_CORE1_INTR_MCU_RTI0_INTR_WWD_0 (42u)
./cslr_intr_comput_cluster0_gic500ss.h:#define CSLR_COMPUTE_CLUSTER0_GIC500SS_SPI_RTI0_INTR_WWD_0 (240U)
./cslr_intr_mcu_r5fss0_core0.h:#define CSLR_MCU_R5FSS0_CORE0_INTR_MCU_RTI0_INTR_WWD_0 (42u)
./cslr_intr_mcu_esm0.h:#define CSLR_MCU_ESM0_ESM_PLS_EV0_MCU_RTI0_INTR_WWD_0 (104U)
.cslr_intr_mcu_esm0.h:#define CSLR_MCU_ESM0_ESM_PLS_EVEN1_MCU_RTI0_INTR_WWD_0 (104U)
./cslr_intr_mcu_esm0.h:#define CSLR_MCU_ESM0_ESM_PLS_EVENT2_MCU_RTI0_INTR_WWD_0 (104U)
主 ESM 事件可以路由到 MCU ESM 和 MCU R5F。
[引述 userid=“346969“ url=“~/support/processors-group/processors/f/processors-forum/1616371/j784s4xevm-csl-based-watchdog-and-icu-application/6311990有 2 个中断:
RTI 模块的看门狗超时中断
ESM 模块的看门狗超时事件中断
我需要在软件中启用和处理哪个中断? 我的目的是通过 ESM 硬件复位内核;如果我不需要处理中断、我将跳过它;
[/报价]您可以启用 ESM 中断并从 ESM 中断处理程序执行复位操作。
[引述 userid=“346969“ url=“~/support/processors-group/processors/f/processors-forum/1616371/j784s4xevm-csl-based-watchdog-and-icu-application/6311990我应该向 ESM_EN 写入什么以启用复位? ESM_en = 0xF 或 ESM_en=0xFFFFFFFF?
我首先通过写入 0xFFFFFFFF 来启用 ESM_en(实际上我尝试了 0xF、0xFFFFFFFF,相同的结果)、启用复位引脚;我配置了看门狗、在启用之前、我检查 ESM_en 仍为 0xFFFFFFFF。 但在让它运行并等待看门狗超时:2s) 后、没有发生复位。 i stopped、并检查 ESM_en 是否清除为全 0、wd_status=0x32。 我不明白为什么 ESM_en 更改为全 0
[/报价]您可以参阅这些常见问题解答、详细了解如何启用 ERROR 引脚以通过 PMIC 触发复位。
另一种方法是通过 SW API 从 ESM 事件处理程序触发复位。
此致、
Josiitaa
我需要明确回答以下问题:
我应该向 ESM_EN 提供什么来启用该模块? 0xF 或 0xFFFFFFFF?
我不必启用 RTI 看门狗超时中断、对吧?
如果我只需要硬件复位、我不需要启用 ESM 看门狗超时中断、对吗?
如果我启用错误引脚触发 PMIC 复位、它将仅在该内核上复位、而不是在域或 soc 级复位上复位、对吗?
当我在 EVM 板上进行测试时、ESM_en 复位为全 0、我的应用在初始化后不会触摸此寄存器。 这可能是什么原因?
在 SDK 示例 CSL/example/RTI/dwwdtest_app 中、ESM 似乎会生成系统复位
/*步骤 4:配置重置类型*/
if (esmConfig->ResetType == ESM_RESET_TYPE_SYSTEM)
{
/*启用 ESM 引脚输出以生成系统复位*/
if (esmConfig->enablePinOutput)
{
esmBaseAddr[ESM_PIN_EN_SET / 4]= errorEventBit;
}
暴露
{
esmBaseAddr[ESM_PIN_EN_CLR/4]= errorEventBit;
}
}
else /* ESM_RESET_TYPE_CORE_LOCAL */
{
/*禁用内核本地复位的 ESM 引脚输出*/
esmBaseAddr[ESM_PIN_EN_CLR/4]= errorEventBit;
/*内核本地复位将由软件处理*/
}
如果我希望 ESM 生成一个本地重置、如何配置 ESM 来实现?
在示例中、对于 main0 RTI、它将事件定义为 2、为什么它使用 2?
#define ESM_MAIN_RTI0_DWWD_EVENT (2U) /*主 RTI0 DWWD 超时事件*/
不应该是 696U 吗?
./cslr_intr_esm0.h:#define CSLR_ESM0_ESM_PLS_EVENT0_RTI28_INTR_WWD_0 (696U)
谢谢
很棒! 将等待您的答复!
我对以下功能有更多疑问:
void ESM_J784S4_InitRTIConfig (esmConfig_t *esmConfig、uint32_t rtiInstance)
{
如果(esmConfig !=空)
{
/*根据 RTI 实例确定 ESM 实例*/
if ((rtiInstance == CSL_MCU_RTI0_CFG_BASE)||(rtiInstance == CSL_MCU_RTI1_CFG_BASE))
{
esmConfig->esmInstance = ESM_J784S4_default_mcu_instance;
}
暴露
{
esmConfig->esmInstance = ESM_J784S4_default_main_instance;
}
esmConfig->errorEvent = ESM_GetRTIErrorEvent(rtiInstance);
问题: 我在 main0 R51 上使用 RTI 28、RTI28 看门狗到 main0R51 的超时的 errorEvent 代码是什么?
esmConfig->errorEvent 使用值
esmConfig->enableErrorDetection = ESM_J784S4_default_error_detection;
esmConfig->ERRORSTEL = ESM_J784S4_DEFAULT_LEVEL;
esmConfig->enablePinOutput = ESM_J784S4_DEFAULT_PIN_OUTPUT;
esmConfig->ResetType = ESM_J784S4_DEFAULT_RESET_TYPE;/*默认情况下系统复位*/
esmConfig->targetCore = MCU_R5_CORE0;/*默认为内核 0 */
}
}
int32_t ESM_J784S4_ConfigureRTIRouting (const esmConfig_t *esmConfig)
{
易失性 uint32_t *esmBaseAddr;
uint32_t regValue;
uint32_t errorEventBit;
/*参数验证*/
if (esmConfig == NULL)
{
返回 CSL_EFAIL;
}
esmBaseAddr =(volatile uint32_t *) esmConfig->esmInstance;
errorEventBit =(1U << esmConfig->errorEvent);
/*步骤 1:执行 ESM 软复位以确保清除状态*/
esmBaseAddr[ESM_SFT_RST/4]= 0x0000000FU;
/*等待复位完成(简单延迟)*/
易失性 uint32_t 延迟= 1000;
while (delay--){/* wait */}
/*步骤 2:启用错误事件检测*/
if (esmConfig->enableErrorDetection)
{
esmBaseAddr[ESM_EN1_SET / 4]= errorEventBit;
}
暴露
{
esmBaseAddr[ESM_EN1_CLR/4]= errorEventBit;
}
/*步骤 3:配置错误级别(高/低优先级)*/
if (esmConfig->ERRORLEVEL == ESM_HIGH_LEVEL_EVENT)
{
esmBaseAddr[ESM_LVL1_SET / 4]= errorEventBit;
}
暴露
{
esmBaseAddr[ESM_LVL1_CLR/4]= errorEventBit;
}
/*步骤 4:配置重置类型*/
if (esmConfig->ResetType == ESM_RESET_TYPE_SYSTEM)
{
/*启用 ESM 引脚输出以生成系统复位*/
if (esmConfig->enablePinOutput)
{
esmBaseAddr[ESM_PIN_EN_SET / 4]= errorEventBit;
}
暴露
{
esmBaseAddr[ESM_PIN_EN_CLR/4]= errorEventBit;
}
}
else /* ESM_RESET_TYPE_CORE_LOCAL */
{
/*禁用内核本地复位的 ESM 引脚输出*/
esmBaseAddr[ESM_PIN_EN_CLR/4]= errorEventBit;
/*内核本地复位将由软件处理*/
}
对于步骤 4:我只需要对本地内核 main0 R51 进行硬件复位;甚至可以对 domain0 进行硬件复位。 但我不想重置其他域。 如何配置步骤 4 来实现此目标?
/*通过读回使能寄存器来验证配置*/
regValue = esmBaseAddr[ESM_EN1_SET / 4];
if (((regValue & errorEventBit)!=(esmConfig->enableErrorDetection? errorEventBit:0))
{
返回 CSL_EFAIL;
}
返回 CSL_Sok;
}
如果我必须使用软件 API 来执行本地复位、但不想使用 sciclinet API、是否有办法实现?