#ifndef HAL_REGACCESS_2019_02_08_H_ #define HAL_REGACCESS_2019_02_08_H_ #include typedef uint32 register_address_type; typedef uint32 register_value_type; typedef struct { volatile register_address_type address; register_value_type value; } Register; void reg_set(Register* reg) { (reg->address) = reg->value; } void reg_and(Register* reg) { (reg->address) &= reg->value; } void reg_or(Register* reg) { (reg->address) |= reg->value; } void reg_not(Register* reg) { (reg->address) &= (~reg->value); } register_value_type reg_get(Register* reg) { return (reg->address); } void reg_msk(Register* reg, register_value_type mask_value) { (reg->address) = ((reg_get(reg) & (~mask_value)) | (reg->value & mask_value)); } void bit_set(Register* reg) { (reg->address) |= (1UL << reg->value); } void bit_clr(Register* reg) { (reg->address) &= (1UL << reg->value); } void bit_not(Register* reg) { (reg->address) ^= (1UL << reg->value); } bool bit_get(Register* reg) { return (reg_get(reg) & (1UL << reg->value)) != 0U; } #endif // HAL_REGACCESS_2019_02_08_H_