主题中讨论的其他器件:C2000WARE
我正在使用基于 TMS320F28335的电路板、最近出现了内存损坏问题、我认为这些问题与 CAN 总线有关。 我一直在使用 TI 参考指南交叉检查我们的代码、但我还不清楚一些要点。 我非常感谢对下列问题的任何帮助或澄清。
1.在第13页,这些文件提到:
在初始化阶段、CPU 将应用程序使用的所有消息标识符指定给消息控制器
-
我无法在我们的 CAN 驱动程序中识别相应的代码。 有人能解释一下这意味着什么、我们应该如何指定使用的消息、如果我们稍后使用初始化时未指定的消息标识符配置邮箱、会发生什么情况吗?
2.在第15页:
注意:不在应用程序中使用的 LAMN、MOTSn 和 MOTOn 寄存器和邮箱(在 CANME 寄存器中禁用)可被 CPU 用作通用数据存储器。
-
建议在初始化时打开所有邮箱以为 CAN 控制器保留存储器吗? 目前、我们的代码在初始化时禁用所有邮箱。
3.关于接收邮箱的配置,在第73页:
如果 AME 位设置为1、则必须对相应的接受屏蔽进行编程
-
在我们的代码中、我们始终将掩码设置为0x00000000、将 AME 位设置为1。 是这样吗? (在遇到内存损坏问题后、我们似乎也停止了使用接受屏蔽)
4.在第79页,关于中断处理:
如果它是一个接收邮箱、CPU 应该如上所述读取数据并通过向它写入1来清除 RMP.31-0标志
-
我们的代码似乎首先清除 RMP 标志、然后读取数据。 是否存在不遵循指定订单的潜在风险?
5.在 CAN 模块初始化之前、我们的代码通过设置 CANMC.6执行"软件复位"。
->这是明智的还是应该避免? 硬件与软件复位的影响在参考指南中没有详细说明。
6.初始化时,代码逻辑如下所示:
(i)设置 ECanaRegs.CANMC.ALL = 0x00000020 (软件复位);
(ii)置位 TXFUNC 和 RXFUNC 位、
(III)设置 SCB 位(启用 eCAN 模式)、
(IV)为所有邮箱设置 MSGCTRL.ALL = 0、
(v)将 CANTA、CANRMP、CANGIF0、CANGIF1、CANOPC 设置为0xFFFFFFFF、 (VI)将 CANMIL 设置为0
(vi)配置位时序(设置 CCR、等待 CCE、配置 CANBTC、清除 CCR、等待 CCE 清零)
(VII)禁用所有邮箱(CANME.ALL = 0)
(VIII)设置 CANMIM.ALL = 0xFFFFFFFF、CANGIM.ALL = 0x00000001
-
该逻辑有任何问题吗? 在参考文档的第72页上、它说"复位后、CCR 位(CANMC.12)和 CCE 位(CANES.4)被设定为1"。 软件复位也是如此吗? 如果是、在上述点(ii)-(v)期间、CCR 和 CCE 可能已经被设置为1。
7.在第72页的"配置 eCAN 的步骤"中、第6步被称为
对主控制寄存器(CANMC)进行如下编程:
a.清除 CCR (CANMC.12)= 0
b.清除 PDR (CANMC.11)= 0
c.清除 DBO (CANMC.10)= 0
d.清除 WUBA (CANMC.9)= 0
e.清除 CDR (CANMC.8)= 0
f.清除 ABO (CANMC.7)= 0
g.清除 STM (CANMC.6)= 0
h.清除 SRES (CANMC.5)= 0
i.清除 MBNR (CANMC.4-0)= 0
->但是、除 CCR 外、我们的代码中没有明确清除任何这些错误。 是否有不这样做的潜在风险?
8.在第78页,关于中断配置:
现在配置 CANGIM 寄存器。 标志 AAIM、WDIM、WUIM、Boim、EPIM、 和 WLIM
(GIM.14-9)应该一直被置位(启用这些中断)。 此外、GIL (GIM.2)位可以被置位
使全局中断处于邮箱中断之外的另一个级别
-
我们的代码中没有设置 AAIM、WDIM、WUIM、Boim、EPIM 或 WLIM 标志(CANGIM.ALL = 0x00000001)。 这是可以的、还是必须设置这些?
9.在发送消息时,我们的代码中的逻辑是:(i)禁用邮箱,(ii)设置其消息标识符、RTR、DLC 和 MDL/MDH 数据字段,(iii)重新启用邮箱,及(iv)设置 TRS 位。 代码不会清除 TA 标志。
->这是好的、还是有更明智的方法来实现这一点? 是否绝对有必要清除 TA 标志? 如果我们不这样做、会发生什么情况?
发送报文时、相应的 CANTRSn 位将通过表单中的指令置位
ECANaRegs.CANTRS.ALL = 0x00000001 << mailboxnumber;
-
这是一种明智的方法,还是应该在此处使用|=运算符? (该文档指出向 TRS 写入0无效)
11. eCAN-A 和 eCAN-b 这两个模块到底是什么;它们是否可以同时使用、从而允许32 * 2邮箱? 在我们的代码中、这两个引脚都被启用、但实际上只有 eCAN-A 被使用。
非常感谢、
Laurent Badel