我们以 SBL 方式在 PDK 封装中运行 mcan 示例演示、它在 mcu1_0中运行良好。
但是、在我们将演示移动到 VISION_APP 目录并尝试以 SPL 方式运行后、中断在 mcu1_0中意外触发。
当 Tx 完成发送数据时,中断 仍 在 mcu1_0中连续触发,并且 MCAN_IR 的值不能被清除。
以下是问题日志:
e2e.ti.com/.../soc_5F00_2023_2D00_02_2D00_10_5F00_20_2D00_29_2D00_40.log
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.
我们以 SBL 方式在 PDK 封装中运行 mcan 示例演示、它在 mcu1_0中运行良好。
但是、在我们将演示移动到 VISION_APP 目录并尝试以 SPL 方式运行后、中断在 mcu1_0中意外触发。
当 Tx 完成发送数据时,中断 仍 在 mcu1_0中连续触发,并且 MCAN_IR 的值不能被清除。
以下是问题日志:
e2e.ti.com/.../soc_5F00_2023_2D00_02_2D00_10_5F00_20_2D00_29_2D00_40.log
感谢您回答我的问题。
我们以"
TI-PROCESSOR-SDK-RTOS-j721e-EVM-08_04_00_06/PDK_Jacinto_08_04_00_21/packages/ti/CSL/example/mcanEvmLoopback/mCAN_EVM_loopback _app_main_K3"更改为"
TI-processor-sdk-rtos-j721e-evm-08_04_00_06/vision_apps/platform/j721e/rtos/mcu1_0"、并将引导方式从 SBL 更改为 SPL。 我们在视觉应用中启用了 mcu1_0、但未在 mcu1_0上运行 openvx 框架、只需添加模块"mCAN_EVM_loopback_app_main_K3"。
我不知道为什么生成 irqstatus 0xe331001a、只读该位置中的 IRQ 状态会生成 0x80000。 我 已经清除 了中断,但 中断不能被清除。
下面附加了中断处理、
静态空 App_mcanIntr0ISR (uintptr_t arg)
{
uint32_t intrStatus;
CAN_MSG_FIELD_T *信息;
uint32_t intrStatus_test;
MCAN_ProtocolStatus protStatus;
MCAN_getProtocolStatus (gMcanModAddr、&protStatus);
APP_PrintConsolef ("CAN:来自 gMcanModAddr 的 App_mcanIntr0ISR、lastErrCode = 0x%x、dlec = 0x%x \n"、protStatus.lastErrCode、protStatus.dlec);
intrStatus = MCAN_getIntraStatus (gMcanModAddr);
APP_PrintConsolef ("CAN:App_mcanIntr0ISR、来自 gMcanModAddr、intrStatus = 0x%x \n",intrStatus);
MCAN_clearIntStatus (gMcanModAddr_lpbk、intrStatus);
intrStatus_TEST = MCAN_getIntraStatus (gMcanModAddr);
APP_PrintConsolef ("CAN:App_mcanIntr0ISR、来自 gMcanModAddr、inStatus_Test= 0x%x ",intrStatus_TEST);
IF (MCAN_INTR_SRC_TRANS_COMPLETE =
(状态内部和 MCAN_INTR_SRC_TRANS_COMPLETE)
{
gMcanIsrIntr0Flag = 0U;
}
IF (MCAN_INTR_SRC_Dedicated RX_bux_MSG =
(状态内部和 MCAN_INTR_SRC_Dedicated RX_缓冲 器_MSG)
{
gMcanIsrIntr1Flag = 0U;
}
intrStatus = MCAN_getIntraStatus (gMcanModAddr_lpbk);
APP_PrintConsolef ("CAN:App_mcanIntr0ISR、来自 gMcanModAddr_lpbk、inStatus = 0x%x \n",intrStatus);
MCAN_clearIntStatus (gMcanModAddr_lpbk、intrStatus);
intrStatus_test = MCAN_getIntraStatus (gMcanModAddr_lpbk);
APP_ConsolePrintf ("CAN:App_mcanIntr0ISR、来自 gMcanModAddr_lpbk、inStatus_TEST = 0x%x ",intrStatus_TEST);
IF (MCAN_INTR_SRC_TRANS_COMPLETE =
(状态内部和 MCAN_INTR_SRC_TRANS_COMPLETE)
{
gMcanIsrIntr0Flag_lpbk = 0U;
}
IF (MCAN_INTR_SRC_Dedicated RX_bux_MSG =
(状态内部和 MCAN_INTR_SRC_Dedicated RX_缓冲 器_MSG)
{
gMcanIsrIntr1Flag_lpbk = 0U;
}
}
尊敬的 Renf shi:
“yqq :app……”的作用是什么 在日志中表示? 我在上述代码中看不到该部件。 您能否分享更多详细信息?
[引用 userid="533392" URL"~/support/processors-group/processors/f/processors-forum/1195475/tda4vm-mcan-demo-trigger-interrupt-unexpectedly-in-vision_app-environment/4516437 #4516437"]MCAN_getProtocolStatus (gMcanModAddr、&protStatus);
APP_PrintConsolef ("CAN:来自 gMcanModAddr 的 App_mcanIntr0ISR、lastErrCode = 0x%x、dlec = 0x%x \n"、protStatus.lastErrCode、protStatus.dlec);
intrStatus = MCAN_getIntraStatus (gMcanModAddr);
APP_PrintConsolef ("CAN:App_mcanIntr0ISR、来自 gMcanModAddr、intrStatus = 0x%x \n",intrStatus);
MCAN_clearIntStatus (gMcanModAddr_lpbk、intrStatus);
intrStatus_TEST = MCAN_getIntraStatus (gMcanModAddr);
APP_PrintConsolef ("CAN:App_mcanIntr0ISR、来自 gMcanModAddr、inStatus_Test= 0x%x ",intrStatus_TEST);
如果 调用 ISR、则必须执行所有打印操作、但我只看到一个打印操作、然后跳过、这不应该发生。
使用 JTAG 调试器,请保留一个断点并单步执行 App_mcanIntr0ISR,如果您编写,最好使用内存浏览器
进入 MCAN_IR 地址并 检查是否清除。
此致
Tarun Mukesh
我‘m "yqq:app"日志 被 "CAN:app"替代。
现在、我再次捕捉日志、 下面是问题日志和源代码。
e2e.ti.com/.../5_5F00_2023_2D00_02_2D00_21_5F00_20_2D00_12_2D00_20.loge2e.ti.com/.../canManage_5F00_byd.c
我使用了 JTAG 调试器,无法清除 MCAN_IR,该值 很快就会变为其原始状态
您好!
日志中的观察结果:
LEC = 0x2,表示格式错误,有关详细信息,请参阅此常见问题解答
因此在 ISR 中, intrStatus = 0x80000 。 第27位被置位、 MCAN_INTR_SRC_Dedicated RX_buff MSG 是使 gMcanIsrIntr1Flag = 0所需的第19位。 但从未感到满意。
因为 gMcanIsrIntr1Flag 不会变为零
您好!
我知道您所说的,我的问题是"ti-processor-sdk-rtos-j721e-evm-08_04_00_06/vision_apps/platform/j721e/rtos/mcu1_0"中的配置有错误 ,但"ti-processor-sdk-rtos-j721e-evm-08_vision_apps/platform/j721e/mcoos/mcu1/mc01_0004/mcoopdk_pru1/mcy_pru0_pru/mcum_0001/mcoopdk_pru0_pru/mcum_0004 中的配置正常, 并且不能在主循环中持续停止运行,并且不能在另一个中断/mc000_mcum_mc0_mc0_mc0_m
您好!
您能否分享您在视觉应用中作为补丁所做的更改?
[引用 userid="533392" URL"~/support/processors-group/processors/f/processors-forum/1195475/tda4vm-mcan-demo-trigger-interrupt-unexpectedly-in-vision_app-environment/4516437 #4516437"]
TI-PROCESSOR-SDK-RTOS-j721e-EVM-08_04_00_06/PDK_Jacinto_08_04_00_21/packages/ti/CSL/example/mcanEvmLoopback/mCAN_EVM_loopback _app_main_K3"更改为"
TI-processor-sdk-rtos-j721e-evm-08_04_00_06/vision_apps/platform/j721e/rtos/mcu1_0"、并将引导方式从 SBL 更改为 SPL。 我们在视觉应用中启用了 mcu1_0、但未在 mcu1_0上运行 openvx 框架、只需添加模块"mCAN_EVM_loopback_app_main_K3"。
[/报价]
了解 API 从视觉应用中的 main.c 到 mca_evm_loopback _app_main.c 中的 API 的流程
并确认以下几点
1) 1) PDK CAN 示例和 VISION Apps CAN 示例是否在同一环境中运行 ?
选择了接收器测试(选项2) 、如视觉应用的日志中所示。 外部 CAN 仿真器(其他节点)配置与 PDK 相同或不同
和 视觉应用 ?
2) 2)您是否在 其他内核上运行任何其他功能? 即 ,是否还有任何内核配置 CAN 模块?
3) 3)将 PDK CAN 迁移到 Vision Apps 后,整个 SDK 是编译的还是仅编译 Vision Apps? 如果您只能使用视觉应用、请执行整个 SDK 全新构建
请告诉我 。
此致
Tarun Mukesh