Clean project. Change receiveCpuModbusData function

feature/Modbus
Oleg 3 weeks ago
parent 3abcb43b33
commit 4315b2865d

@ -146,9 +146,9 @@ void Periphery::sendModbusDataToCPU(){
_message.mdh.all = 0; _message.mdh.all = 0;
WEINBUS::WeinbusTableRegister reg; WEINBUS::WeinbusTableRegister reg;
reg = modbusRTU._dataHandler.outputRegisters.get_register_cursor(_modbusRegCounter); reg = modbusRTU.dataHandler.outputRegisters.get_register_cursor(_modbusRegCounter);
if(modbusRTU._dataHandler.outputRegisters.address_range(reg.get_address())){ if(modbusRTU.dataHandler.outputRegisters.address_range(reg.get_address())){
_message.mdl.all = reg.get_address(); _message.mdl.all = reg.get_address();
reg.read(_message.mdh.all); reg.read(_message.mdh.all);
@ -156,7 +156,7 @@ void Periphery::sendModbusDataToCPU(){
} }
else { else {
_modbusRegCounter = 0; _modbusRegCounter = 0;
reg = modbusRTU._dataHandler.outputRegisters.get_register_cursor(_modbusRegCounter); reg = modbusRTU.dataHandler.outputRegisters.get_register_cursor(_modbusRegCounter);
_message.mdl.all = reg.get_address(); _message.mdl.all = reg.get_address();
reg.read(_message.mdh.all); reg.read(_message.mdh.all);
@ -175,7 +175,7 @@ void Periphery::receiveCpuModbusData(){
WEINBUS::WeinbusTableRegister reg; WEINBUS::WeinbusTableRegister reg;
uint32_t addr = _message.mdl.all; uint32_t addr = _message.mdl.all;
reg = modbusRTU._dataHandler.inputRegisters.get_register_cursor(addr - modbusRTU._dataHandler.inputRegisters.get_start_address()); reg = modbusRTU.dataHandler.inputRegisters.get_register_cursor(addr - modbusRTU.dataHandler.inputRegisters.get_start_address());
reg.write_data(_message.mdh.all); reg.write_data(_message.mdh.all);
} }
} }

@ -7,9 +7,13 @@
#include "DSP2833x_Device.h" #include "DSP2833x_Device.h"
#include "DSP28x_Project.h" // Device Headerfile and Examples Include File #include "DSP28x_Project.h" // Device Headerfile and Examples Include File
#include "DSP2833x_Examples.h" #include "DSP2833x_Examples.h"
#include "Protocol/CAN.h" // #include "Protocol/CAN.h"
#include "Protocol/CAN_data.h" // #include "Protocol/CAN_data.h"
#include "Protocol/DigitalIO.h" // #include "Protocol/DigitalIO.h"
#include "Periphery.h"
#include "DSP28335/SCIB.h"
#include "DSP28335/SCIBase.h"
//Functions declarations //Functions declarations
@ -20,29 +24,7 @@ interrupt void cpu_timer1_isr(void);
interrupt void canb_isr(void); interrupt void canb_isr(void);
interrupt void canb_box_isr(void); interrupt void canb_box_isr(void);
canSpace::CAN canTest(canSpace::CANB); Periphery periphery;
interface::DigitalIO digitalIO;
interface::DigitalIODataRegister digitalInputReg;
interface::DigitalIODataRegister digitalOutputReg;
// RX
canSpace::CANMessage DOMessage;
canSpace::CANMessage messageSettings;
canSpace::CANMessage MODBUS_CPU_COMM_Message;
// TX
canSpace::CANMessage DIMessage;
canSpace::CANMessage MODBUS_COMM_CPU_Message;
canSpace::CANMessage SoftVersionMessage;
Uint32 array[25] = {0};
struct SoftwareVersion{
Uint16 DSP;
Uint16 CPLD;
};
SoftwareVersion softVersion = { .DSP = 101, .CPLD = 202 };
volatile Uint16 infCounter = 0; volatile Uint16 infCounter = 0;
volatile Uint16 canISRcounter = 0; volatile Uint16 canISRcounter = 0;
@ -57,6 +39,7 @@ volatile bool sendRemote = false;
Uint16 modbusInit = 0; Uint16 modbusInit = 0;
int32 testVar = 0; int32 testVar = 0;
float test = 55;
void main() void main()
{ {
@ -93,33 +76,15 @@ void main()
PieCtrlRegs.PIEIER9.bit.INTx7 = 1; // from 5 to 8 PieCtrlRegs.PIEIER9.bit.INTx7 = 1; // from 5 to 8
PieCtrlRegs.PIEIER9.bit.INTx8 = 1; PieCtrlRegs.PIEIER9.bit.INTx8 = 1;
canTest.initGpio(); periphery.config();
canTest.config(); periphery.init_modbus_table();
canTest.configTxMBox(canSpace::DIGITAL_INPUT_MBOX, canSpace::MsgID(0x30), canSpace::MsgCtrlReg(0x3));
DIMessage.dataLength = 3;
DIMessage.mdl.byte.BYTE0 = 0x11;
DIMessage.mdl.byte.BYTE1 = 0x22;
DIMessage.mdl.byte.BYTE2 = 0x33;
MODBUS_COMM_CPU_Message.dataLength = 6;
MODBUS_COMM_CPU_Message.mdl.byte.BYTE0 = 0xA;
MODBUS_COMM_CPU_Message.mdl.byte.BYTE1 = 0xB;
MODBUS_COMM_CPU_Message.mdl.byte.BYTE2 = 0xC;
MODBUS_COMM_CPU_Message.mdl.byte.BYTE3 = 0xD;
MODBUS_COMM_CPU_Message.mdh.byte.BYTE4 = 0xE;
MODBUS_COMM_CPU_Message.mdh.byte.BYTE5 = 0xF;
SoftVersionMessage.dataLength = 2;
SoftVersionMessage.mdl.byte.BYTE0 = softVersion.DSP;
SoftVersionMessage.mdl.byte.BYTE0 = softVersion.CPLD;
digitalIO.setup((Uint16*)0x4000);
// Enable global Interrupts and higher priority real-time debug events: // Enable global Interrupts and higher priority real-time debug events:
EINT; // Enable Global interrupt INTM EINT; // Enable Global interrupt INTM
ERTM; // Enable Global realtime interrupt DBGM ERTM; // Enable Global realtime interrupt DBGM
periphery.updateVersionFPGA();
CpuTimer0.RegsAddr->TCR.bit.TSS = 0; CpuTimer0.RegsAddr->TCR.bit.TSS = 0;
CpuTimer1.RegsAddr->TCR.bit.TSS = 0; CpuTimer1.RegsAddr->TCR.bit.TSS = 0;
@ -135,19 +100,20 @@ void idle_loop()
{ {
infCounter++; infCounter++;
// ожидать получения данных при remote frame if (!periphery.isModbusInit()){
// get cpld version with xintf here periphery.receiveModbusParameters();
// if (init){ // modbus_port.configure(modbus_port_configuration);
// init = false; }
// // в main положить
// canTest.updateTXMessage(canSpace::COMM_VERSION_MBOX, SoftVersionMessage);
// }
// if (canTest.isNewMessage(canSpace::MODBUS_SETTINGS_MBOX)){ //
// canTest.receiveMsg(canSpace::MODBUS_SETTINGS_MBOX, messageSettings); // MODBUS RTU HMI Service
// modbusInit++; //
// } if (periphery.isModbusInit()){
periphery.modbusRTU.execute();
}
periphery.receiveCpuModbusData();
}//end while }//end while
}//end idle_loop() }//end idle_loop()
@ -155,15 +121,8 @@ void idle_loop()
interrupt void cpu_timer0_isr(void) interrupt void cpu_timer0_isr(void)
{ {
CpuTimer0.InterruptCount++; periphery.processDigitalOutput();
// if(canTest.isNewMessage()){ periphery.sendModbusDataToCPU();
// canTest.receiveMsg(canSpace::DIGITAL_OUTPUT_MBOX, DOMessage);
// canTest.receiveMsg(canSpace::MODBUS_DATA_CPU_TO_COMM_MBOX, MODBUS_CPU_COMM_Message);
// testCounter++;
// }
// digitalOutputReg.all = digitalOutputReg.all;
// digitalIO.writeDigitalIO(digitalOutputReg.all);
PieCtrlRegs.PIEACK.all |= PIEACK_GROUP1; PieCtrlRegs.PIEACK.all |= PIEACK_GROUP1;
}//end }//end
@ -172,10 +131,7 @@ interrupt void cpu_timer0_isr(void)
interrupt void cpu_timer1_isr(){ interrupt void cpu_timer1_isr(){
CpuTimer1.InterruptCount++; CpuTimer1.InterruptCount++;
// digitalIO.readDigitalIO(DIMessage.mdl.all); periphery.processDigitalInput();
// digitalIO.readDigitalIO(digitalInputReg.all);
// DIMessage.mdl.all = digitalInputReg.all;
canTest.transmitMsg(canSpace::DIGITAL_INPUT_MBOX, DIMessage);
} }
@ -227,3 +183,19 @@ interrupt void canb_box_isr(void){
PieCtrlRegs.PIEACK.all |= PIEACK_GROUP9; PieCtrlRegs.PIEACK.all |= PIEACK_GROUP9;
} }
void clear_array(uint16_t *pointer, uint16_t sizearray)
{
static uint16_t *p_array = 0;
static uint16_t size_array = 0;
p_array = pointer;
size_array = sizearray;
while(size_array--)
{
*p_array++ = 0;
}
//
}//

@ -1,308 +0,0 @@
// Some comments about author
#include <stdint.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "DSP2833x_Device.h"
#include "DSP28x_Project.h" // Device Headerfile and Examples Include File
#include "DSP2833x_Examples.h"
// #include "Protocol/CAN.h"
// #include "Protocol/CAN_data.h"
// #include "Protocol/DigitalIO.h"
#include "Periphery.h"
// #include "DSP28335/GPIO.h"
#include "DSP28335/SCIB.h"
#include "DSP28335/SCIBase.h"
// #include "MODBUSRTU/ModbusRTUCRC.h"
// #include "MODBUSRTU/ModbusRTUDefines.h"
// #include "MODBUSRTU/ModbusRTUTransceiver.h"
// #include "MODBUSRTU/ModbusRTUVariant.h"
// #include "MODBUSRTU/ModbusRTUTransceiverBase.h"
// #include "DSP28335/MeasureTimeInterval.h"
// #include "WEINBUS/HeaderWeinbus.h"
//Functions declarations
void idle_loop(void);
interrupt void cpu_timer0_isr(void);
interrupt void cpu_timer1_isr(void);
interrupt void canb_isr(void);
interrupt void canb_box_isr(void);
Periphery periphery;
//----------------------------------------------------------------------------------------
// DSP28335::SCISetup SCIbSetup;
// DSP28335::SCIB scib(ScibRegs);
// DSP28335::MeasureTimeInterval interval_measure(CpuTimer2);
// MODBUS RTU - PORT & HMI
// MODBUSRTU::ModbusRTUTransceiverSetup modbus;
// MODBUSRTU::ModbusRTUCRC crc;
// MODBUSRTU::ModbusRTUTransceiver modbus_port(scib, interval_measure, crc);
// WEINBUS::WeinbusSlave hmi(crc);
// MODBUSRTU::ModbusRTUTransceiverConfiguration modbus_port_configuration;
// // Registers to testing HMI interface
// WEINBUS::REGISTER_32 test_hmi_float_reg_400 = WEINBUS::REGISTER_32(0);
// WEINBUS::REGISTER_32 test_hmi_float_reg_401 = WEINBUS::REGISTER_32(0);
// WEINBUS::REGISTER_32 test_hmi_float_reg_402 = WEINBUS::REGISTER_32(0);
// WEINBUS::REGISTER_32 test_hmi_float_reg_403 = WEINBUS::REGISTER_32(0);
// WEINBUS::REGISTER_32 test_hmi_float_reg_404 = WEINBUS::REGISTER_32(0);
// //<>
// void test_init_hmi_buffers();
void clear_array(uint16_t *pointer, uint16_t sizearray);
//----------------------------------------------------------------------------------------
volatile Uint16 infCounter = 0;
volatile Uint16 canISRcounter = 0;
volatile Uint16 canBoxISRcounter = 0;
volatile Uint16 testCounter = 0;
volatile bool init = true;
volatile bool startTX = false;
volatile bool update = false;
volatile bool sendRemote = false;
Uint16 modbusInit = 0;
int32 testVar = 0;
float test = 55;
void main()
{
ServiceDog();
DisableDog();
InitSysCtrl();
DINT;
InitPieCtrl();
IER = 0x0000;
IFR = 0x0000;
InitPieVectTable();
EALLOW;
PieVectTable.TINT0 = &cpu_timer0_isr;
PieVectTable.XINT13 = &cpu_timer1_isr;
PieVectTable.ECAN0INTB = &canb_isr;
PieVectTable.ECAN1INTB = &canb_box_isr;
EDIS;
InitCpuTimers();
ConfigCpuTimer(&CpuTimer0, 150, 1000); // 1ms
ConfigCpuTimer(&CpuTimer1, 150, 5000); // 5ms
IER |= M_INT1; // Enable CPU Interrupt 1
IER |= M_INT9; // Enable CPU Interrupt 9
IER |= M_INT13; // Enable CPU Interrupt 13
PieCtrlRegs.PIEIER1.bit.INTx7 = 1;
PieCtrlRegs.PIEIER9.bit.INTx7 = 1; // from 5 to 8
PieCtrlRegs.PIEIER9.bit.INTx8 = 1;
periphery.config();
periphery.init_modbus_table();
//----------------------------------------------------------------------------------------
// SCIbSetup.config.baudrate = SCIB_BAUDRATE_DEFAULT;
// SCIbSetup.config.parity = SCIB_PARITY_DEFAULT;
// SCIbSetup.config.stopbits = SCIB_STOPBITS_DEFAULT;
// SCIbSetup.config.lenght = SCIB_LENGHT_DEFAULT;
// SCIbSetup.gpio_setup = SCIB_GPIO_SETUP_DEFAULT;
// modbus.gpio_re_de_setup = &DSP28335::GPIO::gpio_scib_re_de_setup;
// modbus.gpio_driver_enable = &DSP28335::GPIO::gpio_scib_re_de_set;
// modbus.gpio_receiver_enable = &DSP28335::GPIO::gpio_scib_re_de_clear;
// scib.setup(SCIbSetup);
// interval_measure.set_magic((Uint32)0);
// interval_measure.reset();
// modbus_port.setup(modbus);
//----------------------------------------------------------------------------------------
// Enable global Interrupts and higher priority real-time debug events:
EINT; // Enable Global interrupt INTM
ERTM; // Enable Global realtime interrupt DBGM
periphery.updateVersionFPGA();
//----------------------------------------------------------------------------------------
// MODBUS RTU
//
// modbus_port_configuration.node_id = 0x5;
// modbus_port_configuration.config.baudrate = DSP28335::BR9600;
// modbus_port_configuration.config.parity = DSP28335::NO;
// modbus_port_configuration.config.stopbits = DSP28335::ONE;
// modbus_port_configuration.config.lenght = DSP28335::LEN8;
//
// test_init_hmi_buffers();
// periphery.test_init_hmi_buffers();
// modbus_port.configure(modbus_port_configuration);
// clear_array((uint16_t *)hmi.rxStack, sizeof(hmi.rxStack)/sizeof(uint16_t));
// clear_array((uint16_t *)hmi.txStack, sizeof(hmi.txStack)/sizeof(uint16_t));
// modbus_port.setRXBuffer((uint16_t*)hmi.rxStack, &hmi.rxLength);
// modbus_port.setTXBuffer((uint16_t*)hmi.txStack, &hmi.txLength);
// periphery.setModbusBuffers();
// periphery.addInputRegFloat(5, test);
// interval_measure.set_magic(19);
//----------------------------------------------------------------------------------------
CpuTimer0.RegsAddr->TCR.bit.TSS = 0;
CpuTimer1.RegsAddr->TCR.bit.TSS = 0;
idle_loop();
//
}//end main()
//
//
void idle_loop()
{
while (true)
{
infCounter++;
if (!periphery.isModbusInit()){
periphery.receiveModbusParameters();
// modbus_port.configure(modbus_port_configuration);
}
//
// MODBUS RTU HMI Service
//
if (periphery.isModbusInit()){
periphery.modbusRTU.execute();
}
periphery.receiveCpuModbusData();
//<>
}//end while
}//end idle_loop()
interrupt void cpu_timer0_isr(void)
{
periphery.processDigitalOutput();
periphery.sendModbusDataToCPU();
PieCtrlRegs.PIEACK.all |= PIEACK_GROUP1;
}//end
interrupt void cpu_timer1_isr(){
CpuTimer1.InterruptCount++;
periphery.processDigitalInput();
}
interrupt void canb_isr(void){
canISRcounter++;
CANGIF0_REG CANGIF0_SHADOW;
volatile Uint32 resetBit;
CANGIF0_SHADOW.all = ECanbRegs.CANGIF0.all;
if (CANGIF0_SHADOW.bit.WLIF0){
resetBit = 256;
ECanbRegs.CANGIF0.all = 256ul;
}
if (CANGIF0_SHADOW.bit.EPIF0){
ECanbRegs.CANGIF0.all = 528ul;
}
PieCtrlRegs.PIEACK.all |= PIEACK_GROUP9;
}
interrupt void canb_box_isr(void){
canBoxISRcounter++;
// Just example
//
// volatile Uint32 boxNumberIsr;
// boxNumberIsr = ECanbRegs.CANGIF1.bit.MIV1;
// CANRMP_REG temp;
// temp.all = 0;
// temp.all = 1ul << 27;
// ECanbRegs.CANRMP.all = temp.all;
// MODBUS_COMM_CPU_Message27.mdh.all = ECanbMboxes.MBOX27.MDH.all;
// MODBUS_COMM_CPU_Message27.mdl.all = ECanbMboxes.MBOX27.MDL.all;
// temp.all = ECanbRegs.CANRMP.all;
// if (temp.bit.RMP25){
// temp.all = 1ul << 25;
// ECanbRegs.CANRMP.all = temp.all;
// MODBUS_COMM_CPU_Message25.mdh.all = ECanbMboxes.MBOX25.MDH.all;
// MODBUS_COMM_CPU_Message25.mdl.all = ECanbMboxes.MBOX25.MDL.all;
// }
PieCtrlRegs.PIEACK.all |= PIEACK_GROUP9;
}
// void test_init_hmi_buffers()
// {
// //
// // hmi writeable registers
// hmi.inputRegisters.set(WEINBUS::INPUTREGISTERS, 400);
// hmi.inputRegisters.add( 0, &test_hmi_float_reg_400.f);
// hmi.inputRegisters.add( 1, &(float&)test_hmi_float_reg_401.f);
// hmi.inputRegisters.add( 2, &(float&)test_hmi_float_reg_402.f);
// hmi.inputRegisters.add( 3, &(float&)test_hmi_float_reg_403.f);
// hmi.inputRegisters.add( 4, &(float&)test_hmi_float_reg_404.f);
// //
// // hmi readable registers
// hmi.outputRegisters.set(WEINBUS::OUTPUTREGISTERS, 400);
// hmi.outputRegisters.add( 0 , &(float&)test_hmi_float_reg_400.f);
// hmi.outputRegisters.add( 1, &(float&)test_hmi_float_reg_401.f);
// hmi.outputRegisters.add( 2, &(float&)test_hmi_float_reg_402.f);
// hmi.outputRegisters.add( 3, &(float&)test_hmi_float_reg_403.f);
// hmi.outputRegisters.add( 4, &(float&)test_hmi_float_reg_404.f);
// //
// }//
// //
void clear_array(uint16_t *pointer, uint16_t sizearray)
{
static uint16_t *p_array = 0;
static uint16_t size_array = 0;
p_array = pointer;
size_array = sizearray;
while(size_array--)
{
*p_array++ = 0;
}
//
}//
Loading…
Cancel
Save