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;
62 #endif // Processor dependent fast IO definition
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()
99 #define _BV(bit) (1 << (bit))
109 fio_register fio_pinToOutputRegister(uint8_t pin, uint8_t initial_state = LOW);
118 fio_register fio_pinToInputRegister(uint8_t pin);
127 fio_bit fio_pinToBit(uint8_t pin);
140 void fio_digitalWrite ( fio_register pinRegister, fio_bit pinBit, uint8_t value );
149 #define fio_digitalWrite_LOW(reg,bit) *reg &= ~bit
150 #define fio_digitalWrite_HIGH(reg,bit) *reg |= bit
151 #define fio_digitalWrite_SWITCH(reg,bit) *reg ^= bit
152 #define fio_digitalWrite_SWITCHTO(reg,bit,val) fio_digitalWrite_SWITCH(reg,bit)
155 #define fio_digitalWrite_HIGH(reg,bit) digitalWrite(bit,HIGH)
156 #define fio_digitalWrite_LOW(reg,bit) digitalWrite(bit,LOW)
157 #define fio_digitalWrite_SWITCH(reg,bit) digitalWrite(bit, !digitalRead(bit))
158 #define fio_digitalWrite_SWITCHTO(reg,bit,val) digitalWrite(bit,val);
170 int fio_digitalRead ( fio_register pinRegister, fio_bit pinBit );
183 void fio_shiftOut( fio_register dataRegister, fio_bit dataBit, fio_register clockRegister,
184 fio_bit clockBit, uint8_t value, uint8_t bitOrder );
196 void fio_shiftOut(fio_register dataRegister, fio_bit dataBit, fio_register clockRegister, fio_bit clockBit);
206 void fio_shiftOut1(fio_register shift1Register, fio_bit shift1Bit, uint8_t value,
boolean noLatch =
false);
214 void fio_shiftOut1(uint8_t pin, uint8_t value,
boolean noLatch =
false);
222 void fio_shiftOut1_init(fio_register shift1Register, fio_bit shift1Bit);
229 void fio_shiftOut1_init(uint8_t pin);