Added reg_ptr_t type for cleaner code
This commit is contained in:
parent
a47e9a1a66
commit
661bbfea7e
30
io.hpp
30
io.hpp
@ -236,10 +236,12 @@ static constexpr auto getPIN(const Bus bus)
|
||||
}
|
||||
}
|
||||
|
||||
using reg_ptr_t = volatile uint8_t *;
|
||||
|
||||
template <uintptr_t Address>
|
||||
static inline volatile uint8_t *getRegPtr()
|
||||
static inline reg_ptr_t getRegPtr()
|
||||
{
|
||||
return reinterpret_cast<volatile uint8_t *>(Address);
|
||||
return reinterpret_cast<reg_ptr_t>(Address);
|
||||
}
|
||||
|
||||
} // namespace detail
|
||||
@ -264,7 +266,7 @@ class Pin {
|
||||
constexpr auto bus = detail::getBus(pin);
|
||||
constexpr auto pinBit = detail::getPinBit(pin);
|
||||
|
||||
volatile uint8_t *dirRegPtr = detail::getRegPtr<detail::getDDR(bus)>();
|
||||
detail::reg_ptr_t dirRegPtr = detail::getRegPtr<detail::getDDR(bus)>();
|
||||
|
||||
if (dir == Dir::IN)
|
||||
*dirRegPtr &= ~(1 << pinBit);
|
||||
@ -277,7 +279,7 @@ class Pin {
|
||||
constexpr auto bus = detail::getBus(pin);
|
||||
constexpr auto pinBit = detail::getPinBit(pin);
|
||||
|
||||
volatile uint8_t *portRegPtr = detail::getRegPtr<detail::getPORT(bus)>();
|
||||
detail::reg_ptr_t portRegPtr = detail::getRegPtr<detail::getPORT(bus)>();
|
||||
|
||||
if (enable)
|
||||
*portRegPtr |= (1 << pinBit);
|
||||
@ -290,7 +292,7 @@ class Pin {
|
||||
constexpr auto bus = detail::getBus(pin);
|
||||
constexpr auto pinBit = detail::getPinBit(pin);
|
||||
|
||||
volatile uint8_t *portRegPtr = detail::getRegPtr<detail::getPORT(bus)>();
|
||||
detail::reg_ptr_t portRegPtr = detail::getRegPtr<detail::getPORT(bus)>();
|
||||
|
||||
if (value)
|
||||
*portRegPtr |= (1 << pinBit);
|
||||
@ -304,10 +306,10 @@ class Pin {
|
||||
constexpr auto pinBit = detail::getPinBit(pin);
|
||||
|
||||
#ifdef HARDWARE_TOGGLE
|
||||
volatile uint8_t *pinRegPtr = detail::getRegPtr<detail::getPIN(bus)>();
|
||||
detail::reg_ptr_t pinRegPtr = detail::getRegPtr<detail::getPIN(bus)>();
|
||||
*pinRegPtr |= (1 << pinBit);
|
||||
#else
|
||||
volatile uint8_t *portRegPtr = detail::getRegPtr<detail::getPORT(bus)>();
|
||||
detail::reg_ptr_t portRegPtr = detail::getRegPtr<detail::getPORT(bus)>();
|
||||
*portRegPtr ^= (1 << pinBit);
|
||||
#endif
|
||||
}
|
||||
@ -317,7 +319,7 @@ class Pin {
|
||||
constexpr auto bus = detail::getBus(pin);
|
||||
constexpr auto pinBit = detail::getPinBit(pin);
|
||||
|
||||
volatile uint8_t *pinRegPtr = detail::getRegPtr<detail::getPIN(bus)>();
|
||||
detail::reg_ptr_t pinRegPtr = detail::getRegPtr<detail::getPIN(bus)>();
|
||||
|
||||
if (*pinRegPtr >> pinBit & 1)
|
||||
return true;
|
||||
@ -354,7 +356,7 @@ class Port {
|
||||
|
||||
static inline void dir(const Dir dir) FORCE_INLINE
|
||||
{
|
||||
volatile uint8_t *dirRegPtr = detail::getRegPtr<detail::getDDR(port)>();
|
||||
detail::reg_ptr_t dirRegPtr = detail::getRegPtr<detail::getDDR(port)>();
|
||||
|
||||
if (dir == Dir::IN)
|
||||
*dirRegPtr = 0x00;
|
||||
@ -364,7 +366,7 @@ class Port {
|
||||
|
||||
static inline void pullup(const bool enable) FORCE_INLINE
|
||||
{
|
||||
volatile uint8_t *portRegPtr = detail::getRegPtr<detail::getPORT(port)>();
|
||||
detail::reg_ptr_t portRegPtr = detail::getRegPtr<detail::getPORT(port)>();
|
||||
|
||||
if (enable)
|
||||
*portRegPtr = 0xFF;
|
||||
@ -374,7 +376,7 @@ class Port {
|
||||
|
||||
static inline void write(const uint8_t value) FORCE_INLINE
|
||||
{
|
||||
volatile uint8_t *portRegPtr = detail::getRegPtr<detail::getPORT(port)>();
|
||||
detail::reg_ptr_t portRegPtr = detail::getRegPtr<detail::getPORT(port)>();
|
||||
|
||||
*portRegPtr = value;
|
||||
}
|
||||
@ -382,11 +384,11 @@ class Port {
|
||||
static inline void invert() FORCE_INLINE
|
||||
{
|
||||
#ifdef HARDWARE_TOGGLE
|
||||
volatile uint8_t *pinRegPtr = detail::getRegPtr<detail::getPIN(port)>();
|
||||
detail::reg_ptr_t pinRegPtr = detail::getRegPtr<detail::getPIN(port)>();
|
||||
|
||||
*pinRegPtr = 0xFF;
|
||||
#else
|
||||
volatile uint8_t *portRegPtr = detail::getRegPtr<detail::getPORT(port)>();
|
||||
detail::reg_ptr_t portRegPtr = detail::getRegPtr<detail::getPORT(port)>();
|
||||
|
||||
*portRegPtr = ~(*portRegPtr);
|
||||
#endif
|
||||
@ -394,7 +396,7 @@ class Port {
|
||||
|
||||
static inline uint8_t read() FORCE_INLINE
|
||||
{
|
||||
volatile uint8_t *pinRegPtr = detail::getRegPtr<detail::getPIN(port)>();
|
||||
detail::reg_ptr_t pinRegPtr = detail::getRegPtr<detail::getPIN(port)>();
|
||||
|
||||
return *pinRegPtr;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user