// 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.modbusRTU.test_init_hmi_buffers(); //---------------------------------------------------------------------------------------- // 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(); } //<> }//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; } // }//