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.

TMS320F28335: 有关eCAN的发送和接收中断问题

Part Number: TMS320F28335

大佬们,我想问一下,做CAN通信,我用0号邮箱做发送邮箱,16号邮箱作为接收邮箱。但我在十六号邮箱中写了个中断。就是使用CAN调试软件,运行程序,可以看到CAN调试软件中0号邮箱发送的数据。但是我在CAN调试软件上给16号邮箱发送数据程序就进入不到中断了。但是16号邮箱里面的数据变化了。而且从CAN调试软件上0号邮箱发送了一帧01,23,45,67,89,ab,cd,ef。这一帧不知道是怎么产生的。但是我如果在主函数将发送的那部分程序注释掉,在那个接收中断打断点,从CAN调试软件上发送数据是可以直接进入到中断里面的。

  • 你好,你这个是什么软件?是TI官方的软件吗?可以提供下链接吗?

    不是很理解你所说的请况。可以分享下你的程序吗?

  • Fullscreen
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    #include "eCAN.h"
    //
    Uint32 MessageSendCount = 0;
    Uint32 MessageReceiveCount = 0;
    Uint32 Rec_l;
    Uint32 Rec_h;
    Uint16 i = 0,j = 0,k = 0;
    Uchar senddata[] = {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07};
    __interrupt void ECAN0INTB_iSR(void);
    void main(void)
    {
    InitSysCtrl();
    DINT;
    IER = 0x0000;
    IFR = 0x0000;
    InitPieCtrl();
    InitPieVectTable();
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

  • 这个软件叫CANTest。我现在就是0号邮箱会正常发送我的数组。但是我给DSP发送CAN数据,进入不到接收中断。但是我如果在主函数把那个0号邮箱发送的那几句注释掉,我给DSP发送CAN数据,就能进入到中断,数值也是正确的,我不知道是为啥。

  • 我查看下相关资料后回复您。

  • 好的,谢谢您

  • 我咨询下资深工程师后回复您。

  • 请查看下该文件中的例程:

    www.ti.com/.../spra876b.pdf

  • 你好,大佬。我发现ECAN在做发送数据的时候,不单单要配置一个发送邮箱。还需要配置一个接收邮箱。我的这个代码是通过一个只有发送功能的代码改的。0号邮箱发送,16号邮箱接收。在编写接收代码的时候,我依旧用的这两个邮箱。是不是应该在配置一组发送和接收邮箱。这样的话应该就不会起冲突。我想问题是不是出在了这里?

  • 我发现ECAN在做发送数据的时候,不单单要配置一个发送邮箱。还需要配置一个接收邮箱

    在正常应用程序中情况并非如此。我认为您正在自检模式下使用 CAN 模块。

    是不是应该在配置一组发送和接收邮箱。

    如果需要接收邮箱来接收发送的数据,则需要手动配置。

    我想问题是不是出在了这里?

    不,没有问题。在自检模式下,如果要产生接收中断,需要将接收邮箱配置为与发送邮箱相同的MSGID。一旦执行此操作,当接收到消息时,将生成中断。

  • 大佬,我发现了个问题,我如果在中断加上if(ECanbRegs.CANRMP.all != 0)这条语句。我的16号邮箱能接收到我用CANTest发送的报文,ID:00C20000发送的。在调试窗口也能看到16号邮箱里面数据变化是正确的。但是为啥设置断点,程序跳不到断点那里?下面是我的调试图。我如果将中断的这条语句if(ECanbRegs.CANRMP.all != 0)删掉,我向00C20000发送报文是可以调到中断的那个断点处的。但是我的0号邮箱ID:00C80000就无法发送报文。不知道原因是什么,希望大佬能给解惑。

  • 好的,已向工程师跟进。