|
|
|
|
@ -9,6 +9,10 @@
|
|
|
|
|
#include "uart.h"
|
|
|
|
|
#include "modbus.h"
|
|
|
|
|
|
|
|
|
|
volatile uint32_t inputEdgesBoth;
|
|
|
|
|
volatile uint32_t inputEdgesFalling;
|
|
|
|
|
volatile uint32_t inputEdgesRising;
|
|
|
|
|
|
|
|
|
|
// Timer0
|
|
|
|
|
// 1ms IRQ
|
|
|
|
|
// Used for millis() timing
|
|
|
|
|
@ -35,9 +39,6 @@ void modbusGet(void) {
|
|
|
|
|
case fcPresetSingleRegister:
|
|
|
|
|
case fcPresetMultipleRegisters:
|
|
|
|
|
case fcReadHoldingRegisters:
|
|
|
|
|
//;
|
|
|
|
|
//uint16_t test;
|
|
|
|
|
//modbusExchangeRegisters(&test,0,1);
|
|
|
|
|
modbusExchangeRegisters((void *)outStates,0,1);
|
|
|
|
|
break;
|
|
|
|
|
case fcReadInputRegisters:
|
|
|
|
|
@ -54,12 +55,21 @@ void modbusGet(void) {
|
|
|
|
|
case fcReadInputStatus:
|
|
|
|
|
if(modbusRequestedAddress() < 100)
|
|
|
|
|
modbusExchangeBits(inStates,0,nrOfInputs);
|
|
|
|
|
else if(modbusRequestedAddress() < 200)
|
|
|
|
|
modbusExchangeBits(inStatesBothEdges,100,nrOfInputs);
|
|
|
|
|
else if(modbusRequestedAddress() < 300)
|
|
|
|
|
modbusExchangeBits(inStatesFallingEdge,200,nrOfInputs);
|
|
|
|
|
else if(modbusRequestedAddress() < 400)
|
|
|
|
|
modbusExchangeBits(inStatesRisingEdge,300,nrOfInputs);
|
|
|
|
|
else if(modbusRequestedAddress() < 200){
|
|
|
|
|
modbusExchangeBits((void*)&inputEdgesBoth,100,nrOfInputs);
|
|
|
|
|
for(uint16_t i = modbusDataLocation - 100; i < modbusDataLocation+modbusDataAmount-100; i++)
|
|
|
|
|
inputEdgesBoth &= ~(1 << i);
|
|
|
|
|
}
|
|
|
|
|
else if(modbusRequestedAddress() < 300){
|
|
|
|
|
modbusExchangeBits((void*)&inputEdgesFalling,200,nrOfInputs);
|
|
|
|
|
for(uint16_t i = modbusDataLocation - 200; i < modbusDataLocation+modbusDataAmount-200; i++)
|
|
|
|
|
inputEdgesFalling &= ~(1 << i);
|
|
|
|
|
}
|
|
|
|
|
else if(modbusRequestedAddress() < 400){
|
|
|
|
|
modbusExchangeBits((void*)&inputEdgesRising,300,nrOfInputs);
|
|
|
|
|
for(uint16_t i = modbusDataLocation - 300; i < modbusDataLocation+modbusDataAmount-300; i++)
|
|
|
|
|
inputEdgesRising &= ~(1 << i);
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
case fcForceMultipleCoils:
|
|
|
|
|
@ -103,7 +113,11 @@ int main()
|
|
|
|
|
ioHelperReadPins();
|
|
|
|
|
ioHelperDebounce();
|
|
|
|
|
ioHelperEdgeDetector();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
inputEdgesBoth |= inStatesBothEdges[0] | ((uint32_t)inStatesBothEdges[1]<<8) | ((uint32_t)inStatesBothEdges[2] << 16) | ((uint32_t)inStatesBothEdges[3]<<24);
|
|
|
|
|
inputEdgesFalling |= inStatesFallingEdge[0] | ((uint32_t)inStatesFallingEdge[1]<<8) | ((uint32_t)inStatesFallingEdge[2] << 16) | ((uint32_t)inStatesFallingEdge[3]<<24);
|
|
|
|
|
inputEdgesRising |= inStatesRisingEdge[0] | ((uint32_t)inStatesRisingEdge[1]<<8) | ((uint32_t)inStatesRisingEdge[2] << 16) | ((uint32_t)inStatesRisingEdge[3]<<24);
|
|
|
|
|
|
|
|
|
|
modbusGet();
|
|
|
|
|
|
|
|
|
|
// Toggle all outs which are set to blinking
|
|
|
|
|
|