merge edge detection and blink by nowka
This commit is contained in:
63
io-helper.c
63
io-helper.c
@@ -5,8 +5,69 @@
|
|||||||
volatile uint8_t outStates[nrOfOutputs/8];
|
volatile uint8_t outStates[nrOfOutputs/8];
|
||||||
volatile uint8_t inStatesRaw[nrOfInputs/8];
|
volatile uint8_t inStatesRaw[nrOfInputs/8];
|
||||||
volatile uint8_t inStates[nrOfInputs/8];
|
volatile uint8_t inStates[nrOfInputs/8];
|
||||||
volatile uint8_t oldInstates[nrOfInputs/8];
|
|
||||||
|
|
||||||
|
volatile uint8_t outStatesBlinking[nrOfOutputs/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;
|
||||||
|
switch (type) {
|
||||||
|
case LEVEL:
|
||||||
|
state = ioHelperReadBit(inStates, nr);
|
||||||
|
break;
|
||||||
|
case EDGE:
|
||||||
|
state = ioHelperReadBit(inStatesBothEdges, nr);
|
||||||
|
ioHelperSetBit(inStatesBothEdges, nr, 0);
|
||||||
|
break;
|
||||||
|
case RISING:
|
||||||
|
state = ioHelperReadBit(inStatesRisingEdge, nr);
|
||||||
|
ioHelperSetBit(inStatesRisingEdge, nr, 0);
|
||||||
|
break;
|
||||||
|
case FALLING:
|
||||||
|
state = ioHelperReadBit(inStatesFallingEdge, nr);
|
||||||
|
ioHelperSetBit(inStatesFallingEdge, nr, 0);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
return state;
|
||||||
|
}
|
||||||
|
|
||||||
|
void set_Output(uint8_t nr, uint8_t state) {
|
||||||
|
switch (state) {
|
||||||
|
case BLINK:
|
||||||
|
ioHelperSetBit(outStatesBlinking, nr, ON);
|
||||||
|
break;
|
||||||
|
case TOGGLE:
|
||||||
|
ioHelperSetBit(outStatesBlinking, nr, OFF);
|
||||||
|
if (ioHelperReadBit(outStates, nr)) {
|
||||||
|
ioHelperSetBit(outStates, nr, OFF);
|
||||||
|
} else {
|
||||||
|
ioHelperSetBit(outStates, nr, ON);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case ON:
|
||||||
|
ioHelperSetBit(outStates, nr, ON);
|
||||||
|
ioHelperSetBit(outStatesBlinking, nr, OFF);
|
||||||
|
break;
|
||||||
|
case OFF:
|
||||||
|
ioHelperSetBit(outStates, nr, OFF);
|
||||||
|
ioHelperSetBit(outStatesBlinking, nr, OFF);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void ioHelperEdgeDetector(void){
|
||||||
|
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];
|
||||||
|
oldInstates[i] = inStates[i];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/* @brief: copies a single bit from one char to another char (or arrays thereof)
|
/* @brief: copies a single bit from one char to another char (or arrays thereof)
|
||||||
*
|
*
|
||||||
|
|||||||
14
io-helper.h
14
io-helper.h
@@ -3,19 +3,33 @@
|
|||||||
|
|
||||||
#include <avr/io.h>
|
#include <avr/io.h>
|
||||||
|
|
||||||
|
#define LEVEL 0
|
||||||
|
#define EDGE 1
|
||||||
|
#define RISING 2
|
||||||
|
#define FALLING 3
|
||||||
|
|
||||||
|
#define OFF 0
|
||||||
|
#define ON 1
|
||||||
|
#define BLINK 2
|
||||||
|
#define TOGGLE 3
|
||||||
|
|
||||||
#define nrOfOutputs 32 //must be multiple of 8
|
#define nrOfOutputs 32 //must be multiple of 8
|
||||||
#define nrOfInputs 32 //must be multiple of 8
|
#define nrOfInputs 32 //must be multiple of 8
|
||||||
|
|
||||||
extern volatile uint8_t outStates[nrOfOutputs/8];
|
extern volatile uint8_t outStates[nrOfOutputs/8];
|
||||||
extern volatile uint8_t inStates[nrOfInputs/8];
|
extern volatile uint8_t inStates[nrOfInputs/8];
|
||||||
extern volatile uint8_t ioHelperDebounceTable[nrOfInputs];
|
extern volatile uint8_t ioHelperDebounceTable[nrOfInputs];
|
||||||
|
|
||||||
void ioHelperSetOuts(void);
|
void ioHelperSetOuts(void);
|
||||||
void ioHelperReadPins(void);
|
void ioHelperReadPins(void);
|
||||||
void ioHelperIoConf(void);
|
void ioHelperIoConf(void);
|
||||||
void ioHelperSetBit(volatile uint8_t *list, uint8_t nr, uint8_t state);
|
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);
|
||||||
|
|
||||||
|
uint8_t read_Input(uint8_t nr, uint8_t type);
|
||||||
|
void set_Output(uint8_t nr, uint8_t state);
|
||||||
|
|
||||||
//Outputs
|
//Outputs
|
||||||
//Pin | Bit in outStates
|
//Pin | Bit in outStates
|
||||||
|
|||||||
@@ -1,92 +1,97 @@
|
|||||||
import string
|
import string
|
||||||
|
|
||||||
ddr="""#ifdef DDRA
|
ddr="""#ifdef DDRA
|
||||||
DDRA|=0
|
ATOMIC_BLOCK(ATOMIC_RESTORESTATE) {
|
||||||
|
DDRA|=0
|
||||||
#ifdef BitPA0
|
#ifdef BitPA0
|
||||||
|(1<<0)
|
|(1<<0)
|
||||||
#endif
|
#endif
|
||||||
#ifdef BitPA1
|
#ifdef BitPA1
|
||||||
|(1<<1)
|
|(1<<1)
|
||||||
#endif
|
#endif
|
||||||
#ifdef BitPA2
|
#ifdef BitPA2
|
||||||
|(1<<2)
|
|(1<<2)
|
||||||
#endif
|
#endif
|
||||||
#ifdef BitPA3
|
#ifdef BitPA3
|
||||||
|(1<<3)
|
|(1<<3)
|
||||||
#endif
|
#endif
|
||||||
#ifdef BitPA4
|
#ifdef BitPA4
|
||||||
|(1<<4)
|
|(1<<4)
|
||||||
#endif
|
#endif
|
||||||
#ifdef BitPA5
|
#ifdef BitPA5
|
||||||
|(1<<5)
|
|(1<<5)
|
||||||
#endif
|
#endif
|
||||||
#ifdef BitPA6
|
#ifdef BitPA6
|
||||||
|(1<<6)
|
|(1<<6)
|
||||||
#endif
|
#endif
|
||||||
#ifdef BitPA7
|
#ifdef BitPA7
|
||||||
|(1<<7)
|
|(1<<7)
|
||||||
#endif
|
#endif
|
||||||
|0;
|
|0;
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
port="""
|
port="""
|
||||||
#ifdef PORTA
|
#ifdef PORTA
|
||||||
PORTA|=0
|
ATOMIC_BLOCK(ATOMIC_RESTORESTATE) {
|
||||||
|
PORTA|=0
|
||||||
#ifdef BitPA0
|
#ifdef BitPA0
|
||||||
|(getBit1(BitPA0)<<0)
|
|(getBit1(BitPA0)<<0)
|
||||||
#endif
|
#endif
|
||||||
#ifdef BitPA1
|
#ifdef BitPA1
|
||||||
|(getBit1(BitPA1)<<1)
|
|(getBit1(BitPA1)<<1)
|
||||||
#endif
|
#endif
|
||||||
#ifdef BitPA2
|
#ifdef BitPA2
|
||||||
|(getBit1(BitPA2)<<2)
|
|(getBit1(BitPA2)<<2)
|
||||||
#endif
|
#endif
|
||||||
#ifdef BitPA3
|
#ifdef BitPA3
|
||||||
|(getBit1(BitPA3)<<3)
|
|(getBit1(BitPA3)<<3)
|
||||||
#endif
|
#endif
|
||||||
#ifdef BitPA4
|
#ifdef BitPA4
|
||||||
|(getBit1(BitPA4)<<4)
|
|(getBit1(BitPA4)<<4)
|
||||||
#endif
|
#endif
|
||||||
#ifdef BitPA5
|
#ifdef BitPA5
|
||||||
|(getBit1(BitPA5)<<5)
|
|(getBit1(BitPA5)<<5)
|
||||||
#endif
|
#endif
|
||||||
#ifdef BitPA6
|
#ifdef BitPA6
|
||||||
|(getBit1(BitPA6)<<6)
|
|(getBit1(BitPA6)<<6)
|
||||||
#endif
|
#endif
|
||||||
#ifdef BitPA7
|
#ifdef BitPA7
|
||||||
|(getBit1(BitPA7)<<7)
|
|(getBit1(BitPA7)<<7)
|
||||||
#endif
|
#endif
|
||||||
|0;
|
|0;
|
||||||
|
}
|
||||||
|
|
||||||
PORTA&=~(0
|
ATOMIC_BLOCK(ATOMIC_RESTORESTATE) {
|
||||||
|
PORTA&=~(0
|
||||||
#ifdef BitPA0
|
#ifdef BitPA0
|
||||||
|(getBit0(BitPA0)<<0)
|
|(getBit0(BitPA0)<<0)
|
||||||
#endif
|
#endif
|
||||||
#ifdef BitPA1
|
#ifdef BitPA1
|
||||||
|(getBit0(BitPA1)<<1)
|
|(getBit0(BitPA1)<<1)
|
||||||
#endif
|
#endif
|
||||||
#ifdef BitPA2
|
#ifdef BitPA2
|
||||||
|(getBit0(BitPA2)<<2)
|
|(getBit0(BitPA2)<<2)
|
||||||
#endif
|
#endif
|
||||||
#ifdef BitPA3
|
#ifdef BitPA3
|
||||||
|(getBit0(BitPA3)<<3)
|
|(getBit0(BitPA3)<<3)
|
||||||
#endif
|
#endif
|
||||||
#ifdef BitPA4
|
#ifdef BitPA4
|
||||||
|(getBit0(BitPA4)<<4)
|
|(getBit0(BitPA4)<<4)
|
||||||
#endif
|
#endif
|
||||||
#ifdef BitPA5
|
#ifdef BitPA5
|
||||||
|(getBit0(BitPA5)<<5)
|
|(getBit0(BitPA5)<<5)
|
||||||
#endif
|
#endif
|
||||||
#ifdef BitPA6
|
#ifdef BitPA6
|
||||||
|(getBit0(BitPA6)<<6)
|
|(getBit0(BitPA6)<<6)
|
||||||
#endif
|
#endif
|
||||||
#ifdef BitPA7
|
#ifdef BitPA7
|
||||||
|(getBit0(BitPA7)<<7)
|
|(getBit0(BitPA7)<<7)
|
||||||
#endif
|
#endif
|
||||||
|0);
|
|0);
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|||||||
Reference in New Issue
Block a user