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.

[参考译文] TMS320F28069M:可与 F28069M LaunchPad 连接

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

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1014018/tms320f28069m-can-interface-with-the-f28069m-launchpad

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

我正在尝试使用 CANalyzer 设置与 F28069M Launchpad 的 CAN 通信。 我希望电路板使用 PGN 0xFED9来发送和接收消息。 我已按如下方式配置 CAN 寄存器:

InitCAN ()

/*为 CAN 控制寄存器创建影子寄存器结构。

这是必需的、因为只允许对这些寄存器进行32位访问。 16位访问

可能会损坏寄存器的内容。 这是

在16 - 31 */位之间写入位(或位组)时尤其如此

/*初始化 CAN 模块*/

InitECan();

InitECanGpio();

MessageReceivedCount = 0;

/*写入 MSGID 字段*/

EALLOW;

ECANaMboxs.MBOX0.MSGID.ALL = 0x18FED917;//从 IBIS SA 0x17全局发送0x00FED9 (AUXIO1)

ECANaMboxs.MBOX1.MSGID.ALL = 0x18FED927;//从机器 ECM SA 0x27全局接收0x00FED9 (AUXIO1)

// ECANaMboxs.MBOX2.MSGID.ALL = 0x80FDC527;//发送工作工具 ID (PGN 64965/SPN 2902)

EDIS;

/*为邮箱配置掩码*/

ECANaLAMRegs.LAM1.ALL = 0xBF000000;// MBOX1的 MSGID 屏蔽(RX 快速耦合器):b1011110000000000000000000000000000000000000000000000

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

ECANaShady.CANMC.ALL = ECANaRegs.CANMC.ALL//保存(CANMC)主控制寄存器

ECanaShady.CANMC.bit.CCR = 1;//设置 CCR = 1

ECANaRegs.CANMC.ALL = ECANaShadure.CANMC.ALL//设置(CANMC)主控制寄存器

//等待 CPU 被授予更改配置寄存器的权限

操作

ECanaShady.canes.all = ECanaRegs.canes.all//设置(Canes)错误和状态寄存器

} while (ECanaShading.canes.bit.CCE!= 1);//等待 CCE 位被置位。

ECanaShady.CANBTC.ALL = 0;

/*以下块用于90MHz SYSCLKOUT。 (45MHz CAN 模块时钟位速率= 1Mbps

请参阅文件末尾的注释。 *

ECANaShady.CANBTC.bit.BRPREG = 11;// 2表示1Mbps、5表示500kbps、11表示250kbps、23表示125kbps、29表示100kbps

ECANaShady.CANBTC.bit.TSEG2REG = 3;//位时序配置寄存器的时间段2 (以 TQ 单位表示的相位长度) TSEG2 = TSEG2reg + 1

ECANaShady.CANBTC.bit.TSEG1REG = 9;//位时序配置寄存器的时间段1 (CAN 总线上某个位的长度) TSEG1 = TSEG1reg + 1

ECANaShady.CANBTC.bit.SAM = 1;// CAN 模块采样三次并做出多数决策。

ECANaRegs.CANBTC.ALL = ECANaShady.CANBTC.ALL//设置(CANBTC)位时序配置寄存器

ECANaShady.CANMC.ALL = ECANaRegs.CANMC.ALL//保存(CANMC)主控制寄存器

ECanaShady.CANMC.bit.CCR = 0;//清除 CCR = 0:CPU 请求正常操作。

ECanaShady.CANMC.bit.ABO = 1;//设置 ABO = 1:自动总线打开。

ECANaRegs.CANMC.ALL = ECANaShadure.CANMC.ALL//设置(CANMC)主控制寄存器

//等待 CPU 不再具有更改配置寄存器的权限

操作

ECanaShady.canes.all = ECanaRegs.canes.all//设置(Canes)错误和状态寄存器

} while (ECanaShading.canes.bit.CCE!= 0);//等待 CCE 位被清除。

/*将被测邮箱0配置为发送邮箱*/

ECANaShady.CANMD.all = ECANaRegs.CANMD.ALL//保存(CANMD)消息数据寄存器

ECANaShady.CANMD.bit.md0 = 0;//将邮箱0设置为发送

ECANaRegs.CANMD.ALL = ECANaShadure.CANMD.ALL//设置(CANMD)消息数据寄存器

/*启用受测邮箱0 */

ECANaShady.CANME.ALL = ECANaRegs.CANME.ALL//保存(CANME)邮箱使能寄存器

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

ECANaRegs.CANME.ALL = ECANaShadure.CANME.ALL//设置(CANME)邮箱启用寄存器

/*将被测邮箱1配置为接收邮箱*/

