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.

[参考译文] CCS/TMS320F28069:CAN 控制器无法发送带有 ID 的消息

Guru**** 2581345 points
Other Parts Discussed in Thread: TMS320F28069

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/653042/ccs-tms320f28069-can-controller-cannot-send-message-with-id

器件型号:TMS320F28069

工具/软件:Code Composer Studio

您好!

我正在尝试从 TMS320F28069向 Linux 计算机发送 CAN 消息。 MCU 上的代码如下所示、基本上先设置 GPIO 和 CAN 时序、然后在发送之前设置 CAN 消息。

我遇到的问题是 Linux 计算机可以获取消息内容、在下面的情况下是4字节数据计数器递增、但看不到消息 ID。 是否有一个工作示例来展示如何设置
控制器和消息对象、可以随 CAN ID 一起发送消息?

谢谢。

Linux 计算机输出:


接口= CAN0、系列= 29、类型= 3、PROTO= 1
0x000>[4] 78 56 34 12.
0x000>[4] 00 00 00 00
0x000>[4] 01 00 00 00
0x000>[4] 02 00 00 00
0x000>[4] 03 00 00 00 00
0x000>[4] 04 00 00 00
0x000>[4] 05 00 00 00
0x000>[4] 06 00 00 00
0x000>[4] 07 00 00 00
0x000>[4] 08 00 00 00
0x000>[4] 09 00 00 00

TMS320F28069代码:
EALLOW;
GpioCtrlRegs.GPAPUD.bit.GPIO30 = 0;//启用 GPIO30的上拉电阻(CANRXA)
GpioCtrlRegs.GPAPUD.bit.GPIO31 = 0;//启用 GPIO31的上拉电阻(CANTXA)
GpioCtrlRegs.GPAQSEL2.bit.GPIO30 = 3;//针对 GPIO30的异步 qual (CANRXA)
GpioCtrlRegs.GPAMUX2.bit.GPIO30 = 1;//为 CANRXA 操作配置 GPIO30
GpioCtrlRegs.GPAMUX2.bit.GPIO31 = 1;//为 CANTXA 操作配置 GPIO31
EDIS;

ECANaMboxs.MBOX0.MSGCTRL.ALL = 0x00000000;//清除控制;
ECANaRegs.CANME.ALL = 0;
ECANaMboxs.MBOX0.MSGID.ALL = 0x000000A1;//消息 ID
ECANaRegs.CANMD.ALL = 0x00000000;//为 Tx 配置邮箱0、为 Rx 配置邮箱1
ECanaRegs.CANME.ALL = 0x00000001;//启用邮箱
ECANaMboxs.MBOX0.MSGCTRL.ALL = 0x00000004;//要发送4位
ECANaMboxs.MBOX0.MDL.ALL = 0x12345678;//实际数据


EALLOW;
ECANaRegs.CANMIM.ALL = 0x0000000;//中断使能1、禁用0
ECANaRegs.CANMC.ALL = 0x00001400;//配置 CAN 进行配置
ECANaRegs.CANMC.ALL = 0x00001400;//配置 CAN 进行配置
ECANaRegs.CANMC.ALL = 0x00001400;//配置 CAN 进行配置
ECANaRegs.CANBTC.ALL = 0x0004011A;// BRPreg 4、TSEG1reg 3、TSEGreg 2、Sam 0、 SJW 1.
ECANaRegs.CANMC.ALL = 0x00000400;//可以完成配置
ECANaRegs.CANMC.ALL = 0x00000400;//可以完成配置
ECANaRegs.CANMC.ALL = 0x00000400;//可以完成配置
ECANaRegs.CANTIOC.ALL = 0x00000008;//正在使用 Tx 引脚
ECANaRegs.CANRIOC.ALL = 0x00000008;//正在使用 Tx 引脚

EDIS;
int i = 0;
对于(i =0;i < 100;i ++)

ECANaMboxs.MBOX0.MDL.ALL = I;
ECANaRegs.CANTRS.ALL = 0x00000001;//为发送邮箱设置 TRS
while (ECanaRegs.Canta.all!= 0x0000001){}//等待所有 Tan 位被置位。
ECanaRegs.Canta.all = 0x00000001;//清除所有 Tan
DELAY_US (100000);

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

    找到了根案例。  

    开始时、我注意到我可以发送29位 ID、但不能发送11位 ID。 然后、当我检查数据表时、按照我的假设、11位 ID 由左调整而不是由右调整。

    最棒的  

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

    云城

               很高兴您能够解决此问题、并感谢您迅速关闭此帖子。