主题中讨论的其他器件:C2000WARE
您好!
在使用 C2000Ware 中的 driverlib 实现 CAN 接口期间、我遇到了一个问题、该问题似乎与近期对 CAN_setupMessageObject 所做的更改相关。 在我的代码中、CAN_setupMessageObject 被调用两次、以使用消息框 ID 31和13设置两个消息对象、一个用于 TX (启用中断)、一个 RX。
对于一个测试、CAN_sendMessage 会针对一个消息对象调用一次。 但是、结果会发送两条 CAN 消息、而不是一条。 调试 CAN_INT 显示了来自31号报文对象(预期)的一个中断、但来自32号报文对象的另一个中断不应被使用。
进一步的调试显示、在第二次调用 CAN_setupMessageObject 之后、不仅会在 CAN_mvL_21中设置预期的位、而且还会设置消息对象32的位(0xC0001000而不是0x40001000)。
此问题似乎与近期对 CAN_setupMessageObject 的更改有关。 这是版本 C2000Ware_1_00_00_00 (CAN.c)中的代码:
//$TI 发行版:F2837xS 支持库 v3.01.00.00 $
//$Release Date:Mon May 22 15:44:59 CDT 2017 $
[...]
// CAN_setupMessageObject
[...]
//
//清除并写出寄存器以编程报文对象。
//
HWREG_BP (base + CAN_O_IF1CMD)= 0U;
HWREG_BP (base + CAN_O_IF1MSK)= 0U;
HWREG_BP (base + CAN_O_IF1ARB)= 0U;
HWREG_BP (base + CAN_O_IF1MCTL)= 0U;
HWREG_BP (base + CAN_O_IF1CMD)= cmdMaskReg;
HWREG_BP (base + CAN_O_IF1MSK)= maskReg;
HWREG_BP (base + CAN_O_IF1ARB)= arbReg;
HWREG_BP (base + CAN_O_IF1MCTL)= msgCtrl;
对于 C2000Ware_1_00_01_00、清除寄存器已删除(根据发行说明、启用优化时似乎存在问题):
//$TI 发行版:F2837xS 支持库 v3.00.00.00 $
//$Release Date:Wed Jan 25 16:06:35 CST 2017 $
[...]
// CAN_setupMessageObject
[...]
//
//写出寄存器以编程报文对象。
//
HWREG_BP (base + CAN_O_IF1CMD)= cmdMaskReg;
HWREG_BP (base + CAN_O_IF1MSK)= maskReg;
HWREG_BP (base + CAN_O_IF1ARB)= arbReg;
HWREG_BP (base + CAN_O_IF1MCTL)= msgCtrl;
C2000Ware_1_00_00_00的旧版本似乎可以正常工作(尚未使用优化)。
此致、
Steffen