30 #if defined(__AVR__) || defined(DOXYGEN) // AVR onlyd
31 #include <util/atomic.h>
41 PinIO() : bit_(0), mask_(0XFF) {}
42 explicit PinIO(uint8_t pin);
43 bool begin(uint8_t pin);
47 inline __attribute__((always_inline))
48 bool
read() {
return *pinReg_ & bit_;}
55 inline __attribute__((always_inline))
64 inline __attribute__((always_inline))
72 inline __attribute__((always_inline))
83 inline __attribute__((always_inline))
85 volatile uint8_t* ddrReg = pinReg_ + 1;
86 *ddrReg = mode ? *ddrReg | bit_ : *ddrReg & mask_;
96 inline __attribute__((always_inline))
98 *portReg_ = level ? *portReg_ | bit_ : *portReg_ & mask_;
107 inline __attribute__((always_inline))
115 inline __attribute__((always_inline))
116 void
low() {ATOMIC_BLOCK(ATOMIC_FORCEON) {
lowI();}}
126 inline __attribute__((always_inline))
127 void
mode(
bool pinMode) {ATOMIC_BLOCK(ATOMIC_FORCEON) {
modeI(pinMode);}}
136 inline __attribute__((always_inline))
137 void
write(
bool level) {ATOMIC_BLOCK(ATOMIC_FORCEON) {
writeI(level);}}
142 volatile uint8_t* pinReg_;
143 volatile uint8_t* portReg_;
AVR port I/O with runtime pin numbers.
void config(bool mode, bool data)