Ion: Cleaner macros

Change-Id: I81cc67b04b9e0d8053f098a9c363b7f56a72481f
This commit is contained in:
Romain Goyet
2016-06-10 14:59:51 +02:00
parent d1ea456709
commit 3fc55b5fd4

View File

@@ -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)