30 #if defined(__AVR__) || defined(DOXYGEN) // AVR only
32 #include <util/atomic.h>
42 PinIO() : bit_(0), mask_(0XFF) {}
43 explicit PinIO(uint8_t pin);
44 bool begin(uint8_t pin);
48 inline __attribute__((always_inline))
49 bool
read() {
return *pinReg_ & bit_;}
56 inline __attribute__((always_inline))
65 inline __attribute__((always_inline))
73 inline __attribute__((always_inline))
85 inline __attribute__((always_inline))
87 volatile uint8_t*
ddrReg = pinReg_ + 1;
88 *ddrReg = mode == OUTPUT ? *ddrReg | bit_ : *ddrReg & mask_;
90 writeI(mode == INPUT_PULLUP);
102 inline __attribute__((always_inline))
104 *portReg_ = level ? *portReg_ | bit_ : *portReg_ & mask_;
113 inline __attribute__((always_inline))
122 inline __attribute__((always_inline))
123 void
low() {ATOMIC_BLOCK(ATOMIC_FORCEON) {
lowI();}}
136 inline __attribute__((always_inline))
147 inline __attribute__((always_inline))
148 void
write(
bool level) {ATOMIC_BLOCK(ATOMIC_FORCEON) {
writeI(level);}}
153 volatile uint8_t* pinReg_;
154 volatile uint8_t* portReg_;
static volatile uint8_t * ddrReg(uint8_t pin)
AVR port I/O with runtime pin numbers.
void config(uint8_t mode, bool data)