From 8b632ee3d68cd018976b6021cea4ed96e1515f3e Mon Sep 17 00:00:00 2001 From: Eggert Jung Date: Sat, 15 Oct 2022 07:36:35 +0200 Subject: [PATCH] upgrade to new iohelper version --- avrIOhelper/io-helper.c | 1826 ++++++++++++++++++++++------------------- avrIOhelper/io-helper.h | 28 +- avrIOhelper/iohelperhelper.py | 83 +- main.c | 28 +- 4 files changed, 1036 insertions(+), 929 deletions(-) diff --git a/avrIOhelper/io-helper.c b/avrIOhelper/io-helper.c index 3efd96b..fec6384 100644 --- a/avrIOhelper/io-helper.c +++ b/avrIOhelper/io-helper.c @@ -1,19 +1,17 @@ #include +#include #include "io-helper.h" +volatile uint8_t outStates[nrOfOutputs/8]; +volatile uint8_t inStatesRaw[nrOfInputs/8]; +volatile uint8_t inStates[nrOfInputs/8]; -volatile uint8_t outStates[NUMBER_OF_INPUT_BYTES]; -volatile uint8_t outStatesBlinking[NUMBER_OF_INPUT_BYTES]; -volatile uint8_t inStatesRaw[NUMBER_OF_INPUT_BYTES]; -volatile uint8_t inStates[NUMBER_OF_INPUT_BYTES]; -volatile uint8_t ioHelperDebounceTable[NUMBER_OF_INPUT_BYTES*8]; +volatile uint8_t outStatesBlinking[nrOfOutputs/8]; -volatile uint8_t oldInstates[NUMBER_OF_INPUT_BYTES]; -volatile uint8_t inStatesBothEdges[NUMBER_OF_INPUT_BYTES]; -volatile uint8_t inStatesRisingEdge[NUMBER_OF_INPUT_BYTES]; -volatile uint8_t inStatesFallingEdge[NUMBER_OF_INPUT_BYTES]; - -volatile uint8_t ioHelperDebounceTable[NUMBER_OF_INPUT_BYTES*8]; +volatile uint8_t oldInstates[nrOfInputs/8]; +volatile uint8_t inStatesBothEdges[nrOfInputs/8]; +volatile uint8_t inStatesRisingEdge[nrOfInputs/8]; +volatile uint8_t inStatesFallingEdge[nrOfInputs/8]; uint8_t read_Input(uint8_t nr, uint8_t type) { uint8_t state = 0; @@ -23,28 +21,18 @@ uint8_t read_Input(uint8_t nr, uint8_t type) { break; case EDGE: state = ioHelperReadBit(inStatesBothEdges, nr); - ioHelperSetBit(inStatesBothEdges, nr, 0); + ioHelperSetBit(inStatesBothEdges, nr, 0); break; case RISING: state = ioHelperReadBit(inStatesRisingEdge, nr); - ioHelperSetBit(inStatesRisingEdge, nr, 0); + ioHelperSetBit(inStatesRisingEdge, nr, 0); break; case FALLING: state = ioHelperReadBit(inStatesFallingEdge, nr); - ioHelperSetBit(inStatesFallingEdge, nr, 0); + ioHelperSetBit(inStatesFallingEdge, nr, 0); break; } - //reset edges after being read once - // if (state) { - // if (type == EDGE) - // ioHelperSetBit(inStatesBothEdges, nr, OFF); - // if (type == RISING) - // ioHelperSetBit(inStatesRisingEdge, nr, OFF); - // if (type == FALLING) - // ioHelperSetBit(inStatesFallingEdge, nr, OFF); - // } - return state; } @@ -72,31 +60,8 @@ void set_Output(uint8_t nr, uint8_t state) { } } -void ioHelperInitBuffer(void){ - for(uint8_t i = 0; i < NUMBER_OF_INPUT_BYTES; i++){ - outStates[i]= 0; - inStatesRaw[i] = 0; - inStates[i] = 0; - - oldInstates[i] = 0; - inStatesBothEdges[i] = 0; - inStatesRisingEdge[i] = 0; - inStatesFallingEdge[i] = 0; - } - for(uint8_t i = 0; i < NUMBER_OF_INPUT_BYTES*8; i++){ - ioHelperDebounceTable[i] = 0; - } -} - -/* Flankenwechsel Rising Falling - alt neu | (alt XOR neu) | (Flankenwechsel UND neu) | (flankenwechsel UND alt) - 0 0 | 0 | 0 | 0 - 0 1 | 1 | 1 | 0 - 1 0 | 1 | 0 | 1 - 1 1 | 0 | 0 | 0 - */ void ioHelperEdgeDetector(void){ - for (uint8_t i = 0; i < NUMBER_OF_INPUT_BYTES; i++){ + for (uint8_t i = 0; i < nrOfInputs/8; i++){ inStatesBothEdges[i] = oldInstates[i] ^ inStates[i]; inStatesRisingEdge[i] = inStatesBothEdges[i] & inStates[i]; inStatesFallingEdge[i] = inStatesBothEdges[i] & oldInstates[i]; @@ -104,6 +69,10 @@ void ioHelperEdgeDetector(void){ } } +void ioHelperBlinkOuts(){ + for(uint8_t i=0; i +#include #define LEVEL 0 #define EDGE 1 @@ -13,24 +13,20 @@ #define BLINK 2 #define TOGGLE 3 +#define nrOfOutputs 32 //must be multiple of 8 +#define nrOfInputs 32 //must be multiple of 8 -#define NUMBER_OF_INPUT_BYTES 4 +extern volatile uint8_t outStates[nrOfOutputs/8]; +extern volatile uint8_t inStates[nrOfInputs/8]; +extern volatile uint8_t ioHelperDebounceTable[nrOfInputs]; -extern volatile uint8_t outStates[NUMBER_OF_INPUT_BYTES]; -extern volatile uint8_t outStatesBlinking[NUMBER_OF_INPUT_BYTES]; -extern volatile uint8_t inStates[NUMBER_OF_INPUT_BYTES]; -extern volatile uint8_t inStatesRaw[NUMBER_OF_INPUT_BYTES]; -extern volatile uint8_t ioHelperDebounceTable[NUMBER_OF_INPUT_BYTES*8]; -extern volatile uint8_t oldInstates[NUMBER_OF_INPUT_BYTES]; -extern volatile uint8_t inStatesBothEdges[NUMBER_OF_INPUT_BYTES]; -extern volatile uint8_t inStatesRisingEdge[NUMBER_OF_INPUT_BYTES]; -extern volatile uint8_t inStatesFallingEdge[NUMBER_OF_INPUT_BYTES]; +extern volatile uint8_t outStatesBlinking[nrOfOutputs/8]; +extern volatile uint8_t inStatesBothEdges[nrOfInputs/8]; +extern volatile uint8_t inStatesRisingEdge[nrOfInputs/8]; +extern volatile uint8_t inStatesFallingEdge[nrOfInputs/8]; -uint8_t read_Input(uint8_t nr, uint8_t type); -void set_Output(uint8_t nr, uint8_t state); -void ioHelperInitBuffer(void); void ioHelperSetOuts(void); void ioHelperReadPins(void); void ioHelperIoConf(void); @@ -38,6 +34,10 @@ void ioHelperSetBit(volatile uint8_t *list, uint8_t nr, uint8_t state); unsigned char ioHelperReadBit(volatile uint8_t *list, uint8_t nr); void ioHelperDebounce(void); void ioHelperEdgeDetector(void); +void ioHelperBlinkOuts(void); + +uint8_t read_Input(uint8_t nr, uint8_t type); +void set_Output(uint8_t nr, uint8_t state); //Outputs //Verknüpfen von Pin | Bit mit Bitposition (0...n) outStates[0...n/8]. diff --git a/avrIOhelper/iohelperhelper.py b/avrIOhelper/iohelperhelper.py index e3efc70..b1a7d00 100644 --- a/avrIOhelper/iohelperhelper.py +++ b/avrIOhelper/iohelperhelper.py @@ -1,92 +1,97 @@ import string ddr="""#ifdef DDRA -DDRA|=0 +ATOMIC_BLOCK(ATOMIC_RESTORESTATE) { + DDRA|=0 #ifdef BitPA0 -|(1<<0) -#endif + |(1<<0) +#endif #ifdef BitPA1 -|(1<<1) -#endif + |(1<<1) +#endif #ifdef BitPA2 -|(1<<2) -#endif + |(1<<2) +#endif #ifdef BitPA3 -|(1<<3) -#endif + |(1<<3) +#endif #ifdef BitPA4 -|(1<<4) -#endif + |(1<<4) +#endif #ifdef BitPA5 -|(1<<5) -#endif + |(1<<5) +#endif #ifdef BitPA6 -|(1<<6) -#endif + |(1<<6) +#endif #ifdef BitPA7 -|(1<<7) -#endif -|0; - + |(1<<7) +#endif + |0; +} #endif """ port=""" #ifdef PORTA -PORTA|=0 +ATOMIC_BLOCK(ATOMIC_RESTORESTATE) { + PORTA|=0 #ifdef BitPA0 -|(getBit1(BitPA0)<<0) + |(getBit1(BitPA0)<<0) #endif #ifdef BitPA1 -|(getBit1(BitPA1)<<1) + |(getBit1(BitPA1)<<1) #endif #ifdef BitPA2 -|(getBit1(BitPA2)<<2) + |(getBit1(BitPA2)<<2) #endif #ifdef BitPA3 -|(getBit1(BitPA3)<<3) + |(getBit1(BitPA3)<<3) #endif #ifdef BitPA4 -|(getBit1(BitPA4)<<4) + |(getBit1(BitPA4)<<4) #endif #ifdef BitPA5 -|(getBit1(BitPA5)<<5) + |(getBit1(BitPA5)<<5) #endif #ifdef BitPA6 -|(getBit1(BitPA6)<<6) + |(getBit1(BitPA6)<<6) #endif #ifdef BitPA7 -|(getBit1(BitPA7)<<7) + |(getBit1(BitPA7)<<7) #endif -|0; + |0; +} -PORTA&=~(0 +ATOMIC_BLOCK(ATOMIC_RESTORESTATE) { + PORTA&=~(0 #ifdef BitPA0 -|(getBit0(BitPA0)<<0) + |(getBit0(BitPA0)<<0) #endif #ifdef BitPA1 -|(getBit0(BitPA1)<<1) + |(getBit0(BitPA1)<<1) #endif #ifdef BitPA2 -|(getBit0(BitPA2)<<2) + |(getBit0(BitPA2)<<2) #endif #ifdef BitPA3 -|(getBit0(BitPA3)<<3) + |(getBit0(BitPA3)<<3) #endif #ifdef BitPA4 -|(getBit0(BitPA4)<<4) + |(getBit0(BitPA4)<<4) #endif #ifdef BitPA5 -|(getBit0(BitPA5)<<5) + |(getBit0(BitPA5)<<5) #endif #ifdef BitPA6 -|(getBit0(BitPA6)<<6) + |(getBit0(BitPA6)<<6) #endif #ifdef BitPA7 -|(getBit0(BitPA7)<<7) + |(getBit0(BitPA7)<<7) #endif -|0); + |0); +} #endif """ diff --git a/main.c b/main.c index 16ae57e..34b4fb0 100644 --- a/main.c +++ b/main.c @@ -38,37 +38,37 @@ void modbusGet(void) { //; //uint16_t test; //modbusExchangeRegisters(&test,0,1); - modbusExchangeRegisters((void *)outStates,0,NUMBER_OF_INPUT_BYTES/2); + modbusExchangeRegisters((void *)outStates,0,1); break; case fcReadInputRegisters: if(modbusRequestedAddress() < 100) - modbusExchangeRegisters((void *)inStates,0,NUMBER_OF_INPUT_BYTES/2); + modbusExchangeRegisters((void *)inStates,0,nrOfInputs/16); else if(modbusRequestedAddress() < 200) - modbusExchangeRegisters((void *)inStatesBothEdges,100,NUMBER_OF_INPUT_BYTES/2); + modbusExchangeRegisters((void *)inStatesBothEdges,100,nrOfInputs/16); else if(modbusRequestedAddress() < 300) - modbusExchangeRegisters((void *)inStatesFallingEdge,200,NUMBER_OF_INPUT_BYTES/2); + modbusExchangeRegisters((void *)inStatesFallingEdge,200,nrOfInputs/16); else if(modbusRequestedAddress() < 400) - modbusExchangeRegisters((void *)inStatesRisingEdge,300,NUMBER_OF_INPUT_BYTES/2); + modbusExchangeRegisters((void *)inStatesRisingEdge,300,nrOfInputs/16); break; case fcReadInputStatus: if(modbusRequestedAddress() < 100) - modbusExchangeBits(inStates,0,NUMBER_OF_INPUT_BYTES*8); + modbusExchangeBits(inStates,0,nrOfInputs); else if(modbusRequestedAddress() < 200) - modbusExchangeBits(inStatesBothEdges,100,NUMBER_OF_INPUT_BYTES*8); + modbusExchangeBits(inStatesBothEdges,100,nrOfInputs); else if(modbusRequestedAddress() < 300) - modbusExchangeBits(inStatesFallingEdge,200,NUMBER_OF_INPUT_BYTES*8); + modbusExchangeBits(inStatesFallingEdge,200,nrOfInputs); else if(modbusRequestedAddress() < 400) - modbusExchangeBits(inStatesRisingEdge,300,NUMBER_OF_INPUT_BYTES*8); + modbusExchangeBits(inStatesRisingEdge,300,nrOfInputs); break; case fcForceMultipleCoils: case fcForceSingleCoil: case fcReadCoilStatus: if(modbusRequestedAddress() < 100) - modbusExchangeBits(outStates,0,NUMBER_OF_INPUT_BYTES*8); + modbusExchangeBits(outStates,0,nrOfOutputs); else if(modbusRequestedAddress() < 200) - modbusExchangeBits(outStatesBlinking,100,NUMBER_OF_INPUT_BYTES*8); + modbusExchangeBits(outStatesBlinking,100,nrOfOutputs); break; default: @@ -84,7 +84,6 @@ int main() uart_init(); - ioHelperInitBuffer(); ioHelperIoConf(); timer0_init();// Timer0 millis engine init @@ -109,10 +108,7 @@ int main() // Toggle all outs which are set to blinking if(millis() - timer_blink_outs > 500){ - outStates[0] ^= outStatesBlinking[0]; - outStates[1] ^= outStatesBlinking[1]; - outStates[2] ^= outStatesBlinking[2]; - outStates[2] ^= outStatesBlinking[3]; + ioHelperBlinkOuts(); timer_blink_outs = millis(); }