Clean project, rename canSpace to can_space

dev
Oleg 2 weeks ago
parent bf195020a2
commit f7e8138476

@ -1,7 +1,7 @@
#include "Periphery.h" #include "Periphery.h"
Periphery::Periphery() : Periphery::Periphery() :
_cana(canSpace::CANA), _cana(can_space::CANA),
_digitalIO(), _digitalIO(),
_zone6_ptr(reinterpret_cast<Uint16*>(0x100000)), _zone6_ptr(reinterpret_cast<Uint16*>(0x100000)),
_scib(ScibRegs), _scib(ScibRegs),
@ -27,22 +27,21 @@ void Periphery::config(){
_cana.config(); _cana.config();
// Data Frame MBOX // Data Frame MBOX
_cana.configRxMBox(canSpace::MODBUS_SETTINGS_MBOX, canSpace::MsgID(0x0), canSpace::MsgCtrlReg(0x6)); // Modbus settings _cana.configRxMBox(can_space::MODBUS_SETTINGS_MBOX, can_space::MsgID(0x0), can_space::MsgCtrlReg(0x6)); // Modbus settings
_cana.configTxMBox(canSpace::MODBUS_DATA_COMM_TO_CPU_MBOX, canSpace::MsgID(0x29), canSpace::MsgCtrlReg(0x28)); // Send Modbus data to CPU _cana.configTxMBox(can_space::MODBUS_DATA_COMM_TO_CPU_MBOX, can_space::MsgID(0x29), can_space::MsgCtrlReg(0x28)); // Send Modbus data to CPU
_cana.configRxMBox(canSpace::MODBUS_DATA_CPU_TO_COMM_MBOX, canSpace::MsgID(0x28), canSpace::MsgCtrlReg(0x8)); // Receive Modbus data from CPU _cana.configRxMBox(can_space::MODBUS_DATA_CPU_TO_COMM_MBOX, can_space::MsgID(0x28), can_space::MsgCtrlReg(0x8)); // Receive Modbus data from CPU
_cana.configTxMBox(canSpace::DIGITAL_INPUT_MBOX, canSpace::MsgID(0x30), canSpace::MsgCtrlReg(0x2)); // Receive DI _cana.configTxMBox(can_space::DIGITAL_INPUT_MBOX, can_space::MsgID(0x30), can_space::MsgCtrlReg(0x2)); // Send DI
_cana.configRxMBox(canSpace::DIGITAL_OUTPUT_MBOX, canSpace::MsgID(0x31), canSpace::MsgCtrlReg(0x2)); // Send DO _cana.configRxMBox(can_space::DIGITAL_OUTPUT_MBOX, can_space::MsgID(0x31), can_space::MsgCtrlReg(0x2)); // Receive DO
// Remote frame MBOX // Remote frame MBOX
// _cana.configRxMBox(canSpace::MODBUS_SETTINGS_MBOX, canSpace::MsgID(0x0), canSpace::MsgCtrlReg(0x10)); _cana.configTxMBox(can_space::COMM_VERSION_MBOX, can_space::MsgID(0x1, false, true), can_space::MsgCtrlReg(0x4));
_cana.configTxMBox(canSpace::COMM_VERSION_MBOX, canSpace::MsgID(0x1, false, true), canSpace::MsgCtrlReg(0x4));
_cana.enableTimeOutControl(canSpace::MODBUS_SETTINGS_MBOX); _cana.enableTimeOutControl(can_space::MODBUS_SETTINGS_MBOX);
_cana.setTimeOutValue(canSpace::MODBUS_SETTINGS_MBOX, 1000); _cana.setTimeOutValue(can_space::MODBUS_SETTINGS_MBOX, 1000);
// Interrupts // Interrupts
_cana.configSystemIsr(canSpace::I0EN_ENABLE | _cana.configSystemIsr(can_space::I0EN_ENABLE |
canSpace::EPIM_ENABLE | canSpace::WLIM_ENABLE | canSpace::AAIM_ENABLE); can_space::EPIM_ENABLE | can_space::WLIM_ENABLE | can_space::AAIM_ENABLE);
//--------------------------------------Init XINTF interface---------------------------------------------------------- //--------------------------------------Init XINTF interface----------------------------------------------------------
@ -76,39 +75,21 @@ void Periphery::config(){
Uint16 Periphery::getVersionFPGA(){ Uint16 Periphery::getVersionFPGA(){
Uint16 data; Uint16 data;
data = *_zone6_ptr + interface::SOFT_VERSION_OFFSET; data = *_zone6_ptr + interface::SOFT_VERSION_OFFSET;
return data; return data & 0x3FF; // no more than 1023. (9.9.9) should be limit
} }
void Periphery::updateVersionFPGA(){ void Periphery::updateVersionFPGA(){
_softVersion.CPLD = getVersionFPGA() & 0x3FF; // no more than 1023. (9.9.9) should be limit _softVersion.CPLD = getVersionFPGA();
_message.mdl.word.LOW_WORD = _softVersion.DSP; _message.mdl.word.LOW_WORD = _softVersion.DSP;
_message.mdl.word.HI_WORD = _softVersion.CPLD; _message.mdl.word.HI_WORD = _softVersion.CPLD;
_cana.updateTXMessage(canSpace::COMM_VERSION_MBOX, _message); _cana.updateTXMessage(can_space::COMM_VERSION_MBOX, _message);
}
void Periphery::initModbusTable(){
modbusRTU.setInputRegsAddr(400);
modbusRTU.setOutputRegsAddr(400);
modbusRTU.addInputReg(0, test_hmi_float_reg_400_test);
modbusRTU.addInputReg(1, test_hmi_float_reg_401_test);
modbusRTU.addInputReg(2, test_hmi_float_reg_402_test);
modbusRTU.addInputReg(3, test_hmi_float_reg_403_test);
modbusRTU.addInputReg(4, test_hmi_float_reg_404_test);
modbusRTU.addOutputReg(0, test_hmi_float_reg_400_test);
modbusRTU.addOutputReg(1, test_hmi_float_reg_401_test);
modbusRTU.addOutputReg(2, test_hmi_float_reg_402_test);
modbusRTU.addOutputReg(3, test_hmi_float_reg_403_test);
modbusRTU.addOutputReg(4, test_hmi_float_reg_404_test);
} }
void Periphery::receiveModbusParameters(){ void Periphery::receiveModbusParameters(){
if (_cana.isNewMessage(canSpace::MODBUS_SETTINGS_MBOX)) { if (_cana.isNewMessage(can_space::MODBUS_SETTINGS_MBOX)) {
_cana.receiveMsg(canSpace::MODBUS_SETTINGS_MBOX, _message); _cana.receiveMsg(can_space::MODBUS_SETTINGS_MBOX, _message);
MODBUSRTU::modbusConfiguration.node_id = _message.mdl.byte.BYTE0; MODBUSRTU::modbusConfiguration.node_id = _message.mdl.byte.BYTE0;
MODBUSRTU::modbusConfiguration.config.lenght = static_cast<DSP28335::SCICharLenght>(_message.mdl.byte.BYTE1); MODBUSRTU::modbusConfiguration.config.lenght = static_cast<DSP28335::SCICharLenght>(_message.mdl.byte.BYTE1);
@ -124,31 +105,31 @@ void Periphery::receiveModbusParameters(){
void Periphery::getModbusConfiguration(){ void Periphery::getModbusConfiguration(){
_cana.resetTimeStampCounter(); _cana.resetTimeStampCounter();
_cana.clearTimeOutFlag(canSpace::MODBUS_SETTINGS_MBOX); _cana.clearTimeOutFlag(can_space::MODBUS_SETTINGS_MBOX);
bool requestIsSent = false; bool requestIsSent = false;
while(!_cana.isNewMessage(canSpace::MODBUS_SETTINGS_MBOX)){ while(!_cana.isNewMessage(can_space::MODBUS_SETTINGS_MBOX)){
if(_cana.isTimeOut(canSpace::MODBUS_SETTINGS_MBOX)){ if(_cana.isTimeOut(can_space::MODBUS_SETTINGS_MBOX)){
if (!requestIsSent) { if (!requestIsSent) {
_cana.resetTimeStampCounter(); _cana.resetTimeStampCounter();
_cana.clearTimeOutFlag(canSpace::MODBUS_SETTINGS_MBOX); _cana.clearTimeOutFlag(can_space::MODBUS_SETTINGS_MBOX);
_message.mdl.word.LOW_WORD = _softVersion.DSP; _message.mdl.word.LOW_WORD = _softVersion.DSP;
_message.mdl.word.HI_WORD = _softVersion.CPLD; _message.mdl.word.HI_WORD = _softVersion.CPLD;
_cana.transmitMsg(canSpace::COMM_VERSION_MBOX, _message); _cana.transmitMsg(can_space::COMM_VERSION_MBOX, _message);
requestIsSent = true; requestIsSent = true;
} }
else{ else{
_cana.clearTimeOutFlag(canSpace::MODBUS_SETTINGS_MBOX); _cana.clearTimeOutFlag(can_space::MODBUS_SETTINGS_MBOX);
_cana.disableTimeOutControl(canSpace::MODBUS_SETTINGS_MBOX); _cana.disableTimeOutControl(can_space::MODBUS_SETTINGS_MBOX);
_error = true; _error = true;
return; return;
} }
} }
} }
_cana.receiveMsg(canSpace::MODBUS_SETTINGS_MBOX, _message); _cana.receiveMsg(can_space::MODBUS_SETTINGS_MBOX, _message);
MODBUSRTU::modbusConfiguration.node_id = _message.mdl.byte.BYTE0; MODBUSRTU::modbusConfiguration.node_id = _message.mdl.byte.BYTE0;
MODBUSRTU::modbusConfiguration.config.lenght = static_cast<DSP28335::SCICharLenght>(_message.mdl.byte.BYTE1); MODBUSRTU::modbusConfiguration.config.lenght = static_cast<DSP28335::SCICharLenght>(_message.mdl.byte.BYTE1);
MODBUSRTU::modbusConfiguration.config.baudrate = static_cast<DSP28335::SCIBaudRate>(_message.mdl.word.LOW_WORD); MODBUSRTU::modbusConfiguration.config.baudrate = static_cast<DSP28335::SCIBaudRate>(_message.mdl.word.LOW_WORD);
@ -163,13 +144,13 @@ void Periphery::getModbusConfiguration(){
void Periphery::processDigitalInput(){ void Periphery::processDigitalInput(){
Uint16 data = 0; Uint16 data = 0;
_digitalIO.readDigitalIO(data); _digitalIO.readDigitalIO(data);
_cana.transmitMsg(canSpace::DIGITAL_INPUT_MBOX, (data)); _cana.transmitMsg(can_space::DIGITAL_INPUT_MBOX, data);
} }
void Periphery::processDigitalOutput(){ void Periphery::processDigitalOutput(){
if(_cana.isNewMessage(canSpace::DIGITAL_OUTPUT_MBOX)){ if(_cana.isNewMessage(can_space::DIGITAL_OUTPUT_MBOX)){
_cana.receiveMsg(canSpace::DIGITAL_OUTPUT_MBOX, _message); _cana.receiveMsg(can_space::DIGITAL_OUTPUT_MBOX, _message);
Uint16 data = _message.mdl.word.LOW_WORD; Uint16 data = _message.mdl.word.LOW_WORD;
_digitalIO.writeDigitalIO(data); _digitalIO.writeDigitalIO(data);
} }
@ -199,13 +180,13 @@ void Periphery::sendModbusDataToCPU(){
_modbusRegCounter++; _modbusRegCounter++;
} }
_cana.transmitMsg(canSpace::MODBUS_DATA_COMM_TO_CPU_MBOX, _message); _cana.transmitMsg(can_space::MODBUS_DATA_COMM_TO_CPU_MBOX, _message);
} }
void Periphery::receiveCpuModbusData(){ void Periphery::receiveCpuModbusData(){
if (_cana.isNewMessage(canSpace::MODBUS_DATA_CPU_TO_COMM_MBOX)) { if (_cana.isNewMessage(can_space::MODBUS_DATA_CPU_TO_COMM_MBOX)) {
_cana.receiveMsg(canSpace::MODBUS_DATA_CPU_TO_COMM_MBOX, _message); _cana.receiveMsg(can_space::MODBUS_DATA_CPU_TO_COMM_MBOX, _message);
WEINBUS::WeinbusTableRegister reg; WEINBUS::WeinbusTableRegister reg;

@ -29,7 +29,6 @@ public:
void receiveModbusParameters(); void receiveModbusParameters();
void getModbusConfiguration(); void getModbusConfiguration();
void initModbusTable(); // TODO Must be outside periphery!
void processDigitalInput(); void processDigitalInput();
void processDigitalOutput(); void processDigitalOutput();
@ -38,14 +37,14 @@ public:
void receiveCpuModbusData(); void receiveCpuModbusData();
private: private:
canSpace::CAN _cana; can_space::CAN _cana;
interface::DigitalIO _digitalIO; interface::DigitalIO _digitalIO;
Uint16* _zone6_ptr; Uint16* _zone6_ptr;
DSP28335::SCIB _scib; DSP28335::SCIB _scib;
SoftwareVersion _softVersion; SoftwareVersion _softVersion;
canSpace::CANMessage _message; can_space::CANMessage _message;
bool _modbusInitFlag; bool _modbusInitFlag;
bool _error; bool _error;
uint16_t _modbusRegCounter; uint16_t _modbusRegCounter;

@ -1,10 +1,8 @@
#include "CAN.h" #include "CAN.h"
#include "DSP2833x_Device.h"
#include "DSP2833x_ECan.h"
namespace canSpace { namespace can_space {
void CAN::transmitMsg(Uint16 boxNumber, const CANMessage& message){ void CAN::transmitMsg(Uint16 boxNumber, const CANMessage& message, bool writeDataLength){
if (boxNumber > 31) return; if (boxNumber > 31) return;
Uint32 mboxControl(0); Uint32 mboxControl(0);
@ -16,7 +14,7 @@ void CAN::transmitMsg(Uint16 boxNumber, const CANMessage& message){
p_MailBox->MDH.all = 0x0; p_MailBox->MDH.all = 0x0;
p_MailBox->MDL.all = 0x0; p_MailBox->MDL.all = 0x0;
// p_MailBox->MSGCTRL.bit.DLC = message.dataLength; if (writeDataLength) p_MailBox->MSGCTRL.bit.DLC = message.dataLength;
p_MailBox->MDH.all = message.mdh.all; p_MailBox->MDH.all = message.mdh.all;
p_MailBox->MDL.all = message.mdl.all; p_MailBox->MDL.all = message.mdl.all;
@ -36,7 +34,7 @@ void CAN::transmitMsg(Uint16 boxNumber, const CANMessage& message){
} }
void CAN::transmitMsg(Uint16 boxNumber, const Uint64& message){ void CAN::transmitMsg(Uint16 boxNumber, const Uint64& message, const Uint16 dlc){
if (boxNumber > 31) return; if (boxNumber > 31) return;
Uint32 mboxControl(0); Uint32 mboxControl(0);
@ -47,7 +45,8 @@ void CAN::transmitMsg(Uint16 boxNumber, const Uint64& message){
p_MailBox->MDH.all = 0x0; p_MailBox->MDH.all = 0x0;
p_MailBox->MDL.all = 0x0; p_MailBox->MDL.all = 0x0;
p_MailBox->MSGCTRL.bit.DLC = dlc;
p_MailBox->MDH.all = message >> 32; p_MailBox->MDH.all = message >> 32;
p_MailBox->MDL.all = message; p_MailBox->MDL.all = message;
@ -67,7 +66,7 @@ void CAN::transmitMsg(Uint16 boxNumber, const Uint64& message){
} }
void CAN::transmitMsg(Uint16 boxNumber, const Uint64& message, const Uint16 dlc){ void CAN::transmitMsg(Uint16 boxNumber, const Uint64& message){
if (boxNumber > 31) return; if (boxNumber > 31) return;
Uint32 mboxControl(0); Uint32 mboxControl(0);
@ -78,8 +77,7 @@ void CAN::transmitMsg(Uint16 boxNumber, const Uint64& message, const Uint16 dlc)
p_MailBox->MDH.all = 0x0; p_MailBox->MDH.all = 0x0;
p_MailBox->MDL.all = 0x0; p_MailBox->MDL.all = 0x0;
p_MailBox->MSGCTRL.bit.DLC = dlc;
p_MailBox->MDH.all = message >> 32; p_MailBox->MDH.all = message >> 32;
p_MailBox->MDL.all = message; p_MailBox->MDL.all = message;
@ -111,7 +109,7 @@ void CAN::updateTXMessage(Uint16 boxNumber, const CANMessage& message){ // TODO
// Set change data request (CDR bit + MBOX number) // Set change data request (CDR bit + MBOX number)
p_CanRegs_->CANMC.all |= (128 + boxNumber); p_CanRegs_->CANMC.all |= (128 + boxNumber);
// TODO Add lenght changing? p_MailBox->MSGCTRL.bit.DLC = message.dataLength;
p_MailBox->MDL.all = message.mdl.all; p_MailBox->MDL.all = message.mdl.all;
p_MailBox->MDH.all = message.mdh.all; p_MailBox->MDH.all = message.mdh.all;
@ -121,28 +119,6 @@ void CAN::updateTXMessage(Uint16 boxNumber, const CANMessage& message){ // TODO
} }
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,
// reset transmission in that mailbox using the TRRn bit and set the TRSn bit again. The new data is
// then transmitted.
if (boxNumber > 31) return;
volatile MBOX* p_MailBox(0);
p_MailBox = &(p_CanMBoxes_->MBOX0) + boxNumber;
// Set change data request (CDR bit + MBOX number)
p_CanRegs_->CANMC.all |= (128 + boxNumber);
// TODO Add lenght changing?
p_MailBox->MDL.all = message;
p_MailBox->MDH.all = message >> 32;
CanShadow_.CANMC.all = p_CanRegs_->CANMC.all;
CanShadow_.CANMC.bit.CDR = 0;
p_CanRegs_->CANMC.all = CanShadow_.CANMC.all;
}
void CAN::sendRemoteRequest(Uint16 boxNumber){ void CAN::sendRemoteRequest(Uint16 boxNumber){
if (boxNumber > 31) return; if (boxNumber > 31) return;
@ -171,7 +147,7 @@ void CAN::sendRemoteRequest(Uint16 boxNumber){
} }
int16 CAN::receiveMsg(Uint16 boxNumber, CANMessage& rxMessage){ // TODO faults just return -1 int16 CAN::receiveMsg(Uint16 boxNumber, CANMessage& rxMessage){
if (boxNumber > 31) { return -1; } if (boxNumber > 31) { return -1; }
Uint32 mboxControl(0); Uint32 mboxControl(0);
@ -203,38 +179,6 @@ int16 CAN::receiveMsg(Uint16 boxNumber, CANMessage& rxMessage){ // TODO faults j
} }
int16 CAN::receiveMsg(Uint16 boxNumber, Uint64& rxMessage){ // TODO faults just return -1
if (boxNumber > 31) { return -1; }
Uint32 mboxControl(0);
mboxControl = 1ul << boxNumber;
volatile MBOX* p_MailBox(0);
p_MailBox = &(p_CanMBoxes_->MBOX0) + boxNumber;
bool isNewMessageInBox = p_CanRegs_->CANRMP.all & mboxControl;
if(!isNewMessageInBox) return -2;
p_CanRegs_->CANRMP.all &= mboxControl;
rxMessage = p_MailBox->MDH.all;
rxMessage = rxMessage << 32;
rxMessage = p_MailBox->MDL.all;
bool newMessage;
bool lostMessage;
newMessage = p_CanRegs_->CANRMP.all & mboxControl;
lostMessage = p_CanRegs_->CANRML.all & mboxControl;
if(newMessage || lostMessage) {
return -3;
}
return 0;
}
bool CAN::isNewMessage(){ bool CAN::isNewMessage(){
return static_cast<bool>(p_CanRegs_->CANRMP.all); return static_cast<bool>(p_CanRegs_->CANRMP.all);
} }
@ -282,4 +226,4 @@ void CAN::clearTimeOutFlag(Uint16 boxNumber){
} }
} // canSpace } // can_space

@ -3,7 +3,7 @@
#include "F28335/DSP28x_Project.h" #include "F28335/DSP28x_Project.h"
#include "F28335/DSP2833x_Device.h" #include "F28335/DSP2833x_Device.h"
namespace canSpace { namespace can_space {
enum CAN_VARIANT{ enum CAN_VARIANT{
CANA, CANA,
@ -113,14 +113,12 @@ public:
bool isNewMessage(); bool isNewMessage();
bool isNewMessage(Uint16 boxNumber); bool isNewMessage(Uint16 boxNumber);
void transmitMsg(Uint16 boxNumber, const CANMessage& message); void transmitMsg(Uint16 boxNumber, const CANMessage& message, bool writeDataLength = false);
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 transmitMsg(Uint16 boxNumber, const Uint64& message);
void updateTXMessage(Uint16 boxNumber, const CANMessage& message); void updateTXMessage(Uint16 boxNumber, const CANMessage& 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, Uint64& rxMessage);
void enableTimeOutControl(Uint16 boxNumber); void enableTimeOutControl(Uint16 boxNumber);
void disableTimeOutControl(Uint16 boxNumber); void disableTimeOutControl(Uint16 boxNumber);
@ -139,4 +137,4 @@ private:
}; };
} // canSpace } // can_space

@ -1,7 +1,7 @@
#include "CAN.h" #include "CAN.h"
#include "DSP2833x_ECan.h" #include "DSP2833x_ECan.h"
namespace canSpace { namespace can_space {
CAN::CAN(CAN_VARIANT canVariant) : CAN::CAN(CAN_VARIANT canVariant) :
canPort(canVariant), canPort(canVariant),
@ -315,4 +315,4 @@ void CAN::disableTimeOutControl(Uint16 boxNumber){
} }
} //canSpace } //can_space

@ -1,6 +1,6 @@
#pragma once #pragma once
namespace canSpace { namespace can_space {
enum MBOX_NUMBERS { enum MBOX_NUMBERS {
MODBUS_SETTINGS_MBOX = 0, MODBUS_SETTINGS_MBOX = 0,

@ -6,7 +6,6 @@ namespace SYSCTRL {
void initModbusTable(Periphery& periphery){ void initModbusTable(Periphery& periphery){
periphery.modbusRTU.setInputRegsAddr(400); periphery.modbusRTU.setInputRegsAddr(400);
periphery.modbusRTU.setOutputRegsAddr(400);
periphery.modbusRTU.addInputReg(0, test_float_reg); periphery.modbusRTU.addInputReg(0, test_float_reg);
periphery.modbusRTU.addInputReg(1, test_int16_reg); periphery.modbusRTU.addInputReg(1, test_int16_reg);
@ -14,6 +13,9 @@ void initModbusTable(Periphery& periphery){
periphery.modbusRTU.addInputReg(3, test_int32_reg); periphery.modbusRTU.addInputReg(3, test_int32_reg);
periphery.modbusRTU.addInputReg(4, test_uint32_reg); periphery.modbusRTU.addInputReg(4, test_uint32_reg);
periphery.modbusRTU.setOutputRegsAddr(400);
periphery.modbusRTU.addOutputReg(0, test_float_reg); periphery.modbusRTU.addOutputReg(0, test_float_reg);
periphery.modbusRTU.addOutputReg(1, test_int16_reg); periphery.modbusRTU.addOutputReg(1, test_int16_reg);
periphery.modbusRTU.addOutputReg(2, test_uint16_reg); periphery.modbusRTU.addOutputReg(2, test_uint16_reg);

@ -103,10 +103,7 @@ void idle_loop()
infCounter++; infCounter++;
periphery.receiveModbusParameters(); periphery.receiveModbusParameters();
//
// MODBUS RTU HMI Service
//
periphery.modbusRTU.execute(); periphery.modbusRTU.execute();
periphery.receiveCpuModbusData(); periphery.receiveCpuModbusData();

Loading…
Cancel
Save