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.

280049c can通信问题?

CAN我现在用tms280049c调试CAN通信,想实现一个邮箱接收两个地址,目前可以通过CAN_readMessage(base,objid,*msgdata)读取接收到的数据,但接收数据帧ID却无法获取,请问我怎样得到一个邮箱接收的不同ID标识符的值?

  • CAN通信中的每个消息都是有一个ID的,在总线上是广播出去的,接收邮箱都可以收,至于是否要进行处理,就要用到接收屏蔽过滤码了。

    您可以配置屏蔽过滤只检查ID的高25位符合,ID的低3位不管,那么低3位从0~7的消息就都可以发到这个邮箱了。接收到数据后再根据ID低3位判断是那个主机发送的。

    具体您可以看一下www.ti.com.cn/.../zhcu039.pdf 的 20 接受滤波器 以及 接受屏蔽使能位,AME (MSGID.30)

    AME 接受屏蔽使能位。

    AME 只用于接收邮箱。它不能被设置为自动回复 (AAM[n]=1,CANMD[n]=0) 邮箱,否则邮箱运行状态未定义。 该位不能通过消息接收被修改。

    1 使用相应的接受屏蔽。
    0 没有使用接受屏蔽,所有标识符位必须与接收消息相匹配。


    CAN通信的基本原理是一致的

  • 很感谢您能做出回答。还有以下几个疑问
    1、我现在使用的是280049C 我查看芯片手册发现寄存器内没有AAM[n]=1,CANMD[n]=0这两个位
    2、我现在已经配置邮箱的接收滤波,最低位不过滤,现在两条地址数据也能收到,我需要在收到数据之前判断接收ID做不同的操作。请问可以通过哪个寄存器获取接收数据的ID
  • 是的,280049和之前芯片的CAN还是有些不同的。

    您需要先用CAN_transferMessage命令把数据传到IF寄存器,而后在IF寄存器中IF2ARB中读取

    Using IF1ARB or IF2ARB is the right approach to read out the CAN message IDs. However to be able to read it out from those registers you need to setup a read transfer from the message RAM into the IF1ARB or IF2ARB register for the message object which you are using. Please see the the section "26.14.1 Message Interface Register Sets 1 and 2" in the TRM for details.

    www.ti.com.cn/.../sprui33b.pdf
  • 经验证功能已经实现,谢谢支持
  • 很高兴您能解决问题