Fix can transmitMsg()

1. Now method takes Uint62 instead of Uint32
2. Comment TA bit checking for not potentially make processor to stand in
endless loop if there is no answer from another node
3. The method do not set data lenght now. It should be set when MBOX
configuring
feature/CAN_timeOut
Oleg 1 month ago
parent d864977511
commit cc59948011

@ -15,7 +15,7 @@ void CAN::transmitMsg(Uint16 boxNumber, const CANMessage& message){
p_MailBox->MDH.all = 0x0;
p_MailBox->MDL.all = 0x0;
p_MailBox->MSGCTRL.bit.DLC = message.dataLength;
// p_MailBox->MSGCTRL.bit.DLC = message.dataLength;
p_MailBox->MDH.all = message.mdh.all;
p_MailBox->MDL.all = message.mdl.all;
@ -35,7 +35,7 @@ void CAN::transmitMsg(Uint16 boxNumber, const CANMessage& message){
}
void CAN::transmitMsg(Uint16 boxNumber, const Uint32& message){
void CAN::transmitMsg(Uint16 boxNumber, const Uint64& message){
if (boxNumber > 31) return;
Uint32 mboxControl(0);
@ -46,8 +46,8 @@ void CAN::transmitMsg(Uint16 boxNumber, const Uint32& message){
p_MailBox->MDH.all = 0x0;
p_MailBox->MDL.all = 0x0;
p_MailBox->MDH.all = message >> 16;
p_MailBox->MDH.all = message >> 32;
p_MailBox->MDL.all = message;
// Set TRS for mailbox
@ -56,17 +56,17 @@ void CAN::transmitMsg(Uint16 boxNumber, const Uint32& message){
p_CanRegs_->CANTRS.all = CanShadow_.CANTRS.all;
// Wait for TA bit to be set
do { CanShadow_.CANTA.all = p_CanRegs_->CANTA.all; }
while((CanShadow_.CANTA.all & mboxControl) == 0 );
// do { CanShadow_.CANTA.all = p_CanRegs_->CANTA.all; }
// while((CanShadow_.CANTA.all & mboxControl) == 0 );
// Clear TA (transmit acknowledge bit)
CanShadow_.CANTA.all = 0;
CanShadow_.CANTA.all |= mboxControl;
p_CanRegs_->CANTA.all = CanShadow_.CANTA.all;
// CanShadow_.CANTA.all = 0;
// CanShadow_.CANTA.all |= mboxControl;
// p_CanRegs_->CANTA.all = CanShadow_.CANTA.all;
}
void CAN::transmitMsg(Uint16 boxNumber, const Uint32& message, const Uint16 dlc){
void CAN::transmitMsg(Uint16 boxNumber, const Uint64& message, const Uint16 dlc){
if (boxNumber > 31) return;
Uint32 mboxControl(0);
@ -79,7 +79,7 @@ void CAN::transmitMsg(Uint16 boxNumber, const Uint32& message, const Uint16 dlc)
p_MailBox->MDL.all = 0x0;
p_MailBox->MSGCTRL.bit.DLC = dlc;
p_MailBox->MDH.all = message >> 16;
p_MailBox->MDH.all = message >> 32;
p_MailBox->MDL.all = message;
// Set TRS for mailbox
@ -88,13 +88,13 @@ void CAN::transmitMsg(Uint16 boxNumber, const Uint32& message, const Uint16 dlc)
p_CanRegs_->CANTRS.all = CanShadow_.CANTRS.all;
// Wait for TA bit to be set
do { CanShadow_.CANTA.all = p_CanRegs_->CANTA.all; }
while((CanShadow_.CANTA.all & mboxControl) == 0 );
// do { CanShadow_.CANTA.all = p_CanRegs_->CANTA.all; }
// while((CanShadow_.CANTA.all & mboxControl) == 0 );
// Clear TA (transmit acknowledge bit)
CanShadow_.CANTA.all = 0;
CanShadow_.CANTA.all |= mboxControl;
p_CanRegs_->CANTA.all = CanShadow_.CANTA.all;
// CanShadow_.CANTA.all = 0;
// CanShadow_.CANTA.all |= mboxControl;
// p_CanRegs_->CANTA.all = CanShadow_.CANTA.all;
}

@ -114,8 +114,8 @@ public:
bool isNewMessage(Uint16 boxNumber);
void transmitMsg(Uint16 boxNumber, const CANMessage& message); // TODO excessive method?
void transmitMsg(Uint16 boxNumber, const Uint32& message);
void transmitMsg(Uint16 boxNumber, const Uint32& message, const Uint16 dlc);
void transmitMsg(Uint16 boxNumber, const Uint64& message);
void transmitMsg(Uint16 boxNumber, const Uint64& message, const Uint16 dlc);
void updateTXMessage(Uint16 boxNumber, const CANMessage& message);
void updateTXMessage(Uint16 boxNumber, const Uint32& message);
void sendRemoteRequest(Uint16 boxNumber);

Loading…
Cancel
Save