diff --git a/Periphery.cpp b/Periphery.cpp index fe7199c..80de701 100644 --- a/Periphery.cpp +++ b/Periphery.cpp @@ -1,7 +1,7 @@ #include "Periphery.h" Periphery::Periphery() : - _canb(canSpace::CANA), + _cana(canSpace::CANA), _digitalIO(), _zone6_ptr(reinterpret_cast(0x100000)), _scib(ScibRegs), @@ -23,25 +23,25 @@ Periphery::Periphery() : void Periphery::config(){ //--------------------------------------Init CAN interface---------------------------------------------------------- - _canb.initGpio(); - _canb.config(); + _cana.initGpio(); + _cana.config(); // Data Frame MBOX - _canb.configRxMBox(canSpace::MODBUS_SETTINGS_MBOX, canSpace::MsgID(0x0), canSpace::MsgCtrlReg(0x6)); // Modbus settings - _canb.configTxMBox(canSpace::MODBUS_DATA_COMM_TO_CPU_MBOX, canSpace::MsgID(0x29), canSpace::MsgCtrlReg(0x28)); // Send Modbus data to CPU - _canb.configRxMBox(canSpace::MODBUS_DATA_CPU_TO_COMM_MBOX, canSpace::MsgID(0x28), canSpace::MsgCtrlReg(0x8)); // Receive Modbus data from CPU - _canb.configTxMBox(canSpace::DIGITAL_INPUT_MBOX, canSpace::MsgID(0x30), canSpace::MsgCtrlReg(0x2)); // Receive DI - _canb.configRxMBox(canSpace::DIGITAL_OUTPUT_MBOX, canSpace::MsgID(0x31), canSpace::MsgCtrlReg(0x2)); // Send DO + _cana.configRxMBox(canSpace::MODBUS_SETTINGS_MBOX, canSpace::MsgID(0x0), canSpace::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.configRxMBox(canSpace::MODBUS_DATA_CPU_TO_COMM_MBOX, canSpace::MsgID(0x28), canSpace::MsgCtrlReg(0x8)); // Receive Modbus data from CPU + _cana.configTxMBox(canSpace::DIGITAL_INPUT_MBOX, canSpace::MsgID(0x30), canSpace::MsgCtrlReg(0x2)); // Receive DI + _cana.configRxMBox(canSpace::DIGITAL_OUTPUT_MBOX, canSpace::MsgID(0x31), canSpace::MsgCtrlReg(0x2)); // Send DO // Remote frame MBOX - // _canb.configRxMBox(canSpace::MODBUS_SETTINGS_MBOX, canSpace::MsgID(0x0), canSpace::MsgCtrlReg(0x10)); - _canb.configTxMBox(canSpace::COMM_VERSION_MBOX, canSpace::MsgID(0x1, false, true), canSpace::MsgCtrlReg(0x4)); + // _cana.configRxMBox(canSpace::MODBUS_SETTINGS_MBOX, canSpace::MsgID(0x0), canSpace::MsgCtrlReg(0x10)); + _cana.configTxMBox(canSpace::COMM_VERSION_MBOX, canSpace::MsgID(0x1, false, true), canSpace::MsgCtrlReg(0x4)); - _canb.enableTimeOutControl(canSpace::MODBUS_SETTINGS_MBOX); - _canb.setTimeOutValue(canSpace::MODBUS_SETTINGS_MBOX, 1000); + _cana.enableTimeOutControl(canSpace::MODBUS_SETTINGS_MBOX); + _cana.setTimeOutValue(canSpace::MODBUS_SETTINGS_MBOX, 1000); // Interrupts - _canb.configSystemIsr(canSpace::I0EN_ENABLE | + _cana.configSystemIsr(canSpace::I0EN_ENABLE | canSpace::EPIM_ENABLE | canSpace::WLIM_ENABLE | canSpace::AAIM_ENABLE); @@ -84,7 +84,7 @@ void Periphery::updateVersionFPGA(){ _softVersion.CPLD = getVersionFPGA() & 0x3FF; // no more than 1023. (9.9.9) should be limit _message.mdl.word.LOW_WORD = _softVersion.DSP; _message.mdl.word.HI_WORD = _softVersion.CPLD; - _canb.updateTXMessage(canSpace::COMM_VERSION_MBOX, _message); + _cana.updateTXMessage(canSpace::COMM_VERSION_MBOX, _message); } @@ -107,8 +107,8 @@ void Periphery::initModbusTable(){ void Periphery::receiveModbusParameters(){ - if (_canb.isNewMessage(canSpace::MODBUS_SETTINGS_MBOX)) { - _canb.receiveMsg(canSpace::MODBUS_SETTINGS_MBOX, _message); + if (_cana.isNewMessage(canSpace::MODBUS_SETTINGS_MBOX)) { + _cana.receiveMsg(canSpace::MODBUS_SETTINGS_MBOX, _message); MODBUSRTU::modbusConfiguration.node_id = _message.mdl.byte.BYTE0; MODBUSRTU::modbusConfiguration.config.lenght = static_cast(_message.mdl.byte.BYTE1); @@ -123,32 +123,32 @@ void Periphery::receiveModbusParameters(){ void Periphery::getModbusConfiguration(){ - _canb.resetTimeStampCounter(); - _canb.clearTimeOutFlag(canSpace::MODBUS_SETTINGS_MBOX); + _cana.resetTimeStampCounter(); + _cana.clearTimeOutFlag(canSpace::MODBUS_SETTINGS_MBOX); bool requestIsSent = false; - while(!_canb.isNewMessage(canSpace::MODBUS_SETTINGS_MBOX)){ - if(_canb.isTimeOut(canSpace::MODBUS_SETTINGS_MBOX)){ + while(!_cana.isNewMessage(canSpace::MODBUS_SETTINGS_MBOX)){ + if(_cana.isTimeOut(canSpace::MODBUS_SETTINGS_MBOX)){ if (!requestIsSent) { - _canb.resetTimeStampCounter(); - _canb.clearTimeOutFlag(canSpace::MODBUS_SETTINGS_MBOX); + _cana.resetTimeStampCounter(); + _cana.clearTimeOutFlag(canSpace::MODBUS_SETTINGS_MBOX); _message.mdl.word.LOW_WORD = _softVersion.DSP; _message.mdl.word.HI_WORD = _softVersion.CPLD; - _canb.transmitMsg(canSpace::COMM_VERSION_MBOX, _message); + _cana.transmitMsg(canSpace::COMM_VERSION_MBOX, _message); requestIsSent = true; } else{ - _canb.clearTimeOutFlag(canSpace::MODBUS_SETTINGS_MBOX); - _canb.disableTimeOutControl(canSpace::MODBUS_SETTINGS_MBOX); + _cana.clearTimeOutFlag(canSpace::MODBUS_SETTINGS_MBOX); + _cana.disableTimeOutControl(canSpace::MODBUS_SETTINGS_MBOX); _error = true; return; } } } - _canb.receiveMsg(canSpace::MODBUS_SETTINGS_MBOX, _message); + _cana.receiveMsg(canSpace::MODBUS_SETTINGS_MBOX, _message); MODBUSRTU::modbusConfiguration.node_id = _message.mdl.byte.BYTE0; MODBUSRTU::modbusConfiguration.config.lenght = static_cast(_message.mdl.byte.BYTE1); MODBUSRTU::modbusConfiguration.config.baudrate = static_cast(_message.mdl.word.LOW_WORD); @@ -163,13 +163,13 @@ void Periphery::getModbusConfiguration(){ void Periphery::processDigitalInput(){ Uint16 data = 0; _digitalIO.readDigitalIO(data); - _canb.transmitMsg(canSpace::DIGITAL_INPUT_MBOX, (data)); + _cana.transmitMsg(canSpace::DIGITAL_INPUT_MBOX, (data)); } void Periphery::processDigitalOutput(){ - if(_canb.isNewMessage(canSpace::DIGITAL_OUTPUT_MBOX)){ - _canb.receiveMsg(canSpace::DIGITAL_OUTPUT_MBOX, _message); + if(_cana.isNewMessage(canSpace::DIGITAL_OUTPUT_MBOX)){ + _cana.receiveMsg(canSpace::DIGITAL_OUTPUT_MBOX, _message); Uint16 data = _message.mdl.word.LOW_WORD; _digitalIO.writeDigitalIO(data); } @@ -199,13 +199,13 @@ void Periphery::sendModbusDataToCPU(){ _modbusRegCounter++; } - _canb.transmitMsg(canSpace::MODBUS_DATA_COMM_TO_CPU_MBOX, _message); + _cana.transmitMsg(canSpace::MODBUS_DATA_COMM_TO_CPU_MBOX, _message); } void Periphery::receiveCpuModbusData(){ - if (_canb.isNewMessage(canSpace::MODBUS_DATA_CPU_TO_COMM_MBOX)) { - _canb.receiveMsg(canSpace::MODBUS_DATA_CPU_TO_COMM_MBOX, _message); + if (_cana.isNewMessage(canSpace::MODBUS_DATA_CPU_TO_COMM_MBOX)) { + _cana.receiveMsg(canSpace::MODBUS_DATA_CPU_TO_COMM_MBOX, _message); WEINBUS::WeinbusTableRegister reg; diff --git a/Periphery.h b/Periphery.h index afea853..0b75f31 100644 --- a/Periphery.h +++ b/Periphery.h @@ -38,7 +38,7 @@ public: void receiveCpuModbusData(); private: - canSpace::CAN _canb; + canSpace::CAN _cana; interface::DigitalIO _digitalIO; Uint16* _zone6_ptr; diff --git a/SinglePhaseDefaults.h b/SinglePhaseDefaults.h deleted file mode 100644 index 51c9bb8..0000000 --- a/SinglePhaseDefaults.h +++ /dev/null @@ -1,39 +0,0 @@ -/* - * SinglePhaseDefaults.h - * - * Author: Aleksey Gerasimenko - * gerasimenko.aleksey.n@gmail.com - */ - -#ifndef RUDRIVEFRAMEWORK_SINGLEPHASEDEFAULTS_H_ -#define RUDRIVEFRAMEWORK_SINGLEPHASEDEFAULTS_H_ - - - -#define SINGLE_PHASE_PWM_FREQUENCY (uint16_t)500 -#define SINGLE_PHASE_ADC_ISR_QUANTITY (uint16_t)2 -#define SINGLE_PHASE_ADC_ISR_OFFSET_RELATIVE (float)FP_ZERO -#define SINGLE_PHASE_CASCADE_QUANTITY (uint16_t)1 -#define SINGLE_PHASE_CELL_QUANTITY (uint16_t)1 -#define SINGLE_PHASE_CELL_QANTITY_IN_CASCADE_00 (uint16_t)1 -#define SINGLE_PHASE_CELL_QANTITY_IN_CASCADE_01 (uint16_t)0 -#define SINGLE_PHASE_CELL_QANTITY_IN_CASCADE_02 (uint16_t)0 -#define SINGLE_PHASE_CELL_QANTITY_IN_CASCADE_03 (uint16_t)0 -#define SINGLE_PHASE_CELL_QANTITY_IN_CASCADE_04 (uint16_t)0 -#define SINGLE_PHASE_CELL_QANTITY_IN_CASCADE_05 (uint16_t)0 -#define SINGLE_PHASE_CELL_QANTITY_IN_CASCADE_06 (uint16_t)0 -#define SINGLE_PHASE_CELL_QANTITY_IN_CASCADE_07 (uint16_t)0 -#define SINGLE_PHASE_CELL_QANTITY_IN_CASCADE_08 (uint16_t)0 -#define SINGLE_PHASE_CELL_QANTITY_IN_CASCADE_09 (uint16_t)0 -#define SINGLE_PHASE_CELL_QANTITY_IN_CASCADE_10 (uint16_t)0 -#define SINGLE_PHASE_CELL_QANTITY_IN_CASCADE_11 (uint16_t)0 -#define SINGLE_PHASE_CELL_QANTITY_IN_CASCADE_12 (uint16_t)0 -#define SINGLE_PHASE_CELL_QANTITY_IN_CASCADE_13 (uint16_t)0 -#define SINGLE_PHASE_CELL_QANTITY_IN_CASCADE_14 (uint16_t)0 -#define SINGLE_PHASE_CELL_QANTITY_IN_CASCADE_15 (uint16_t)0 -#define SINGLE_PHASE_CELL_QANTITY_IN_CASCADE_16 (uint16_t)0 -#define SINGLE_PHASE_CELL_QANTITY_IN_CASCADE_17 (uint16_t)0 - - - -#endif /* RUDRIVEFRAMEWORK_SINGLEPHASEDEFAULTS_H_ */ diff --git a/System/ModbusTable.cpp b/System/ModbusTable.cpp new file mode 100644 index 0000000..9e2cd05 --- /dev/null +++ b/System/ModbusTable.cpp @@ -0,0 +1,24 @@ +#include "Periphery.h" +#include "SystemVars.h" + +namespace SYSCTRL { + + +void initModbusTable(Periphery& periphery){ + periphery.modbusRTU.setInputRegsAddr(400); + periphery.modbusRTU.setOutputRegsAddr(400); + + periphery.modbusRTU.addInputReg(0, test_float_reg); + periphery.modbusRTU.addInputReg(1, test_int16_reg); + periphery.modbusRTU.addInputReg(2, test_uint16_reg); + periphery.modbusRTU.addInputReg(3, test_int32_reg); + periphery.modbusRTU.addInputReg(4, test_uint32_reg); + + periphery.modbusRTU.addOutputReg(0, test_float_reg); + periphery.modbusRTU.addOutputReg(1, test_int16_reg); + periphery.modbusRTU.addOutputReg(2, test_uint16_reg); + periphery.modbusRTU.addOutputReg(3, test_int32_reg); + periphery.modbusRTU.addOutputReg(4, test_uint32_reg); +} + +} diff --git a/System/SystemContol.h b/System/SystemContol.h new file mode 100644 index 0000000..0fc1ec8 --- /dev/null +++ b/System/SystemContol.h @@ -0,0 +1,10 @@ +#pragma once + +#include "Periphery.h" +#include "System/SystemVars.h" + +namespace SYSCTRL { + + void initModbusTable(Periphery& periphery); + +} diff --git a/System/SystemVars.cpp b/System/SystemVars.cpp new file mode 100644 index 0000000..478d5e6 --- /dev/null +++ b/System/SystemVars.cpp @@ -0,0 +1,10 @@ +#include "System/SystemVars.h" + +namespace SYSCTRL { + + float test_float_reg = 0; + int16_t test_int16_reg = 0; + uint16_t test_uint16_reg = 0; + int32_t test_int32_reg = 0; + uint32_t test_uint32_reg = 0; +} diff --git a/System/SystemVars.h b/System/SystemVars.h new file mode 100644 index 0000000..803a908 --- /dev/null +++ b/System/SystemVars.h @@ -0,0 +1,12 @@ +#pragma once + +#include + +namespace SYSCTRL { + + extern float test_float_reg; + extern int16_t test_int16_reg; + extern uint16_t test_uint16_reg; + extern int32_t test_int32_reg; + extern uint32_t test_uint32_reg; +} diff --git a/main.cpp b/main.cpp index 55bd288..ef0766a 100644 --- a/main.cpp +++ b/main.cpp @@ -11,6 +11,7 @@ // #include "Protocol/CAN_data.h" // #include "Protocol/DigitalIO.h" #include "Periphery.h" +#include "System/SystemContol.h" #include "DSP28335/SCIB.h" #include "DSP28335/SCIBase.h" @@ -79,7 +80,7 @@ void main() periphery.config(); periphery.updateVersionFPGA(); periphery.getModbusConfiguration(); - periphery.initModbusTable(); + SYSCTRL::initModbusTable(periphery); // Enable global Interrupts and higher priority real-time debug events: EINT; // Enable Global interrupt INTM