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/TMS320F2.8377万S:2.8377万s,CAN通信,CAN接收,CAN传输

Guru**** 2487425 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/642904/ccs-tms320f28377s-28377s-can-communication-can-receive-can-transmit

部件号:TMS320F2.8377万S

工具/软件:Code Composer Studio

大家好。

我们目前正在使用2.8377万S构建一个系统。

由于CAN通信,2.8335万和2.8377万S的区别很大。

2.8377万S在CAN通信的情况下,如果同时传输多个ID,则稍后传输的ID可能变为忽略。

要解决此问题,请使用delay_us ()来延迟代码,如下所示。

使用延迟是可以的,但它似乎在系统上不稳定,所以我正在寻找另一种方法。

我想接收CAN通信当前状态的状态值,并等待传输,然后传输下一个ID。 您还有其他命令吗?

我们正在创建和使用ECanaMbox,以便与2.8335万系统类似使用。

感谢您的回复。

Void Cana_Transmit_Func (void)
{

无符号字符I =0;

对于(i=0;i<=32;i++)
{
IF (ECanaRegs.CANTRS[I].bit.TRS == 1)
{
ECanaRegs.CANTRS[I].bit.TRS = 0;

Cana_sTXCANMessage.ui32MsgID = ECanaMboxes.MBOX[I].MSGID.ALL;
Cana_sTXCANMessage.ui32MsgIDMask = 0;
Cana_sTXCANMessage.ui32Flags = 0;
Cana_sTXCANMessage.ui32MsgLen = 8;
Cana_txMsgData[0]= ECanaMboxes.MBOX[I].MDL.byte.BYTE0;
Cana_txMsgData[1]= ECanaMboxes.MBOX[I].MDL.byte.BYTE1;
Cana_txMsgData[2]= ECanaMboxes.MBOX[I].MDL.byte.BYTE2;
Cana_txMsgData[3]= ECanaMboxes.MBOX[I].MDL.byte.BYTE3;
Cana_txMsgData[4]= ECanaMboxes.MBOX [I].MDH.byte.BYTE4;
Cana_txMsgData[5]= ECanaMboxes.MBOX[I].MDH.byte.BYTE5;
Cana_txMsgData[6]= ECanaMboxes.MBOX [I].MDH.byte.BYTE6;
Cana_txMsgData[7]= ECanaMboxes.MBOX[I].MDH.byte.BYTE7;

Cana_sTXCANMessage.pucMsgData = Cana_txMsgData;
CANMessageSet (Cana_base,TX_MSG_OBJ_ID,&Cana_sTXCANMessage,MSG_OBJ_TYPE_TX);
Cana_status = CANIntStatus (Cana_base,CAN_INT_STS_Cause);

DELAY _US(300);

}
}


} 

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

               您是否认为当标记多个ID进行传输时,某些ID无法传输? 这种情况不应发生。 是否已尝试轮询TxRqst位以确定传输完成? 根据SPEC在成功传输后,如果自传输开始以来没有新数据写入消息对象(NewDat ='0'),则将重置TxRqst位”。 另一个选项是在CAN_ES寄存器中使用TxOk位。 不确定您的代码是否使用中断,但您可以在成功传输时声明中断。 没有必要依赖拖延。

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

    我是否可以使用CAN_ES寄存器TXOK的CAN示例的CANStatusGet ()函数?

    它是这样写的吗?

    CANB_STATUS = CANStatusGet (CANB_BASE,CAN_STS_CONTROL);
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    这将会奏效。