upgrade to new iohelper version

master
Eggert Jung 3 years ago
parent b814cad16f
commit 8b632ee3d6

File diff suppressed because it is too large Load Diff

@ -1,7 +1,7 @@
#ifndef _IO_HELPER_ #ifndef _IO_HELPER_
#define _IO_HELPER_ #define _IO_HELPER_
#include <stdint.h> #include <avr/io.h>
#define LEVEL 0 #define LEVEL 0
#define EDGE 1 #define EDGE 1
@ -13,24 +13,20 @@
#define BLINK 2 #define BLINK 2
#define TOGGLE 3 #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[nrOfOutputs/8];
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 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 ioHelperSetOuts(void);
void ioHelperReadPins(void); void ioHelperReadPins(void);
void ioHelperIoConf(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); unsigned char ioHelperReadBit(volatile uint8_t *list, uint8_t nr);
void ioHelperDebounce(void); void ioHelperDebounce(void);
void ioHelperEdgeDetector(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 //Outputs
//Verknüpfen von Pin | Bit mit Bitposition (0...n) outStates[0...n/8]. //Verknüpfen von Pin | Bit mit Bitposition (0...n) outStates[0...n/8].

@ -1,6 +1,7 @@
import string import string
ddr="""#ifdef DDRA ddr="""#ifdef DDRA
ATOMIC_BLOCK(ATOMIC_RESTORESTATE) {
DDRA|=0 DDRA|=0
#ifdef BitPA0 #ifdef BitPA0
|(1<<0) |(1<<0)
@ -27,13 +28,14 @@ DDRA|=0
|(1<<7) |(1<<7)
#endif #endif
|0; |0;
}
#endif #endif
""" """
port=""" port="""
#ifdef PORTA #ifdef PORTA
ATOMIC_BLOCK(ATOMIC_RESTORESTATE) {
PORTA|=0 PORTA|=0
#ifdef BitPA0 #ifdef BitPA0
|(getBit1(BitPA0)<<0) |(getBit1(BitPA0)<<0)
@ -60,7 +62,9 @@ PORTA|=0
|(getBit1(BitPA7)<<7) |(getBit1(BitPA7)<<7)
#endif #endif
|0; |0;
}
ATOMIC_BLOCK(ATOMIC_RESTORESTATE) {
PORTA&=~(0 PORTA&=~(0
#ifdef BitPA0 #ifdef BitPA0
|(getBit0(BitPA0)<<0) |(getBit0(BitPA0)<<0)
@ -87,6 +91,7 @@ PORTA&=~(0
|(getBit0(BitPA7)<<7) |(getBit0(BitPA7)<<7)
#endif #endif
|0); |0);
}
#endif #endif
""" """

@ -38,37 +38,37 @@ void modbusGet(void) {
//; //;
//uint16_t test; //uint16_t test;
//modbusExchangeRegisters(&test,0,1); //modbusExchangeRegisters(&test,0,1);
modbusExchangeRegisters((void *)outStates,0,NUMBER_OF_INPUT_BYTES/2); modbusExchangeRegisters((void *)outStates,0,1);
break; break;
case fcReadInputRegisters: case fcReadInputRegisters:
if(modbusRequestedAddress() < 100) if(modbusRequestedAddress() < 100)
modbusExchangeRegisters((void *)inStates,0,NUMBER_OF_INPUT_BYTES/2); modbusExchangeRegisters((void *)inStates,0,nrOfInputs/16);
else if(modbusRequestedAddress() < 200) else if(modbusRequestedAddress() < 200)
modbusExchangeRegisters((void *)inStatesBothEdges,100,NUMBER_OF_INPUT_BYTES/2); modbusExchangeRegisters((void *)inStatesBothEdges,100,nrOfInputs/16);
else if(modbusRequestedAddress() < 300) else if(modbusRequestedAddress() < 300)
modbusExchangeRegisters((void *)inStatesFallingEdge,200,NUMBER_OF_INPUT_BYTES/2); modbusExchangeRegisters((void *)inStatesFallingEdge,200,nrOfInputs/16);
else if(modbusRequestedAddress() < 400) else if(modbusRequestedAddress() < 400)
modbusExchangeRegisters((void *)inStatesRisingEdge,300,NUMBER_OF_INPUT_BYTES/2); modbusExchangeRegisters((void *)inStatesRisingEdge,300,nrOfInputs/16);
break; break;
case fcReadInputStatus: case fcReadInputStatus:
if(modbusRequestedAddress() < 100) if(modbusRequestedAddress() < 100)
modbusExchangeBits(inStates,0,NUMBER_OF_INPUT_BYTES*8); modbusExchangeBits(inStates,0,nrOfInputs);
else if(modbusRequestedAddress() < 200) else if(modbusRequestedAddress() < 200)
modbusExchangeBits(inStatesBothEdges,100,NUMBER_OF_INPUT_BYTES*8); modbusExchangeBits(inStatesBothEdges,100,nrOfInputs);
else if(modbusRequestedAddress() < 300) else if(modbusRequestedAddress() < 300)
modbusExchangeBits(inStatesFallingEdge,200,NUMBER_OF_INPUT_BYTES*8); modbusExchangeBits(inStatesFallingEdge,200,nrOfInputs);
else if(modbusRequestedAddress() < 400) else if(modbusRequestedAddress() < 400)
modbusExchangeBits(inStatesRisingEdge,300,NUMBER_OF_INPUT_BYTES*8); modbusExchangeBits(inStatesRisingEdge,300,nrOfInputs);
break; break;
case fcForceMultipleCoils: case fcForceMultipleCoils:
case fcForceSingleCoil: case fcForceSingleCoil:
case fcReadCoilStatus: case fcReadCoilStatus:
if(modbusRequestedAddress() < 100) if(modbusRequestedAddress() < 100)
modbusExchangeBits(outStates,0,NUMBER_OF_INPUT_BYTES*8); modbusExchangeBits(outStates,0,nrOfOutputs);
else if(modbusRequestedAddress() < 200) else if(modbusRequestedAddress() < 200)
modbusExchangeBits(outStatesBlinking,100,NUMBER_OF_INPUT_BYTES*8); modbusExchangeBits(outStatesBlinking,100,nrOfOutputs);
break; break;
default: default:
@ -84,7 +84,6 @@ int main()
uart_init(); uart_init();
ioHelperInitBuffer();
ioHelperIoConf(); ioHelperIoConf();
timer0_init();// Timer0 millis engine init timer0_init();// Timer0 millis engine init
@ -109,10 +108,7 @@ int main()
// Toggle all outs which are set to blinking // Toggle all outs which are set to blinking
if(millis() - timer_blink_outs > 500){ if(millis() - timer_blink_outs > 500){
outStates[0] ^= outStatesBlinking[0]; ioHelperBlinkOuts();
outStates[1] ^= outStatesBlinking[1];
outStates[2] ^= outStatesBlinking[2];
outStates[2] ^= outStatesBlinking[3];
timer_blink_outs = millis(); timer_blink_outs = millis();
} }