ECANaMboxs.MBOX1.MSGID.bit.IDE = 1;//设置具有29位扩展 MSGID 的邮箱1

ECANaShady.CANMD.all = ECANaRegs.CANMD.ALL//保存(CANMD)消息数据寄存器

ECanaShady.CANMD.bit.MD1 = 1;//将邮箱1设置为接收

ECANaRegs.CANMD.ALL = ECANaShadure.CANMD.ALL//设置(CANMD)消息数据寄存器

/*启用受测邮箱1 */

ECANaShady.CANME.ALL = ECANaRegs.CANME.ALL//保存(CANME)邮箱使能寄存器

ECanaShady.CANME.bit.ME1 = 1;//启用邮箱1

ECANaRegs.CANME.ALL = ECANaShadure.CANME.ALL//设置(CANME)邮箱启用寄存器

///*将被测邮箱2配置为发送邮箱*/

// ECanaShady.CANMD.all = ECANaRegs.CANMD.all;//保存(CANMD)消息数据寄存器

// ECanaShady.CANMD.bit.MD2=0;//将邮箱2设置为发送

// ECANaRegs.CANMD.all = ECANaShady.CANMD.all;//设置(CANMD)消息数据寄存器

//

///*启用待测邮箱2 */

// ECanaShady.CANME.all = ECanaRegs.CANME.all;//设置(CANME)邮箱启用寄存器

// ECanaShady.CANME.bit.ME2 = 1;//启用邮箱2

// ECANaRegs.CANME.ALL = ECANaShady.CANME.ALL;//保存(CANME)邮箱使能寄存器

/*写入主控寄存器中的 DLC 字段*/

ECANaMboxs.MBOX0.MSGCTRL.bit.DLC = 8;//将邮箱0的 DLC 设置为8个字节

ECANaMboxs.MBOX1.MSGCTRL.bit.DLC = 8;//将邮箱1的 DLC 设置为8个字节

// ECANaMboxs.MBOX2.MSGCTRL.bit.DLC = 8;//将邮箱2的 DLC 设置为8个字节

EALLOW;

ECANaRegs.CANMIL-bit.MIL1=0//清除邮箱中断级别位

ECANaRegs.CANGIM.bit.I0EN=1//设置全局邮箱中断屏蔽位

ECANaRegs.CANMIM.ALL = 0x00000002;//设置邮箱1的邮箱中断屏蔽寄存器

EDIS;

但是、当我运行此代码时、在 将18fed927 00FF00FF00FF0000发送 到 launchpad 时、我会收到一个传输帧错误。 LaunchPad 的接收硬件中断如下所示。

void CAN_HWI (void)

// Semaphore_post (CANRXSem);//启用 CANRX_Task 以处理接收到的 CAN 消息

unsigned long long CAN_Data = 0;

操作

ECANaShady.CANRMP.ALL = ECANaRegs.CANRMP.ALL//设置(CANRMP)接收消息挂起寄存器

while (ECANaShady.CANRMP.bit.RMP1!= 1);//如果邮箱1没有收到任何消息

ECanaShady.CANRMP.bit.RMP1 = 1;//将邮箱1设置为已收到消息

ECANaRegs.CANRMP.ALL = ECANaShady.CANRMP.ALL

CAN_Data = ECANaMboxs.MBOX1.MDH.ALL +(ECANaMboxs.MBOX1.MDL.ALL * 4294967296L);//接收邮箱1中的消息

Mailbox_post (CANMbx、CAN_Data、BIOS_NO_WAIT);//等待您从 CANaylzer 接收到数据

PieCtrlRegs.PIEACK.bit.ACK9 = 1;

我出了什么问题?

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

    我可以解决此问题、但当我希望 F28069 Launchpad 使用帧头63F 发送消息时、它是18FED917。 导致此问题的原因是什么?

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

    Andrew、

                 当您希望看到18FED917的扩展 ID 时、您是否说您看到的标准 MSGID 为0x63F (在 CANalyzer 中)? 您看到什么"CCS Register/Memory"窗口? 例如、MBOX0处于6100h−6107h。 您可以在 CCS 中查看这些位置吗?  

    请下载我的应用报告 http://www.ti.com/lit/spra876。  它有许多经过测试的示例。 请注意、这些示例是为 TMS320F28335器件编写的。 但是、只要您处理 SYSCLKOUT 速度的变化和 CANBTC 寄存器保证的结果变化、它们就可以轻松地用于任何具有 eCAN 的28x 器件。 我请求您查看提供的调试提示。 大多数 CAN 问题都可以通过查看此检查清单来解决。

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

    这是 eCAN 中寄存器的屏幕截图

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

    对于扩展帧、MSGID 寄存器的位31 (IDE)需要 n1。