tone-generator/port.hpp

64 lines
1.0 KiB
C++
Raw Normal View History

2024-10-01 16:19:43 +10:00
#pragma once
#include "util.hpp"
namespace port {
struct Drain {
uint8_t mask;
volatile uint8_t* mode;
volatile uint8_t* in;
inline Drain(unsigned pin) AW_IN {
mask = digitalPinToBitMask(pin);
mode = portModeRegister(digitalPinToPort(pin));
in = portInputRegister(digitalPinToPort(pin));
}
2024-10-01 16:19:43 +10:00
inline void set(uint8_t b) AW_IN {
if(b) {
*mode &= ~mask;
2024-10-01 16:19:43 +10:00
} else {
*mode |= mask;
}
}
inline uint8_t get() AW_IN {
return *in & mask;
}
};
struct Input {
uint8_t mask;
volatile uint8_t* in;
inline Input(unsigned pin) AW_IN {
mask = digitalPinToBitMask(pin);
in = portInputRegister(digitalPinToPort(pin));
}
inline uint8_t get() AW_IN {
return *in & mask;
}
};
struct Output {
uint8_t mask;
volatile uint8_t* out;
inline Output(unsigned pin) AW_IN {
mask = digitalPinToBitMask(pin);
out = portOutputRegister(digitalPinToPort(pin));
}
inline void set(uint8_t b) AW_IN {
if(b) {
*out |= mask;
} else {
*out &= ~mask;
2024-10-01 16:19:43 +10:00
}
}
};
};