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.

[参考译文] TMS320F28035:TMS320F28035可以接收

Guru**** 2534270 points
Other Parts Discussed in Thread: TMS320F28335

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1205094/tms320f28035-tms320f28035-can-receive

器件型号:TMS320F28035
主题中讨论的其他器件:TMS320F28335

如何配置 F28035 CAN 来接收所有消息?

下面是我正在使用的 InitCAN 函数。

除在邮箱上设置的 ID 外,仍然不起作用。

也就是说、 每个邮箱收到一个 ID!!

我正在使用各种其他控制器、但从未发现过此限制。  

那么、有人能帮助我配置以接收所有 ID 吗?

提前感谢

桑迪普

//--------------------------------------------------------------------------------------------------------------------------------------------------

空 InitECAN (空)
结构 ecan_REGS ECanaShadow;

  EALLOW;  // EALLOW 启用对受保护位的访问

/*使用 eCAN 寄存器*/为 CAN 操作配置 eCAN RX 和 TX 引脚

  ECanaShadow.CANTIOC.all = ECanaRegs.CANTIOC.all;
  ECanaShadow.CANTIOC.bit.TXFUNC = 1;
  ECanaRegs.CANTIOC.all = ECanaShadow.CANTIOC.all;

  ECanaShadow.CANRIOC.all = ECanaRegs.CANRIOC.all;
  ECanaShadow.CANRIOC.bit.RXFUNC = 1;
  ECanaRegs.CANRIOC.all = ECanaShadow.CANRIOC.all;

/*将 eCAN 配置为 HECC 模式-(需要访问邮箱16到31)*/
                  // HECC 模式还启用了时间戳功能

  ECanaShadow.CANMC.ALL = ECanaRegs.CANMC.ALL;
  ECanaShadow.CANMC.bit.SCB = 1;
  ECanaRegs.CANMC.ALL = ECanaShadow.CANMC.ALL;

/*将"消息控制寄存器"的所有位初始化为零*/
// MSGCTRL 寄存器的某些位出现未知状态。 为确保正常运行、
// MSGCTRL 的所有位(包括保留位)都必须初始化为零

  ECanaMboxes.MBOX0.MSGCTRL.ALL = 0x00000000;
  ECanaMboxes.MBOX1.MSGCTRL.all = 0x00000000;
  ECanaMboxes.MBOX2.MSGCTRL.all = 0x00000000;
  ECanaMboxes.MBOX3.MSGCTRL.all = 0x00000000;
  ECanaMboxes.MBOX4.MSGCTRL.all = 0x00000000;
  ECanaMboxes.MBOX5.MSGCTRL.all = 0x00000000;
  ECanaMboxes.MBOX6.MSGCTRL.ALL = 0x00000000;
  ECanaMboxes.MBOX7.MSGCTRL.all = 0x00000000;

// TAN、RMPn、GIFn 位在复位时都为零并再次被清除
// 作为预防措施。

  ECanaRegs.CANA.all = 0xFFFFFFFF; /*清除所有 Tan 位*/
  ECanaRegs.CANRMP.ALL = 0xFFFFFFFF; /*清除所有 RMPn 位*/
  ECanaRegs.CANGIF0.all = 0xFFFFFFFF;/*清除所有中断标志位*/
  ECanaRegs.CANGIF1.all = 0xFFFFFFFF;

//为 eCANA*配置位时序参数*/

  ECanaShadow.CANMC.ALL = ECanaRegs.CANMC.ALL;
  ECanaShadow.CANMC.bit.CCR = 1;       //设置 CCR = 1
  ECanaRegs.CANMC.ALL = ECanaShadow.CANMC.ALL;

  //等待 CPU 获得更改配置寄存器的权限
  操作
  {
   ECanaShadow.canes.all = ECanaRegs.canes.all;
  } while (ECanaShadow.canes.bit.CCE != 1 );   //等待 CCE 位被设置。

  ECanaShadow.CANBTC.all = 0;
  /*以下块只用于60MHz SYSCLKOUT。 (30MHz CAN 模块时钟位速率= 1Mbps
    请参阅文件末尾的注释。 */

  ECanaShadow.CANBTC.bit.BRPREG = 7;   +//250kbps
  ECanaShadow.CANBTC.bit.TSEG2REG = 2;  /250kbps
  ECanaShadow.CANBTC.bit.TSEG1REG = 10; /250kbps

  ECanaShadow.CANBTC.bit.SAM = 1;
  ECanaRegs.CANBTC.all = ECanaShadow.CANBTC.all;

  ECanaShadow.CANMC.ALL = ECanaRegs.CANMC.ALL;
  ECanaShadow.CANMC.bit.CCR = 0;       //设置 CCR = 0
  ECanaRegs.CANMC.ALL = ECanaShadow.CANMC.ALL;

  //等待 CPU 不再具有更改配置寄存器的权限
  操作
  {
   ECanaShadow.canes.all = ECanaRegs.canes.all;
  } while (ECanaShadow.canes.bit.CCE != 0 );   //等待 CCE 位 被清除。

/*禁用所有邮箱 */
  ECanaRegs.CANME.all = 0;    //需要在写入 MSGID 之前

  EDIS;
//硬件初始化结束于此处

  /*禁用所有邮箱 */
  ECanaRegs.CANME.all = 0;    //需要在写入 MSGID 之前

  ECanaMboxes.MBOX16.MSGID.bit.ide = 0;
  ECanaMboxes.MBOX16.MSGID.bit.STDMSGID = 0x200;
  ECanaMboxes.MBOX17.MSGID.bit.ide = 0;
  ECanaMboxes.MBOX17.MSGID.bit.STDMSGID = 0x201;
  ECanaMboxes.MBOX18.MSGID.bit.ide = 0;
  ECanaMboxes.MBOX18.MSGID.bit.STDMSGID = 0x202;
  ECanaMboxes.MBOX19.MSGID.bit.ide = 0;
  ECanaMboxes.MBOX19.MSGID.bit.STDMSGID = 0x203;


  //将邮箱0-15配置为 TX,16-31配置为 RX
  ECanaRegs.CANMD.all = 0xFFFF0000L;

  //启用所有邮箱*/
  ECanaRegs.CANME.all = 0xFFFFFFFFL;
  ECanaRegs.CANME.all = 0x000F000FL;

  EALLOW;
  ECanaRegs.CANMIM.all = 0xFFFFFFFF;
  ECanaRegs.CANOC.all = 0xFFFF0000;
  EDIS;

}
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [quote userid="378155" url="~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1205094/tms320f28035-tms320f28035-can-receive 如何配置 F28035可以接收所有消息?

    我想您是在问如何配置邮箱以使其能够接收所有 MSGID。 您需要为邮箱配置相应的屏蔽(屏蔽的所有适用位应该为1、这样接收到的 MSGID 的所有位成为一个"无关")。  

    请下载我的应用报告 http://www.ti.com/lit/SPRA876。它有很多经过测试的示例(其中包括一个用于验收掩码过滤的示例)。 请注意、这些示例是为 TMS320F28335器件编写的。 但是、如果您注意 SYSCLKOUT 速度的变化和由此引起的对 CANBTC 寄存器的更改、则可以将其轻松地用于任何具有 eCAN 的28x 器件。 我还要求您查看提供的调试提示。 通过查看此检查清单、可以解决大多数 CAN 问题。

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

    Sandeep、

      你拒绝了我的答复,但没有说明任何理由。 请说明为何您拒绝我的回复。