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.

[参考译文] CCS/TMS320F28335:DSP28335 CAN#39;t ENTER CAN 中断、在长时间运行后。

Guru**** 2609685 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/677975/ccs-tms320f28335-dsp28335-can-t-enter-can-interrupt-after-running-for-a-long-time

器件型号:TMS320F28335

工具/软件:Code Composer Studio

大家好:

我对 CAN 接收中断有疑问。  在我的程序中 、CAN 邮箱16到31被设置为接收邮箱。 程序运行超过5小时后 、它 无法进入 CAN 中断、RMP 和 RML 接收邮箱全部为1、 CANGIF0.MIV0保持在31。谁知道原因、谢谢。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    请检查 PIE 寄存器值以及内核寄存器 IER 和 INTM 位。 从 CAN 模块到 PIE 再到内核、有多个位需要处于正确的值。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    谢谢、我已经阅读了这些值。 他们没有问题。 我现在遇到的问题是、在程序运行354分钟后、当 CAN 进入接收中断时、在邮箱31接收到数据后、其余邮箱将不会接收数据。 此时、RMP 和 RML 都被置位。 无法运行到 ECANaRegs.CANRMP.ALL = 0xFFFFFF0000、因此无法清除 RMP 和 RML;我的程序主要用于生成 PWM 波、开关频率为15K。

    中断空 CAN0A_intISR (空)

    易失性 uint16 TempPIEIER;
    uint16 i;
    TempPIEIER = PieCtrlRegs.PIEIER9.ALL;//保存 PIEIER 寄存器供以后使用
    IER |= M_INT9;//通过调整 IER 设置全局优先级
    IER &= 0x0104;
    PieCtrlRegs.PIEIER3.ALL &= 0x0001;//通过调整 PIEIER2来设置组优先级以允许 INT2.2中断当前 ISR
    PieCtrlRegs.PIEACK.ALL = 0xFFFF;//启用 PIE 中断
    asm (" NOP");//等待一个周期
    EINT;
    if (ECANaRegs.CANGIF0.bit.MIV0 == 16)

    for (CAN_READ=0;CAN_READ<=15;CAN_READ++)

    mailbox_read (CAN_Read+16);//此 func 读取指定的邮箱数据
    CAN_reci[CAN_read][0]=TestMbox1;
    CAN_reci[CAN_read][1]=TestMbox2;

    gCAN-reci_cAN();
    bzw = 1;
    bzw_CANjiniance =0;
    zdjs++;
    zdjs1++;
    if (zdjs ==1)

    P_CheckSet();
    P_GetSetFromRam();

    if (zdjs >=2)

    zdjs =2;


    ECANaRegs.CANRMP.ALL = 0xFFFFFF0000;
    PieCtrlRegs.PIEACK.bit.ACK9 = 1;
    EINT;
    for (i = 1;i <= 10;i++){}
    Dint;
    PieCtrlRegs.PIEIER9.ALL = TempPIEIER;

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    今天、我将 CAN 波特率提高到了500K、原来是100K。 当程序运行71分钟时、无法进入接收中断。 波特率增加了5倍、CAN 进入接收中断的运行时间减少了五分之一。 您能告诉我原因吗? 谢谢你。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    如果满足接受屏蔽过滤标准(如果未使用过滤、则为精确的 ID 匹配)、则必须在相应的邮箱中接收消息。 在相应的邮箱中不会接收到有效的消息。

     

    图83 (SPRUFB0D 的第121页)清楚地显示了要识别的中断的各种起作用的位。 这些步骤也清楚地说明了顺序。

     

    您需要按照 CAN 用户指南中的说明使用32位 R/W。 请参阅 SPRUEU1第15页中的1.3.2.1。 这条线违反了以下规定:ECANaRegs.CANGIF0.bit.MIV0 == 16

     

    如果您找到了问题的解决方案、请关闭帖子。