Listing 11
// Template versions of bitRead/Write - put them at global scope
// and you don't have to copy bitRead/Write into every device namespace
template <typename RegType>
inline uint32_t bitRead(RegType reg, uint32_t bits)
uint32_t regval = *regAddress(reg);
const uint32_t width = bits & 0xff;
const uint32_t bitno = bits >> 16;
regval >>= bitno;
regval &= ((1<<width)-1);
return regval;
}
template <typename RegType>
inline void bitWrite(RegType reg, uint32_t bits, uint32_t value)
{
uint32_t regval = *regAddress(reg);
const uint32_t width = bits & 0xff;
const uint32_t bitno = bits >> 16;
regval &= ~(((1<<width)-1) << bitno);
regval |= value << bitno;
*regAddress(reg) = regval;
}