49 #include <pins_arduino.h>
56 #include <util/atomic.h>
57 typedef uint8_t fio_bit;
58 typedef volatile uint8_t *fio_register;
61 #elif defined(__PIC32MX__)
62 typedef uint32_t fio_bit;
63 typedef volatile uint32_t *fio_register;
69 #define ATOMIC_BLOCK(dummy) if(true)
70 #define ATOMIC_RESTORESTATE
71 typedef uint8_t fio_bit;
72 typedef uint8_t fio_register;
73 #endif // Processor dependent fast IO definition
77 #if !defined(FIO_FALLBACK) && !defined(ATOMIC_BLOCK)
82 #define ATOMIC_RESTORESTATE ATOMIC_FORCEON // sorry, no support for save/restore yet.
83 #define ATOMIC_FORCEON uint8_t sreg_save \
84 __attribute__((__cleanup__(__iSeiParam))) = 0
86 static __inline__ uint8_t __iCliRetVal(
void)
91 static __inline__
void __iSeiParam(
const uint8_t *__s)
95 #define ATOMIC_BLOCK(type) for(type, __Todo = __iCliRetVal(); __Todo; __Todo = 0)
97 #endif // end of block to create compatible ATOMIC_BLOCK()
110 #define _BV(bit) (1 << (bit))
120 fio_register fio_pinToOutputRegister(uint8_t pin, uint8_t initial_state = LOW);
129 fio_register fio_pinToInputRegister(uint8_t pin);
138 fio_bit fio_pinToBit(uint8_t pin);
151 void fio_digitalWrite ( fio_register pinRegister, fio_bit pinBit, uint8_t value );
160 #define fio_digitalWrite_LOW(reg,bit) *reg &= ~bit
161 #define fio_digitalWrite_HIGH(reg,bit) *reg |= bit
162 #define fio_digitalWrite_SWITCH(reg,bit) *reg ^= bit
163 #define fio_digitalWrite_SWITCHTO(reg,bit,val) fio_digitalWrite_SWITCH(reg,bit)
166 #define fio_digitalWrite_HIGH(reg,bit) digitalWrite(bit,HIGH)
167 #define fio_digitalWrite_LOW(reg,bit) digitalWrite(bit,LOW)
168 #define fio_digitalWrite_SWITCH(reg,bit) digitalWrite(bit, !digitalRead(bit))
169 #define fio_digitalWrite_SWITCHTO(reg,bit,val) digitalWrite(bit,val);
181 int fio_digitalRead ( fio_register pinRegister, fio_bit pinBit );
194 void fio_shiftOut( fio_register dataRegister, fio_bit dataBit, fio_register clockRegister,
195 fio_bit clockBit, uint8_t value, uint8_t bitOrder );
207 void fio_shiftOut(fio_register dataRegister, fio_bit dataBit, fio_register clockRegister, fio_bit clockBit);
217 void fio_shiftOut1(fio_register shift1Register, fio_bit shift1Bit, uint8_t value,
boolean noLatch =
false);
225 void fio_shiftOut1(uint8_t pin, uint8_t value,
boolean noLatch =
false);
233 void fio_shiftOut1_init(fio_register shift1Register, fio_bit shift1Bit);
240 void fio_shiftOut1_init(uint8_t pin);