主题中讨论的其他部件: C2000WARE
您好,
我的一位客户正面临 TMS320F2.8377万S CAN转换的问题。
他同意在论坛上分享他的问题,因此我希望你能够在这个问题上帮助我们。
以下是他对该问题的描述:
我需要一些帮助,因为我在377s上遇到了使用driverlib (C2000Ware_1_00_03_00)的CAN接口问题
我在C2000 wiki中寻找了一些想法,但我没有找到答案....
我正在尝试使用通用驱动器设置两个CAN接口(CANA和CANB),以符合特定要求。
此时,我不知道应用程序需要传输哪个CobID,也不知道哪一个是消息长度
我已经开始从 C2000Ware的示例中编写代码,并且能够传输和接收数据
(设备已启用环回)
在附加的代码中,如果我在 运行时(使用CCS)更改了变量vIntTxCobId_guh,CAN_readMessage将返回接收到的数据
但如果我更改变量vIntTxDlc_guc,我可以在CAN TX引脚上看到长度不同的帧,但CAN_readMessage 返回
始终为false
我还尝试在2 "CAN_setupMessageObject"之前添加"CAN_disableController",然后添加CAN_enableController"
但已 收到任何帧。
是否可以动态更改msgLen?
否则,哪一个解决方案?
是否必须为每个msgLen设置不同的邮箱(从1到8)?
-----------------------
我尚未了解CAN_getStatus的行为
我已添加呼叫vStatus_guh = CAN_getStatus(Cana_base);
此外,当我正确接收数据时(msgLen中没有变化),我从未在1 (CAN_ES寄存器的第4位)看到RxOk标志
vStatus_guh = 8
这是否正确?
-----------------------
我已经查看了C2000Ware_1_00_03_00\driverlib\f2837xs\driverlib中2837中的can.c文件
Cana_base常量是否正确?
-----------------------
第556行.....
//
//查看是否有可用的新数据。
//
IF ((msgCtrl & CAN_IF2MCTL_NEWDAT)== CAN_IF2MCTL_NEWDAT)
{
//
//从CAN寄存器读取数据。
//
CAN_readDataReg (msgData,(Int16_t *)(BASE + CAN_O_IF2DATA),
(msgCtrl & CAN_IF2MCTL_DLC _M));
状态=真;
//
//现在清除新的数据标志
//
//将消息对象传输到指定的消息对象
//对象标识
//
HWREG_BP (Cana_base + CAN_O_IF2CMD)= CAN_IF2CMD_TXRQST |
(Objid & CAN_IF2CMD_MSG_NUM_M);
//
//等待忙位清除
//
While ((HWREGH (Cana_base + CAN_O_IF2CMD)& CAN_IF2CMD_BUSY)== CAN_IF2CMD_BUSY)
{
}
}
行584