mirror of
https://github.com/UpsilonNumworks/Upsilon.git
synced 2026-03-27 01:29:58 +01:00
Ion: Cleaner macros
Change-Id: I81cc67b04b9e0d8053f098a9c363b7f56a72481f
This commit is contained in:
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user