打印

28335 can接收邮箱如何读取发送邮箱ID号

[复制链接]
3001|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
xiaobai032|  楼主 | 2019-3-11 18:45 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本人遇到一个问题:在can网络中实现一个收件箱接收多个发送邮箱发送的信息。通过读取发送邮箱的ID号来识别是哪个邮箱发送的信息。收件箱可以通过过滤实现接收多个发件箱的数据,但我没找到收件箱读取发送邮箱ID的寄存器,不知道该如何实现接收邮箱读取发送邮箱ID号?希望广大网友可以提供方法,最好有例程。本人在ti官网没找到相关方法。谢谢!

相关帖子

沙发
零三翟邢止胃| | 2019-3-12 09:56 | 只看该作者
好的啊! 可以的啊!

使用特权

评论回复
板凳
jujkjmjh| | 2019-3-12 15:41 | 只看该作者
可以仔细查阅一下手册、说明文档之类的资料

使用特权

评论回复
地板
山大电气硕士| | 2019-4-24 16:40 | 只看该作者
MSGID of a rcv MBX is transmitted as the MDL data

使用特权

评论回复
5
山大电气硕士| | 2019-4-24 16:46 | 只看该作者
    // Write to the mailbox RAM field of MBOX0 - 15
    ECanaMboxes.MBOX0.MDL.all = 0x9555AAA0;
    ECanaMboxes.MBOX0.MDH.all = 0x89ABCDEF;

    ECanaMboxes.MBOX1.MDL.all = 0x9555AAA1;
    ECanaMboxes.MBOX1.MDH.all = 0x89ABCDEF;

    ECanaMboxes.MBOX2.MDL.all = 0x9555AAA2;
    ECanaMboxes.MBOX2.MDH.all = 0x89ABCDEF;

    ECanaMboxes.MBOX3.MDL.all = 0x9555AAA3;
    ECanaMboxes.MBOX3.MDH.all = 0x89ABCDEF;

    ECanaMboxes.MBOX4.MDL.all = 0x9555AAA4;
    ECanaMboxes.MBOX4.MDH.all = 0x89ABCDEF;

    ECanaMboxes.MBOX5.MDL.all = 0x9555AAA5;
    ECanaMboxes.MBOX5.MDH.all = 0x89ABCDEF;

    ECanaMboxes.MBOX6.MDL.all = 0x9555AAA6;
    ECanaMboxes.MBOX6.MDH.all = 0x89ABCDEF;

    ECanaMboxes.MBOX7.MDL.all = 0x9555AAA7;
    ECanaMboxes.MBOX7.MDH.all = 0x89ABCDEF;

    ECanaMboxes.MBOX8.MDL.all = 0x9555AAA8;
    ECanaMboxes.MBOX8.MDH.all = 0x89ABCDEF;

    ECanaMboxes.MBOX9.MDL.all = 0x9555AAA9;
    ECanaMboxes.MBOX9.MDH.all = 0x89ABCDEF;

    ECanaMboxes.MBOX10.MDL.all = 0x9555AAAA;
    ECanaMboxes.MBOX10.MDH.all = 0x89ABCDEF;

    ECanaMboxes.MBOX11.MDL.all = 0x9555AAAB;
    ECanaMboxes.MBOX11.MDH.all = 0x89ABCDEF;

    ECanaMboxes.MBOX12.MDL.all = 0x9555AAAC;
    ECanaMboxes.MBOX12.MDH.all = 0x89ABCDEF;

    ECanaMboxes.MBOX13.MDL.all = 0x9555AAAD;
    ECanaMboxes.MBOX13.MDH.all = 0x89ABCDEF;

    ECanaMboxes.MBOX14.MDL.all = 0x9555AAAE;
    ECanaMboxes.MBOX14.MDH.all = 0x89ABCDEF;

    ECanaMboxes.MBOX15.MDL.all = 0x9555AAAF;
    ECanaMboxes.MBOX15.MDH.all = 0x89ABCDEF;
// This function reads out the contents of the indicated
// by the Mailbox number (MBXnbr).
void mailbox_read(int16 MBXnbr)
{
   volatile struct MBOX *Mailbox;
   Mailbox = &ECanaMboxes.MBOX0 + MBXnbr;
   TestMbox1 = Mailbox->MDL.all; // = 0x9555AAAn (n is the MBX number)
   TestMbox2 = Mailbox->MDH.all; // = 0x89ABCDEF (a constant)
   TestMbox3 = Mailbox->MSGID.all;// = 0x9555AAAn (n is the MBX number)
} // MSGID of a rcv MBX is transmitted as the MDL data.
我觉得读MDL的data就能知道是哪个发送邮箱的ID了  希望对你有点帮助

使用特权

评论回复
6
gnaijnaoul| | 2019-4-25 12:52 | 只看该作者
感觉楼主还没搞清楚CAN的基本工作方式。
CAN的每个消息有个ID,在总线上是广播出去的,谁都可以收,至于你处不处理,就要用到接收屏蔽过滤码了。
你可以配置屏蔽过滤只检查ID的高25位符合,ID的低3位不管,那么低3位从0~7的消息就都可以发到这个邮箱了。接收到数据后再根据ID低3位判断是那个主机发送的。

使用特权

评论回复
7
xiaobai032|  楼主 | 2019-5-24 20:42 | 只看该作者
问题已经解决,读取接收邮箱的ID号,就是读取接收邮箱接收的消息的ID号。比如设置接收邮箱屏蔽,可以接收的信息的ID为xxxx02xx。接收到的信息ID为0x10010230。则接收邮箱的ID的0xD0010230(ID设置前两位为1).
volatile struct MBOX *Mailbox  = &ECanaMboxes.MBOX5 ;
ID = Mailbox->MSGID.all;
读取接收邮箱5的ID号

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

15

主题

48

帖子

2

粉丝