Put init modbus function outside periphery

feature/Modbus
Oleg 2 weeks ago
parent 6a6ca4cd3e
commit 889280dce5

@ -1,7 +1,7 @@
#include "Periphery.h"
Periphery::Periphery() :
_canb(canSpace::CANA),
_cana(canSpace::CANA),
_digitalIO(),
_zone6_ptr(reinterpret_cast<Uint16*>(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<DSP28335::SCICharLenght>(_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<DSP28335::SCICharLenght>(_message.mdl.byte.BYTE1);
MODBUSRTU::modbusConfiguration.config.baudrate = static_cast<DSP28335::SCIBaudRate>(_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;

@ -38,7 +38,7 @@ public:
void receiveCpuModbusData();
private:
canSpace::CAN _canb;
canSpace::CAN _cana;
interface::DigitalIO _digitalIO;
Uint16* _zone6_ptr;

@ -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_ */

@ -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);
}
}

@ -0,0 +1,10 @@
#pragma once
#include "Periphery.h"
#include "System/SystemVars.h"
namespace SYSCTRL {
void initModbusTable(Periphery& periphery);
}

@ -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;
}

@ -0,0 +1,12 @@
#pragma once
#include <stdint.h>
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;
}

@ -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

Loading…
Cancel
Save