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.

[参考译文] TMS320F280041C:将 CAN 功能从 eCAN 移植到 DCAN

Guru**** 2530330 points
Other Parts Discussed in Thread: C2000WARE

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/957441/tms320f280041c-porting-can-functionality-from-ecan-to-dcan

器件型号:TMS320F280041C
主题中讨论的其他器件:C2000WARE

尊敬的团队:

我正在尝试将代码从 eCAN 移植到280041C 控制器的 DCAN。  这是为 eCAN 控制器编写的以下代码行。  

//禁用邮箱0

ECANaRegs.CANME.bit.ME0 = 0;


//为邮箱0启用接受屏蔽
ECANaMboxs.MBOX0.MSGID.bit.AME = 1;

//启用邮箱0
ECANaRegs.CANME.bit.ME0 = 1;


//启用标准和扩展帧
ECANaLAMRegs.LAM0.bit.Lami = 1;


//将掩码设置为接收小于256的 ID (被视为标准标识符)
//位18-28用于标准标识符。 将位18设置为25以接收 ID 小于256
ECANaLARegs.LAM0.ALL =(ECANaLAMRegs.LAM0.ALL)| 0x3FC0000;

例如、如果我想更改启用邮箱的设置、  

我可以使用以下配置吗?

//禁用邮箱
CANbRegs.CAN_IF1ARB.bit.MsgVal=0;


//启用邮箱0的接受屏蔽
CANbRegs.CAN_IF1MCTL.bit.UMASK = 1;

//启用邮箱
CANbRegs.CAN_IF1ARB.bit.MsgVal=1;

//同时启用标准和扩展帧
CANbRegs.CAN_IF1ARB.bit.XTD = 0;


//Bits 18-28用于标准标识符。 将位18设置为25以接收 ID 小于256
CANbRegs.CAN_IF1MSK.all=(CANbRegs.CAN_IF1MSK.all)|0X3FC0000;

您能不能建议在将代码移植到 DCAN 控制器(280041C)时应进行的更改/修改

谢谢、

Harish K.

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

    Harish、

                 首先、您需要使用影子寄存器在 eCAN 中使用32位 R/W。 查看参考指南的 eCAN 章节。 和我的应用报告 http://www.ti.com/lit/spra876。 不应直接访问类似于" ECANaRegs.CANME.bit.ME0 = 0;"的位。  

    对于280041、您是否了解了 C:\ti\c2000Ware_3_03_00_00\driverlib\f2837xd\examples\cpu1\can 中的 Driverlib 示例? 另外、请下载我的应用报告 http://www.ti.com/lit/sprace5。 它有许多经过测试的示例。

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

    有关如何使用位字段的信息、请参阅 C:\ti\c2000\C2000Ware_3_03_00_00\device_support\f2837xd\examples\cpu1\can_loopback_bitfields\cpu01中的示例

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

    尊敬的 Hareesh:

    感谢您提供信息。 此查询的背景是、开发过程是使用使用使用 TI C2000 Blockset 的 MATALB/Embedded Coder 进行的。 我已经使用自定义块来覆盖接收块的初始化代码、接收块接受所有 ID 的消息、从而通过使用单个邮箱而不是多个邮箱来减少代码开销。 因此、根据建议、我已将其调整为280041C。

    因此、如果我仍然需要使用影子寄存器方法、请允许我这样做。 如果我没有、您能验证我先前共享的寄存器的配置吗?

    谢谢、

    Harish K.  

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

    Harish、

             不确定您的最新查询是关于 eCAN 还是 DCAN。 如果它是 eCAN、则必须使用影子寄存器(以启用32位 R/W)。 这是一个器件要求、与您是否使用 MATLAB/嵌入式编码器无关。  

    如果是 DCAN、请查看 C2000Ware 中的位字段示例。

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

    尊敬的 Hareesh:

    是的。 我的问题仅涉及 DCAN。 我将查看您指定的示例。  我想在这里补充一些具体的细节。 嵌入式编码器中的当前 CAN 接收块不支持通过单个邮箱访问多条消息。 因此、我必须重写已经完成的。

    'Init'函数只 负责检查 每个邮箱是否只配置了一个消息 ID。  如果为同一邮箱配置了多个消息 ID、则验证失败、并将返回错误。 该回调函数仅用于验证邮箱。 因此、我将删除为现有接收块编写的验证函数、并用影子寄存器方法替换该函数。  

    我查看了位字段寄存器示例。  我认为它没有讨论验收滤波。 您能不能建议使用使用 DCAN 的验收文件管理器的示例。

    谢谢、

    Harish K.

     

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

    Harish、

                 很遗憾我不熟悉 Embedded Coder。  

    我们鼓励客户离开位字段并使用 Driverlib。 这就是为什么您没有看到正在使用的器件280041C 的位字段示例。  

    [报价]您能否建议使用使用 DCAN 的验收文件管理器的示例?[/报价]

    请看一下 SPRACE5中的掩码示例。  

    请注意、DCAN 和 eCAN 之间的屏蔽位行为相反。