#define reg_def(pos, size) pos, (((0x1 << size) - 1) << pos) #define reg_set(reg, field) _reg_set(reg, field) #define _reg_set(reg, pos, mask) do { reg.word |= mask; } while (false) #define reg_reset(reg, field) _reg_reset(reg, field) #define _reg_reset(reg, pos, mask) do { reg.word &= ~mask; } while (false) #define reg_write(reg, field, value) _reg_write(reg, field, value) #define _reg_write(reg, pos, mask, value) \ do { \ reg.word |= value << pos; \ } while (false) \