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.

[参考译文] MSPM0G3519-Q1:MCAN TX 跳过消息和传输完成中断不触发

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1585148/mspm0g3519-q1-mcan-tx-skipping-messages-and-transmission-complete-interrupt-not-triggering

器件型号: MSPM0G3519-Q1

尊敬的 TI:

关于跳过的 MCAN TX 消息的讨论:

wrt: link  、即:MCAN TX 跳过消息。

有人提到:

“只有在成功传输前一帧后、才需要发送下一帧。 在传输之间增加延迟会有所帮助。“

我知道添加延迟可以让前一帧完成传输、当我在 TX 操作之间添加延迟时、我的消息会正确传输。 但是、我想避免使用延迟、而是依靠 传输完成 (TC) 用于了解前一帧何时已完全发送的中断。

我已使用以下配置启用 TC 中断:

    DL_MCAN_enableIntr(pCfg->cfg.pRegs, DL_MCAN_INTERRUPT_TC, 1U);

    DL_MCAN_selectIntrLine(pCfg->cfg.pRegs, DL_MCAN_INTERRUPT_TC, DL_MCAN_INTR_LINE_NUM_0);
    DL_MCAN_enableIntrLine(pCfg->cfg.pRegs, DL_MCAN_INTR_LINE_NUM_0, 1U);

    DL_MCAN_clearInterruptStatus(pCfg->cfg.pRegs, DL_MCAN_MSP_INTERRUPT_LINE0);
    DL_MCAN_enableInterrupt(pCfg->cfg.pRegs, DL_MCAN_MSP_INTERRUPT_LINE0);

void MCAN0_INST_IRQHandler(void)
{
            uint32_t temp = DL_MCAN_getIntrStatus(MCAN0_INST);
            dbgPrintf("temp: %x\n", temp);
            if(temp & DL_MCAN_INTERRUPT_TC)
            {
                tempTXCom = 1;
            }
            dbgPrintf("tempTXCom: %x\n", tempTXCom);

            DL_MCAN_clearIntrStatus(MCAN0_INST, DL_MCAN_INTERRUPT_TC, DL_MCAN_INTR_SRC_MCAN_LINE_0);

但我是 未接收到传输完成中断 、尽管如此:

  • 连接了多个 CAN 节点

  • 总线端接正确

问题 1: 为什么在 CAN 传输之间添加延迟有助于防止消息跳过?

问题 2: 要正确触发 MCAN TC 中断、需要进行哪些其他配置?

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

    您好、

    “我不会介意的,我想要的只是要和你在一起。“

    您能否共享您的 CAN syscfg 设置?

    谢谢