From 3fc55b5fd4642c391cf2fac370555a1dfc3ac8bd Mon Sep 17 00:00:00 2001 From: Romain Goyet Date: Fri, 10 Jun 2016 14:59:51 +0200 Subject: [PATCH] Ion: Cleaner macros Change-Id: I81cc67b04b9e0d8053f098a9c363b7f56a72481f --- ion/src/device/registers/registers.h | 31 +++++++++++++++++++++------- 1 file changed, 23 insertions(+), 8 deletions(-) diff --git a/ion/src/device/registers/registers.h b/ion/src/device/registers/registers.h index 861d45917..8e6cfc3be 100644 --- a/ion/src/device/registers/registers.h +++ b/ion/src/device/registers/registers.h @@ -7,8 +7,29 @@ * if (RCC_CR & HSIRDY) { } */ -#define BIT_MASK(high, low) ((((uint32_t)1<<((high)-(low)+1))-1)<<(low)) -#define BIT_VALUE(value, high, low) (((value)<<(low))&BIT_MASK(high, low)) + +// Bit manipulation helpers + +// 32 bits value where bits between HIGH and LOW are 1 and others are 0 +#define BIT_RANGE_MASK(high, low) ((((uint32_t)1<<((high)-(low)+1))-1)<<(low)) + +// 32 bits value where bits between HIGH and LOW are set to VALUE and others to 0 +#define BIT_RANGE_VALUE(value, high, low) (((value)<<(low))&BIT_RANGE_MASK(high, low)) + +// Bit mask for a register field defined by LOW_BIT_FIELD and HIGH_BIT_FIELD +#define REGISTER_FIELD_MASK(field) (BIT_RANGE_MASK(HIGH_BIT_##field,LOW_BIT_##field)) + +// Value ready to be OR-ed to set a FIELD in a register +#define REGISTER_FIELD_VALUE(field, value) (BIT_RANGE_VALUE(value,HIGH_BIT_##field,LOW_BIT_##field)) + +// Set the value of a field defined by LOW_BIT_FIELD and HIGH_BIT_FIELD +#define REGISTER_SET_VALUE(reg, field, value) (reg = ((reg&(~REGISTER_FIELD_MASK(field)))|REGISTER_FIELD_VALUE(field,value))) + +// Get the value of a FIELD defined by LOW_BIT_FIELD and HIGH_BIT_FIELD +#define REGISTER_GET_VALUE(reg, field) ((reg & REGISTER_FIELD_MASK(field) >> LOW_BIT_##field)) + +//#define SET(reg, field) (reg |= field) +//#define CLEAR(reg, field) (reg &= ~field) #include "rcc.h" #include "gpio.h" @@ -16,9 +37,3 @@ #include "dma.h" #include "cm4.h" //#include "ltdc.h" - -#define REGISTER_FIELD_MASK(field) (BIT_MASK(HIGH_BIT_##field,LOW_BIT_##field)) -#define REGISTER_FIELD_VALUE(field, value) (BIT_VALUE(value,HIGH_BIT_##field,LOW_BIT_##field)) -#define REGISTER_SET_VALUE(reg, field, value) (reg = ((reg&(~REGISTER_FIELD_MASK(field)))|REGISTER_FIELD_VALUE(field,value))) -//#define SET(reg, field) (reg |= field) -//#define CLEAR(reg, field) (reg &= ~field)