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; }