tools: Added *REG_BIT_MSK_AND_SET macros
Added CLR_REG_BIT_MSK_AND_SET and TOG_SET_REG_BIT_MSK_AND_SET because we need version of CLR_REG_BIT_MSK and TOG_SET_REG_BIT_MSK that allow us to OR in bits before the register is written. Signed-off-by: George McCollister <george.mccollister@gmail.com>
This commit is contained in:
parent
40d9ffcb6b
commit
9eb551c127
@ -34,8 +34,11 @@
|
|||||||
#define CLR_REG_BIT(REG, BIT) SET_REG(REG, (~BIT))
|
#define CLR_REG_BIT(REG, BIT) SET_REG(REG, (~BIT))
|
||||||
|
|
||||||
/* Clear register bit masking out some bits that must not be touched. */
|
/* Clear register bit masking out some bits that must not be touched. */
|
||||||
|
#define CLR_REG_BIT_MSK_AND_SET(REG, MSK, BIT, EXTRA_BITS) \
|
||||||
|
SET_REG(REG, (GET_REG(REG) & MSK & (~BIT)) | (EXTRA_BITS))
|
||||||
|
|
||||||
#define CLR_REG_BIT_MSK(REG, MSK, BIT) \
|
#define CLR_REG_BIT_MSK(REG, MSK, BIT) \
|
||||||
SET_REG(REG, (GET_REG(REG) & MSK & (~BIT)))
|
CLR_REG_BIT_MSK_AND_SET(REG, MSK, BIT, 0)
|
||||||
|
|
||||||
/* Get masked out bit value. */
|
/* Get masked out bit value. */
|
||||||
#define GET_REG_BIT(REG, BIT) (GET_REG(REG) & BIT)
|
#define GET_REG_BIT(REG, BIT) (GET_REG(REG) & BIT)
|
||||||
@ -50,7 +53,7 @@
|
|||||||
*
|
*
|
||||||
* TODO: We may need a faster implementation of that one?
|
* TODO: We may need a faster implementation of that one?
|
||||||
*/
|
*/
|
||||||
#define TOG_SET_REG_BIT_MSK(REG, MSK, BIT) \
|
#define TOG_SET_REG_BIT_MSK_AND_SET(REG, MSK, BIT, EXTRA_BITS) \
|
||||||
do { \
|
do { \
|
||||||
register uint16_t toggle_mask = GET_REG(REG) & (MSK); \
|
register uint16_t toggle_mask = GET_REG(REG) & (MSK); \
|
||||||
register uint16_t bit_selector; \
|
register uint16_t bit_selector; \
|
||||||
@ -59,7 +62,10 @@ do { \
|
|||||||
toggle_mask ^= bit_selector; \
|
toggle_mask ^= bit_selector; \
|
||||||
} \
|
} \
|
||||||
} \
|
} \
|
||||||
SET_REG(REG, toggle_mask); \
|
SET_REG(REG, toggle_mask | (EXTRA_BITS)); \
|
||||||
} while (0)
|
} while (0)
|
||||||
|
|
||||||
|
#define TOG_SET_REG_BIT_MSK(REG, MSK, BIT) \
|
||||||
|
TOG_SET_REG_BIT_MSK_AND_SET(REG, MSK, BIT, 0)
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
Loading…
x
Reference in New Issue
Block a user