diff --git a/Periphery.cpp b/Periphery.cpp index 7d1e3c6..4f84977 100644 --- a/Periphery.cpp +++ b/Periphery.cpp @@ -146,9 +146,9 @@ void Periphery::sendModbusDataToCPU(){ _message.mdh.all = 0; 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(); reg.read(_message.mdh.all); @@ -156,7 +156,7 @@ void Periphery::sendModbusDataToCPU(){ } else { _modbusRegCounter = 0; - reg = modbusRTU._dataHandler.outputRegisters.get_register_cursor(_modbusRegCounter); + reg = modbusRTU.dataHandler.outputRegisters.get_register_cursor(_modbusRegCounter); _message.mdl.all = reg.get_address(); reg.read(_message.mdh.all); @@ -175,7 +175,7 @@ void Periphery::receiveCpuModbusData(){ WEINBUS::WeinbusTableRegister reg; 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); } } diff --git a/main.cpp b/main.cpp index 896cd93..8615d55 100644 --- a/main.cpp +++ b/main.cpp @@ -7,9 +7,13 @@ #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 "Protocol/CAN.h" +// #include "Protocol/CAN_data.h" +// #include "Protocol/DigitalIO.h" +#include "Periphery.h" + +#include "DSP28335/SCIB.h" +#include "DSP28335/SCIBase.h" //Functions declarations @@ -20,29 +24,7 @@ interrupt void cpu_timer1_isr(void); interrupt void canb_isr(void); interrupt void canb_box_isr(void); -canSpace::CAN canTest(canSpace::CANB); - -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 }; +Periphery periphery; volatile Uint16 infCounter = 0; volatile Uint16 canISRcounter = 0; @@ -57,6 +39,7 @@ volatile bool sendRemote = false; Uint16 modbusInit = 0; int32 testVar = 0; +float test = 55; void main() { @@ -93,33 +76,15 @@ void main() PieCtrlRegs.PIEIER9.bit.INTx7 = 1; // from 5 to 8 PieCtrlRegs.PIEIER9.bit.INTx8 = 1; - canTest.initGpio(); - canTest.config(); - 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); + periphery.config(); + periphery.init_modbus_table(); // Enable global Interrupts and higher priority real-time debug events: EINT; // Enable Global interrupt INTM ERTM; // Enable Global realtime interrupt DBGM + periphery.updateVersionFPGA(); + CpuTimer0.RegsAddr->TCR.bit.TSS = 0; CpuTimer1.RegsAddr->TCR.bit.TSS = 0; @@ -135,19 +100,20 @@ void idle_loop() { infCounter++; - // ожидать получения данных при remote frame - // get cpld version with xintf here - // if (init){ - // init = false; - // // в main положить - // canTest.updateTXMessage(canSpace::COMM_VERSION_MBOX, SoftVersionMessage); - // } + if (!periphery.isModbusInit()){ + periphery.receiveModbusParameters(); + // modbus_port.configure(modbus_port_configuration); + } - // if (canTest.isNewMessage(canSpace::MODBUS_SETTINGS_MBOX)){ - // canTest.receiveMsg(canSpace::MODBUS_SETTINGS_MBOX, messageSettings); - // modbusInit++; - // } + // + // MODBUS RTU HMI Service + // + if (periphery.isModbusInit()){ + periphery.modbusRTU.execute(); + } + periphery.receiveCpuModbusData(); + }//end while }//end idle_loop() @@ -155,15 +121,8 @@ void idle_loop() interrupt void cpu_timer0_isr(void) { - CpuTimer0.InterruptCount++; - // if(canTest.isNewMessage()){ - // 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); + periphery.processDigitalOutput(); + periphery.sendModbusDataToCPU(); PieCtrlRegs.PIEACK.all |= PIEACK_GROUP1; }//end @@ -172,10 +131,7 @@ interrupt void cpu_timer0_isr(void) interrupt void cpu_timer1_isr(){ CpuTimer1.InterruptCount++; - // digitalIO.readDigitalIO(DIMessage.mdl.all); - // digitalIO.readDigitalIO(digitalInputReg.all); - // DIMessage.mdl.all = digitalInputReg.all; - canTest.transmitMsg(canSpace::DIGITAL_INPUT_MBOX, DIMessage); + periphery.processDigitalInput(); } @@ -227,3 +183,19 @@ interrupt void canb_box_isr(void){ 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; + } + // +}// diff --git a/main2.cpp b/main2.cpp deleted file mode 100644 index 240eebe..0000000 --- a/main2.cpp +++ /dev/null @@ -1,308 +0,0 @@ -// Some comments about author -#include -#include -#include -#include - -#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; - } - // -}//