38 #include <pins_arduino.h>
45 #include <util/atomic.h>
46 typedef uint8_t fio_bit;
47 typedef volatile uint8_t *fio_register;
50 #elif defined(__PIC32MX__)
51 typedef uint32_t fio_bit;
52 typedef volatile uint32_t *fio_register;
58 #define ATOMIC_BLOCK(dummy) if(true)
59 #define ATOMIC_RESTORESTATE
60 typedef uint8_t fio_bit;
61 typedef uint8_t fio_register;
66 #if !defined(FIO_FALLBACK) && !defined(ATOMIC_BLOCK)
71 #define ATOMIC_RESTORESTATE ATOMIC_FORCEON // sorry, no support for save/restore yet.
72 #define ATOMIC_FORCEON uint8_t sreg_save \
73 __attribute__((__cleanup__(__iSeiParam))) = 0
75 static __inline__ uint8_t __iCliRetVal(
void)
80 static __inline__
void __iSeiParam(
const uint8_t *__s)
84 #define ATOMIC_BLOCK(type) for(type, __Todo = __iCliRetVal(); __Todo; __Todo = 0)
86 #endif // end of block to create compatible ATOMIC_BLOCK()
97 fio_register fio_pinToOutputRegister(uint8_t pin, uint8_t initial_state = LOW);
106 fio_register fio_pinToInputRegister(uint8_t pin);
115 fio_bit fio_pinToBit(uint8_t pin);
128 void fio_digitalWrite ( fio_register pinRegister, fio_bit pinBit, uint8_t value );
137 #define fio_digitalWrite_LOW(reg,bit) *reg &= ~bit
138 #define fio_digitalWrite_HIGH(reg,bit) *reg |= bit
139 #define fio_digitalWrite_SWITCH(reg,bit) *reg ^= bit
140 #define fio_digitalWrite_SWITCHTO(reg,bit,val) fio_digitalWrite_SWITCH(reg,bit)
143 #define fio_digitalWrite_HIGH(reg,bit) digitalWrite(bit,HIGH)
144 #define fio_digitalWrite_LOW(reg,bit) digitalWrite(bit,LOW)
145 #define fio_digitalWrite_SWITCH(reg,bit) digitalWrite(bit, !digitalRead(bit))
146 #define fio_digitalWrite_SWITCHTO(reg,bit,val) digitalWrite(bit,val);
158 int fio_digitalRead ( fio_register pinRegister, fio_bit pinBit );
171 void fio_shiftOut( fio_register dataRegister, fio_bit dataBit, fio_register clockRegister,
172 fio_bit clockBit, uint8_t value, uint8_t bitOrder );
184 void fio_shiftOut(fio_register dataRegister, fio_bit dataBit, fio_register clockRegister, fio_bit clockBit);
194 void fio_shiftOut1(fio_register shift1Register, fio_bit shift1Bit, uint8_t value,
boolean noLatch =
false);
202 void fio_shiftOut1(uint8_t pin, uint8_t value,
boolean noLatch =
false);
210 void fio_shiftOut1_init(fio_register shift1Register, fio_bit shift1Bit);
217 void fio_shiftOut1_init(uint8_t pin);