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.

[参考译文] TMS470MF06607:CAN 错误通知

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/638812/tms470mf06607-can-error-notification

器件型号:TMS470MF06607
主题中讨论的其他器件:HALCOGEN

您好!

我目前正在开发 CAN 监听器、在该监听器中、使用 CAN 错误通知识别 CAN 上的错误。 我尝试通过不连接 CAN 上的任何部件来测试这一点、并尝试击穿变速器。

这是我第一次看到、只要我尝试发送第一条消息、就会发生中断、并且由于存在错误指示、它将跳转到通知、

现在问题是、第二次尝试发送 CAN 时、没有发生任何情况、也没有通知。 我应该清除一些标志还是其他东西?  

我需要的是、每次尝试在未连接的节点上传输 CAN 时、我都应收到错误通知。 如何实现这一点?

此致、

Shankar

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

    您必须清除 CAN 模块中的挂起中断标志。 您是否了解过 HALCoGen 生成的中断代码?

    /**@fn void can1HighLevelInterrupt (void)
    *@简要 DCAN1高级中断处理程序
    */
    
    //*用户代码开始(40)*/
    //*用户代码结束*/
    
    #pragma INTERRUPT (can1HighLevelInterrupt)
    void can1HighLevelInterrupt (void)
    {
    uint32 value = canREG1->INT;
    
    /*用户代码开始(41)*/
    /*用户代码结束*/
    
    如果(值= 0x8000U)
    {
    canErrorNotification (canREG1、canREG1->ES & 0x1E0U);
    返回;
    }
    
    /**-设置 IF1以清除暂挂中断标志*/
    while ((canREG1->IF1STAT & 0x80U)=0x80U)
    {
    }/*等待*/
    
    CANREG1->IF1CMD = 0x08;
    canREG1->IF1NO =值;
    
    while ((canREG1->IF1STAT & 0x80U)=0x80U)
    {
    }/*等待*/
    
    CANREG1->IF1CMD = 0x87;
    
    canMessageNotification (canREG1、value);
    
    //用户代码开始(42)*/
    //*用户代码结束*/
    }
    
    

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

    感谢 Bob。 我觉得我有点愚蠢!

    #update  

    我想我的结论太快了。 即使在我如下面所示更改代码后、也不会发生中断。 还有事缺失吗?

    void can2HighLevelInterrupt (void)
    {
    uint32 value = canREG2->INT;
    
    /*用户代码开始(47)*/
    /*用户代码结束*/
    
    如果(值= 0x8000U)
    {
    while ((canREG2->IF1STAT & 0x80U)=0x80U)
    {
    }/*等待*/
    
    CANREG2->IF1CMD = 0x08;
    canREG2->IF1NO =值;
    canErrorNotification (canREG2、canREG2->ES & 0x1E0U);
    返回;
    } 

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

    好的、不确定问题是什么、那么让我们来看看您的 HALCoGen 配置、我附上了一个简单的示例、它可以正常工作。 该示例在 CAN1上传输、在 CAN2上接收。

    您是否为 CAN2启用了中断?

    您是否启用了 VIM 通道29?

    下面是我的示例项目:

    /cfs-file/__key/communityserver-discussions-components-files/312/8407.InterruptCanCommunication.zip

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

    Bob、您好!

    感谢您的回答。 是的、中断被启用。 Infcat、我收到的消息中断和通知就像一个魅力。 当我具有正常的 CAN 节点时、没有问题。 问题仅出现在错误通知中。

    此致、

    Shankar

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

    DCAN 是否进入总线关闭状态?  您是否将器件配置为使用自动总线开启功能?

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

    Bob、您好!

    是的、我配置了总线以进行自动恢复。 此外、由于我将 CAN 通道保持打开(打开 Ckt.)、我非常确信它会达到一个 BUUss-off 状态。 在总线关闭状态下尝试发送时、它是否会通知错误?

    此致、

    Shankar