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:在 Rx 帧的情况下不触发 CAN 中断

Guru**** 2461000 points
Other Parts Discussed in Thread: AWRL6432, MMWAVE-L-SDK

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

https://e2e.ti.com/support/sensors-group/sensors/f/sensors-forum/1487882/awrl6432-can-interrupt-is-not-fired-incase-of-rx-frame

器件型号:AWRL6432
Thread 中讨论的其他器件: MMWAVE-L-SDK

工具与软件:

我们在 AWRL6432中面临问题  
在运行期间、CAN 中断偶尔停止点火、直到电源复位!

通过一些调试、我们看到出现了协议错误、但是我们已经禁用了 IE 寄存器中的协议错误!

我们想知道为什么正常通信中会出现协议错误

我们迫切需要调试会话、因为此问题正在影响生产软件

添加图像以供参考、

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

    尊敬的 Mostafa:
       我已经加入了我们的软件专家。 请允许我们用一天左右的时间作出回应。

    谢谢。此致、
    Sivaprasad

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

    嗨、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

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

    您好、Kristien、

    感谢您的答复和建议、我还有其他问题:

    1-为什么我们有协议错误? (我们没有对总线进行 BUSOFF 或任何缺陷)

    2-即使有协议错误、为什么不再触发 CAN 中断?

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

    嗨、Mostafa、

    有 几个可能导致协议错误的原因。 下面列出了关于设计需求或可能的错误原因的一些注释、但我建议查看以下 有关 CAN 物理要求的应用手册

    • CAN 线两端都应使用120欧姆的电阻器端接在 CAN 低电平和 CAN 高电平线路之间、以防止阻抗不匹配导致反射
    • 总线必须有隔离式公共接地、以防止噪声注入
    • 确保总线长度不超过支持的波特率
      • 高速 ISO 11898标准规范适用于1Mbps 的最大信令速率、总线长度为40m、节点数最多为30个的情况。 它还建议最大未端接残桩长度为0.3m
    • 波特率不正确
      • 这可能是位时序参数不匹配或参考 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