19#ifndef MCUXCLOSCCASAFO_SFRACCESS_H_
20#define MCUXCLOSCCASAFO_SFRACCESS_H_
22#include <mcuxClConfig.h>
23#include <platform_specific_headers.h>
27#define MCUXCLOSCCASAFO_PASTE(a,b) a ## b
28#define MCUXCLOSCCASAFO_CONCAT(a,b) MCUXCLOSCCASAFO_PASTE(a,b)
29#define MCUXCLOSCCASAFO_SFR_FIELD(prefix,sfr,field) MCUXCLOSCCASAFO_CONCAT(prefix, sfr ## _ ## field)
33#define MCUXCLOSCCASAFO_SFR_FIELD_MASK(sfr, field) MCUXCLOSCCASAFO_CONCAT(MCUXCLOSCCASAFO_SFR_FIELD(SAFO_SFR_PREFIX,sfr,field), _MASK)
34#define MCUXCLOSCCASAFO_SFR_FIELD_SHIFT(sfr, field) MCUXCLOSCCASAFO_CONCAT(MCUXCLOSCCASAFO_SFR_FIELD(SAFO_SFR_PREFIX,sfr,field), _SHIFT)
35#define MCUXCLOSCCASAFO_SFR_FIELD_FORMAT(sfr, field, val) (MCUXCLOSCCASAFO_SFR_FIELD(SAFO_SFR_PREFIX,sfr,field) (val))
42#define MCUXCLOSCCASAFO_SFR_READ(sfr) \
43 MCUX_CSSL_ANALYSIS_START_SUPPRESS_TYPECAST_INTEGER_TO_POINTER("SAFO base and SFR addresses will always be 32-bit aligned.") \
44 (SAFO_SFR_BASE->SAFO_SFR_NAME(sfr)) \
45 MCUX_CSSL_ANALYSIS_STOP_SUPPRESS_TYPECAST_INTEGER_TO_POINTER()
48#define MCUXCLOSCCASAFO_SFR_WRITE(sfr, value) \
49 MCUX_CSSL_ANALYSIS_START_SUPPRESS_TYPECAST_INTEGER_TO_POINTER("SAFO base and SFR addresses will always be 32-bit aligned.") \
50 do{ SAFO_SFR_BASE->SAFO_SFR_NAME(sfr) = (value); } while(false) \
51 MCUX_CSSL_ANALYSIS_STOP_SUPPRESS_TYPECAST_INTEGER_TO_POINTER()
54#define MCUXCLOSCCASAFO_SFR_BITREAD(sfr, bit) \
55 MCUX_CSSL_ANALYSIS_START_SUPPRESS_TYPECAST_INTEGER_TO_POINTER("SAFO base and SFR addresses will always be 32-bit aligned.") \
56 ((SAFO_SFR_BASE->SAFO_SFR_NAME(sfr) & MCUXCLOSCCASAFO_SFR_FIELD_MASK(sfr, bit)) >> MCUXCLOSCCASAFO_SFR_FIELD_SHIFT(sfr, bit)) \
57 MCUX_CSSL_ANALYSIS_STOP_SUPPRESS_TYPECAST_INTEGER_TO_POINTER()
60#define MCUXCLOSCCASAFO_SFR_BITSET(sfr, bit) \
61 MCUX_CSSL_ANALYSIS_START_SUPPRESS_TYPECAST_INTEGER_TO_POINTER("SAFO base and SFR addresses will always be 32-bit aligned.") \
62 do{ SAFO_SFR_BASE->SAFO_SFR_NAME(sfr) |= MCUXCLOSCCASAFO_SFR_FIELD_MASK(sfr, bit); } while(false) \
63 MCUX_CSSL_ANALYSIS_STOP_SUPPRESS_TYPECAST_INTEGER_TO_POINTER()
66#define MCUXCLOSCCASAFO_SFR_BITCLEAR(sfr, bit) \
67 MCUX_CSSL_ANALYSIS_START_SUPPRESS_TYPECAST_INTEGER_TO_POINTER("SAFO base and SFR addresses will always be 32-bit aligned.") \
68 do{ SAFO_SFR_BASE->SAFO_SFR_NAME(sfr) &= (~ (uint32_t) MCUXCLOSCCASAFO_SFR_FIELD_MASK(sfr, bit)); } while(false) \
69 MCUX_CSSL_ANALYSIS_STOP_SUPPRESS_TYPECAST_INTEGER_TO_POINTER()
72#define MCUXCLOSCCASAFO_SFR_BITVALSET(sfr, bit, val) \
73 MCUX_CSSL_ANALYSIS_START_SUPPRESS_TYPECAST_INTEGER_TO_POINTER("SAFO base and SFR addresses will always be 32-bit aligned.") \
74 do{ uint32_t temp = SAFO_SFR_BASE->SAFO_SFR_NAME(sfr) & (~ (uint32_t) MCUXCLOSCCASAFO_SFR_FIELD_MASK(sfr, bit)); \
75 SAFO_SFR_BASE->SAFO_SFR_NAME(sfr) = ((val) << MCUXCLOSCCASAFO_SFR_FIELD_SHIFT(sfr, bit)) & MCUXCLOSCCASAFO_SFR_FIELD_MASK(sfr, bit); \
76 MCUX_CSSL_ANALYSIS_STOP_SUPPRESS_TYPECAST_INTEGER_TO_POINTER() \