Fix some CAN interface argument capacity

1. Change rx and tx function to process Uint64 values, not Uint32
2. Make LSB first as default
feature/CAN_timeOut
Oleg 1 month ago
parent cc59948011
commit a450de810f

@ -120,7 +120,7 @@ void CAN::updateTXMessage(Uint16 boxNumber, const CANMessage& message){ // TODO
} }
void CAN::updateTXMessage(Uint16 boxNumber, const Uint32& message){ // TODO check trs bit and set it at the end if it was here. Once the TRS bit is set for a mailbox and then data is changed in the mailbox using the CDR void CAN::updateTXMessage(Uint16 boxNumber, const Uint64& message){ // TODO check trs bit and set it at the end if it was here. Once the TRS bit is set for a mailbox and then data is changed in the mailbox using the CDR
// bit, the CAN module fails to transmit the new data and transmits the old data instead. To avoid this, // bit, the CAN module fails to transmit the new data and transmits the old data instead. To avoid this,
// reset transmission in that mailbox using the TRRn bit and set the TRSn bit again. The new data is // reset transmission in that mailbox using the TRRn bit and set the TRSn bit again. The new data is
// then transmitted. // then transmitted.
@ -134,7 +134,7 @@ void CAN::updateTXMessage(Uint16 boxNumber, const Uint32& message){ // TODO chec
// TODO Add lenght changing? // TODO Add lenght changing?
p_MailBox->MDL.all = message; p_MailBox->MDL.all = message;
p_MailBox->MDH.all = message >> 16; p_MailBox->MDH.all = message >> 32;
CanShadow_.CANMC.all = p_CanRegs_->CANMC.all; CanShadow_.CANMC.all = p_CanRegs_->CANMC.all;
CanShadow_.CANMC.bit.CDR = 0; CanShadow_.CANMC.bit.CDR = 0;
@ -202,7 +202,7 @@ int16 CAN::receiveMsg(Uint16 boxNumber, CANMessage& rxMessage){ // TODO faults j
} }
int16 CAN::receiveMsg(Uint16 boxNumber, Uint32& rxMessage){ // TODO faults just return -1 int16 CAN::receiveMsg(Uint16 boxNumber, Uint64& rxMessage){ // TODO faults just return -1
if (boxNumber > 31) { return -1; } if (boxNumber > 31) { return -1; }
Uint32 mboxControl(0); Uint32 mboxControl(0);
@ -216,8 +216,9 @@ int16 CAN::receiveMsg(Uint16 boxNumber, Uint32& rxMessage){ // TODO faults just
p_CanRegs_->CANRMP.all &= mboxControl; p_CanRegs_->CANRMP.all &= mboxControl;
rxMessage = p_MailBox->MDH.all;
rxMessage = rxMessage << 32;
rxMessage = p_MailBox->MDL.all; rxMessage = p_MailBox->MDL.all;
rxMessage = (p_MailBox->MDH.all) << 16;
bool newMessage; bool newMessage;
bool lostMessage; bool lostMessage;

@ -117,10 +117,10 @@ public:
void transmitMsg(Uint16 boxNumber, const Uint64& message); void transmitMsg(Uint16 boxNumber, const Uint64& message);
void transmitMsg(Uint16 boxNumber, const Uint64& message, const Uint16 dlc); void transmitMsg(Uint16 boxNumber, const Uint64& message, const Uint16 dlc);
void updateTXMessage(Uint16 boxNumber, const CANMessage& message); void updateTXMessage(Uint16 boxNumber, const CANMessage& message);
void updateTXMessage(Uint16 boxNumber, const Uint32& message); void updateTXMessage(Uint16 boxNumber, const Uint64& message);
void sendRemoteRequest(Uint16 boxNumber); void sendRemoteRequest(Uint16 boxNumber);
int16 receiveMsg(Uint16 boxNumber, CANMessage& rxMessage); int16 receiveMsg(Uint16 boxNumber, CANMessage& rxMessage);
int16 receiveMsg(Uint16 boxNumber, Uint32& rxMessage); int16 receiveMsg(Uint16 boxNumber, Uint64& rxMessage);
private: private:
CAN_VARIANT canPort; CAN_VARIANT canPort;

@ -107,13 +107,13 @@ void CAN::config(Uint16 baudrate, Uint16 flags){
do { CanShadow_.CANES.all = p_CanRegs_->CANES.all; } do { CanShadow_.CANES.all = p_CanRegs_->CANES.all; }
while(CanShadow_.CANES.bit.CCE != 1 ); while(CanShadow_.CANES.bit.CCE != 1 );
// LSB - 0; MSB - 1 // MSB - 0; LSB - 1
CanShadow_.CANMC.all = p_CanRegs_->CANMC.all; CanShadow_.CANMC.all = p_CanRegs_->CANMC.all;
if (flags & MSB_ENABLE){ if (flags & MSB_ENABLE){
CanShadow_.CANMC.bit.DBO = 1; CanShadow_.CANMC.bit.DBO = 0;
} }
else else
{ CanShadow_.CANMC.bit.DBO = 0; } { CanShadow_.CANMC.bit.DBO = 1; }
p_CanRegs_->CANMC.all = CanShadow_.CANMC.all; p_CanRegs_->CANMC.all = CanShadow_.CANMC.all;
CanShadow_.CANBTC.all = 0; CanShadow_.CANBTC.all = 0;

Loading…
Cancel
Save