Listing 9
// New enums for each register width
enum Registers8
{
STATUS = 0x00, // UART status register
... and so on ...
};
enum Registers32
{
TXBUF = 0x04, // Transmit buffer
... and so on ...
};
// Two overloads of regAddress
inline volatile uint8_t *regAddress(Registers8 reg)
{
return reinterpret_cast<volatile uint8_t*>(baseAddress + reg);
}
inline volatile uint32_t *regAddress(Registers32 reg)
{
return reinterpret_cast<volatile uint32_t*>(baseAddress + reg);
}
// Two overloads of regRead
inline uint8_t regRead(Registers8 reg)
{
return *regAddress(reg);
}
inline uint32_t regRead(Registers32 reg)
{
return *regAddress(reg);
}
... similarly for regWrite ...