Thread 中讨论的其他器件: MMWAVE-L-SDK
工具与软件:
我们在 AWRL6432中面临问题
在运行期间、CAN 中断偶尔停止点火、直到电源复位!
通过一些调试、我们看到出现了协议错误、但是我们已经禁用了 IE 寄存器中的协议错误!
我们想知道为什么正常通信中会出现协议错误
我们迫切需要调试会话、因为此问题正在影响生产软件
添加图像以供参考、


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.
工具与软件:
我们在 AWRL6432中面临问题
在运行期间、CAN 中断偶尔停止点火、直到电源复位!
通过一些调试、我们看到出现了协议错误、但是我们已经禁用了 IE 寄存器中的协议错误!
我们想知道为什么正常通信中会出现协议错误
我们迫切需要调试会话、因为此问题正在影响生产软件
添加图像以供参考、


嗨、Mostafa、
首先、您使用什么软件-例如 SDK 或 MCAL? 还要确认您使用的软件是最新版本。 对于 MMWAVE-L-SDK、最新版本为 5.5.5.3.0、对于 MCAL、最新版本为3.0.5.0 -可通过 TI mySecure 获取。
简单来说、无论 IE 寄存器设置如何、IR 寄存器中的所有中断都将由其各自的源触发、但只有在 IE 寄存器中启用的中断才会触发 NVIC 调用 ISR。
是否有特殊的原因需要禁用协议错误? 您是否进行过测试、以查看启用 PEA 和/或 PED 时是否出现此问题? 您也可以仅针对协议错误创建一个单独的 ISR、并将其分配给与其他中断不同的中断线路。
/* Assign MCAN instance address */
gMcanBaseAddr = (uint32_t) AddrTranslateP_getLocalAddr(APP_MCAN_BASE_ADDR);
/* APP_MCAN_BASE_ADDR generated by SysConfig CAN driver */
/* Register interrupt */
HwiP_Params_init(&hwiPrms);
hwiPrms.intNum = 38; /* CAN interrupt line 1 */
hwiPrms.callback = &errorMcanIntrISR;
status = HwiP_construct(&gMcanHwiObject, &hwiPrms);
DebugP_assert(status == SystemP_SUCCESS);
/* Enable PEA and PED */
MCAN_enableIntr(gMcanBaseAddr, (MCAN_INTR_SRC_PROTOCOL_ERR_ARB | MCAN_INTR_SRC_PROTOCOL_ERR_DATA), (uint32_t)TRUE);
/* Select Interrupt Line 1 for PEA and PED */
MCAN_selectIntrLine(gMcanBaseAddr, (MCAN_INTR_SRC_PROTOCOL_ERR_ARB | MCAN_INTR_SRC_PROTOCOL_ERR_DATA), MCAN_INTR_LINE_NUM_1);
/* Enable Interrupt Line 1 */
MCAN_enableIntrLine(gMcanBaseAddr, MCAN_INTR_LINE_NUM_1, (uint32_t)TRUE);
static void App_mcanIntrISR(void *arg)
{
uint32_t intrStatus;
intrStatus = MCAN_getIntrStatus(gMcanBaseAddr);
MCAN_clearIntrStatus(gMcanBaseAddr, intrStatus);
/* up to user implementation */
}
此致、
Kristien
嗨、Mostafa、
有 几个可能导致协议错误的原因。 下面列出了关于设计需求或可能的错误原因的一些注释、但我建议查看以下 有关 CAN 物理要求的应用手册:

如果 CAN 中断不再触发、则可能是由于中断被处理后 NVIC 未能复位而导致的。 您可以通过检查地址 0xE000E200 或0xE000E280 ( 分别对应于 NVIC 中断设置挂起寄存器和 NVIC 中断清除挂起寄存器)来检查 NVIC 是否正确复位。
在进入 ISR 之前、这些寄存器的第21位应该被设置为-即 0x00200000掩码-对应于外部中断编号21、即 CAN 中断线0 (第22位将用于 CAN 中断线1)。 在 ISR 结束时、第21位应复位回0。
否则、这将意味着 ISR 未清除 NVIC 中断、尽管这应该会自动处理。 这可以通过添加 HwiP_clearInt 函数来手动完成: HwiP_clearInt (37u)。 注意:37是 CAN 中断线0的绝对数。
此致、
Kristien