Common module. More...
Macros | |
#define | NRFX_CHECK(module_enabled) NRFX_IS_ENABLED(module_enabled) |
Macro for checking if the specified identifier is defined and it has a non-zero value. | |
#define | NRFX_API_VER_AT_LEAST(major, minor, micro) |
Macro for checking if the configured API version is greater than or equal to the specified API version. | |
#define | NRFX_BIT(x) (1UL << (x)) |
Macro for creating unsigned integer with bit position x set. | |
#define | NRFX_BIT_MASK(x) (((x) == 32) ? UINT32_MAX : ((1UL << (x)) - 1)) |
Macro for returning bit mask or 0 if x is 0. | |
#define | NRFX_BIT_SIZE(x) ((x) << 3) |
Macro for returning size in bits for given size in bytes. | |
#define | NRFX_CONCAT_2(p1, p2) NRFX_CONCAT_2_(p1, p2) |
Macro for concatenating two tokens in macro expansion. | |
#define | NRFX_CONCAT_2_(p1, p2) p1 ## p2 |
Internal macro used by NRFX_CONCAT_2 to perform the expansion in two steps. | |
#define | NRFX_CONCAT_3(p1, p2, p3) NRFX_CONCAT_3_(p1, p2, p3) |
Macro for concatenating three tokens in macro expansion. | |
#define | NRFX_CONCAT_3_(p1, p2, p3) p1 ## p2 ## p3 |
Internal macro used by NRFX_CONCAT_3 to perform the expansion in two steps. | |
#define | NRFX_ABS(a) ((a) < (0) ? -(a) : (a)) |
Macro for computing the absolute value of an integer number. | |
#define | NRFX_FEATURE_PRESENT(periph_name, feature_name) |
Macro for checking whether any of the instance of the specified peripheral supports a given feature. | |
#define | NRFX_FOREACH_ENABLED(periph_name, macro, sep, off_code, ...) |
Macro for resolving provided user macro for enabled instances of a driver. | |
#define | NRFX_FOREACH_PRESENT(periph_name, macro, sep, off_code, ...) |
Macro for resolving provided user macro for present instances of a peripheral. | |
#define | NRFX_INSTANCE_CONCAT(periph_name, prefix, i, macro, ...) macro(NRFX_CONCAT(periph_name, prefix, i), __VA_ARGS__) |
Macro for resolving provided user macro on concatenated peripheral name and instance index. | |
#define | NRFX_INSTANCE_ENUM_LIST(periph_name) NRFX_FOREACH_ENABLED(periph_name, _NRFX_INST_ENUM, (), ()) |
Macro for creating a content for enum which is listing enabled driver instances. | |
#define | NRFX_INSTANCE_IRQ_HANDLERS(periph_name, periph_name_small) NRFX_FOREACH_ENABLED(periph_name, _NRFX_IRQ_HANDLER, (), (), periph_name_small) |
Macro for creating an interrupt handler for all enabled driver instances. | |
#define | NRFX_INSTANCE_IRQ_HANDLERS_EXT(periph_name, periph_name_small, ext_macro) NRFX_FOREACH_ENABLED(periph_name, _NRFX_IRQ_HANDLER_EXT, (), (), periph_name_small, ext_macro) |
Macro for creating an interrupt handler for all enabled driver instances with the specified extra parameter. | |
#define | NRFX_INSTANCE_IRQ_HANDLERS_DECLARE(periph_name, periph_name_small) NRFX_FOREACH_ENABLED(periph_name, _NRFX_IRQ_HANDLER_DECLARE, (), (), periph_name_small) |
Macro for declaring an interrupt handler for all enabled driver instances. | |
#define | NRFX_INSTANCE_IRQ_HANDLERS_LIST(periph_name, periph_name_small) NRFX_FOREACH_ENABLED(periph_name, _NRFX_IRQ_HANDLER_LIST, (), (), periph_name_small) |
Macro for generating comma-separated list of interrupt handlers for all enabled driver instances. | |
#define | NRFX_INSTANCE_PRESENT(_inst) NRFX_ARG_HAS_PARENTHESIS(NRFX_CONCAT(NRF_, _inst)) |
Macro for checking if given peripheral instance is present on the target. | |
#define | NRFX_MIN(a, b) ((a) < (b) ? (a) : (b)) |
Macro for getting the smaller value between two arguments. | |
#define | NRFX_MAX(a, b) ((a) > (b) ? (a) : (b)) |
Macro for getting the larger value between two arguments. | |
#define | NRFX_IN_RANGE(val, min, max) ((val) >= (min) && (val) <= (max)) |
Macro for checking if a given value is in a given range. | |
#define | NRFX_ROUNDED_DIV(a, b) ((((a) < 0) ^ ((b) < 0)) ? (((a) - (b) / 2) / (b)) : (((a) + (b) / 2) / (b))) |
Macro for performing rounded integer division (as opposed to truncating the result). | |
#define | NRFX_CEIL_DIV(a, b) ((((a) - 1) / (b)) + 1) |
Macro for performing integer division, making sure the result is rounded up. | |
#define | NRFX_ARRAY_SIZE(array) (sizeof(array) / sizeof((array)[0])) |
Macro for getting the number of elements in an array. | |
#define | NRFX_OFFSETOF(type, member) ((size_t) & (((type *)0)->member)) |
Macro for getting the offset (in bytes) from the beginning of a structure of the specified type to its specified member. | |
#define | NRFX_IS_POWER_OF_TWO(val) (((val) != 0) && ((val) & ((val) - 1)) == 0) |
Macro for checking whether given number is power of 2. | |
#define | NRFX_IS_EVEN(val) (((val) % 2) == 0) |
Macro for checking whether a given number is even. | |
#define | NRFX_EASYDMA_LENGTH_VALIDATE(peripheral, length1, length2) |
Macro for checking if given lengths of EasyDMA transfers do not exceed the limit of the specified peripheral. | |
#define | NRFX_WAIT_FOR(condition, attempts, delay_us, result) |
Macro for waiting until condition is met. | |
#define | NRFX_PERIPHERAL_ID_GET(base_addr) (uint16_t)(((uint32_t)(base_addr) >> 12) & 0x000001FF) |
Macro for getting the ID number of the specified peripheral. | |
#define | NRFX_IRQ_NUMBER_GET(base_addr) NRFX_PERIPHERAL_ID_GET(base_addr) |
Macro for getting the interrupt number assigned to a specific peripheral. | |
#define | NRFX_KHZ_TO_HZ(freq) ((freq) * 1000) |
Macro for converting frequency in kHz to Hz. | |
#define | NRFX_MHZ_TO_HZ(freq) ((freq) * 1000 * 1000) |
Macro for converting frequency in MHz to Hz. | |
Typedefs | |
typedef void(* | nrfx_irq_handler_t) (void) |
IRQ handler type. | |
Enumerations | |
enum | nrfx_drv_state_t { NRFX_DRV_STATE_UNINITIALIZED , NRFX_DRV_STATE_INITIALIZED , NRFX_DRV_STATE_POWERED_ON } |
Driver state. More... | |
Functions | |
__STATIC_INLINE bool | nrfx_is_in_ram (void const *p_object) |
Function for checking if an object is placed in the Data RAM region. | |
__STATIC_INLINE bool | nrfx_is_word_aligned (void const *p_object) |
Function for checking if an object is aligned to a 32-bit word. | |
__STATIC_INLINE IRQn_Type | nrfx_get_irq_number (void const *p_reg) |
Function for getting the interrupt number for the specified peripheral. | |
__STATIC_INLINE uint32_t | nrfx_bitpos_to_event (uint32_t bit) |
Function for converting an INTEN register bit position to the corresponding event identifier. | |
__STATIC_INLINE uint32_t | nrfx_event_to_bitpos (uint32_t event) |
Function for converting an event identifier to the corresponding INTEN register bit position. | |
Common module.
#define NRFX_ABS | ( | a | ) | ((a) < (0) ? -(a) : (a)) |
Macro for computing the absolute value of an integer number.
[in] | a | Input value. |
#define NRFX_API_VER_AT_LEAST | ( | major, | |
minor, | |||
micro | |||
) |
Macro for checking if the configured API version is greater than or equal to the specified API version.
[in] | major | Major API version. |
[in] | minor | Minor API version. |
[in] | micro | Micro API version. |
true | Configured API version is greater than or equal to the specified API version. |
false | Configured API version is smaller than the specified API version. |
#define NRFX_ARRAY_SIZE | ( | array | ) | (sizeof(array) / sizeof((array)[0])) |
Macro for getting the number of elements in an array.
[in] | array | Name of the array. |
#define NRFX_BIT | ( | x | ) | (1UL << (x)) |
Macro for creating unsigned integer with bit position x
set.
[in] | x | Bit position to be set. |
#define NRFX_BIT_MASK | ( | x | ) | (((x) == 32) ? UINT32_MAX : ((1UL << (x)) - 1)) |
Macro for returning bit mask or 0 if x
is 0.
[in] | x | Bit mask size. Bit mask has bits 0 through x-1 (inclusive) set. |
#define NRFX_BIT_SIZE | ( | x | ) | ((x) << 3) |
Macro for returning size in bits for given size in bytes.
[in] | x | Size in bytes. |
#define NRFX_CEIL_DIV | ( | a, | |
b | |||
) | ((((a) - 1) / (b)) + 1) |
Macro for performing integer division, making sure the result is rounded up.
A typical use case for this macro is to compute the number of objects with size b
required to hold a
number of bytes.
[in] | a | Numerator. |
[in] | b | Denominator. |
a
by b
, rounded up. #define NRFX_CHECK | ( | module_enabled | ) | NRFX_IS_ENABLED(module_enabled) |
Macro for checking if the specified identifier is defined and it has a non-zero value.
Normally, preprocessors treat all undefined identifiers as having the value zero. However, some tools, like static code analyzers, can issue a warning when such identifier is evaluated. This macro gives the possibility to suppress such warnings only in places where this macro is used for evaluation, not in the whole analyzed code.
#define NRFX_CONCAT_2 | ( | p1, | |
p2 | |||
) | NRFX_CONCAT_2_(p1, p2) |
Macro for concatenating two tokens in macro expansion.
[in] | p1 | First token. |
[in] | p2 | Second token. |
#define NRFX_CONCAT_3 | ( | p1, | |
p2, | |||
p3 | |||
) | NRFX_CONCAT_3_(p1, p2, p3) |
Macro for concatenating three tokens in macro expansion.
[in] | p1 | First token. |
[in] | p2 | Second token. |
[in] | p3 | Third token. |
#define NRFX_EASYDMA_LENGTH_VALIDATE | ( | peripheral, | |
length1, | |||
length2 | |||
) |
Macro for checking if given lengths of EasyDMA transfers do not exceed the limit of the specified peripheral.
[in] | peripheral | Peripheral to check the lengths against. |
[in] | length1 | First length to be checked. |
[in] | length2 | Second length to be checked (pass 0 if not needed). |
true | The length of buffers does not exceed the limit of the specified peripheral. |
false | The length of buffers exceeds the limit of the specified peripheral. |
#define NRFX_FEATURE_PRESENT | ( | periph_name, | |
feature_name | |||
) |
Macro for checking whether any of the instance of the specified peripheral supports a given feature.
Macro checks flags set in <device>_peripherals.h file.
Macro supports check on instances with following names:
[in] | periph_name | Peripheral name, e.g. SPIM. |
[in] | feature_name | Feature flag name suffix following an instance name, e.g. _FEATURE_HARDWARE_CSN_PRESENT. |
1 | At least one instance on current device supports a given feature. |
0 | None of peripheral instances supports a given feature. |
#define NRFX_FOREACH_ENABLED | ( | periph_name, | |
macro, | |||
sep, | |||
off_code, | |||
... | |||
) |
Macro for resolving provided user macro for enabled instances of a driver.
Macro checks if driver instances are enabled for all potential instaces of a peripheral. It takes peripheral name and checks whether NRFX_<peripheral><id>_ENABLED is set to 1 and if yes then provided macro is evaluated for given instance.
Macro supports check on instances with following names:
[in] | periph_name | Peripheral name, e.g. SPIM. |
[in] | macro | Macro which is resolved if driver instance is enabled. Macro has following arguments: macro(periph_name, prefix, i, ...). |
[in] | sep | Separator added between all evaluations, in parentheses. |
[in] | off_code | Code injected for disabled instances, in parentheses. |
#define NRFX_FOREACH_PRESENT | ( | periph_name, | |
macro, | |||
sep, | |||
off_code, | |||
... | |||
) |
Macro for resolving provided user macro for present instances of a peripheral.
Macro checks if peripheral instances are present by checking if there is a token NRF_<periph_name><id> defined with wrapped in parenthesis value.
Macro supports check on instances with following names:
[in] | periph_name | Peripheral name, e.g. SPIM. |
[in] | macro | Macro which is resolved if peripheral instance is present. Macro has following arguments: macro(periph_name, prefix, i, ...). |
[in] | sep | Separator added between all evaluations, in parentheses. |
[in] | off_code | Code injected for disabled instances, in parentheses. |
#define NRFX_IN_RANGE | ( | val, | |
min, | |||
max | |||
) | ((val) >= (min) && (val) <= (max)) |
Macro for checking if a given value is in a given range.
val
is evaluated twice.[in] | val | A value to be checked. |
[in] | min | The lower bound (inclusive). |
[in] | max | The upper bound (inclusive). |
true | The value is in the given range. |
false | The value is out of the given range. |
#define NRFX_INSTANCE_CONCAT | ( | periph_name, | |
prefix, | |||
i, | |||
macro, | |||
... | |||
) | macro(NRFX_CONCAT(periph_name, prefix, i), __VA_ARGS__) |
Macro for resolving provided user macro on concatenated peripheral name and instance index.
Execute provided macro with single argument <instance> that is the concatenation of periph_name
, prefix
and i
.
[in] | i | Instance index. |
[in] | periph_name | Peripheral name, e.g. SPIM. |
[in] | prefix | Prefix added before instance index, e.g. some device has instances named like SPIM00. First 0 is passed here as prefix. |
[in] | macro | Macro which is executed. |
[in] | ... | Variable length arguments passed to the macro . Macro has following arguments: macro(instance, ...). |
#define NRFX_INSTANCE_ENUM_LIST | ( | periph_name | ) | NRFX_FOREACH_ENABLED(periph_name, _NRFX_INST_ENUM, (), ()) |
Macro for creating a content for enum which is listing enabled driver instances.
It creates comma separated list of entries like NRFX_<instance_name>INST_IDX, e.g. (NRFX_SPIM0_INST_IDX) for all enabled instances (NRFX<instance_name>_ENABLED is set to 1). It should be called within enum declaration. Created enum is used by the driver to index all enabled instances of the driver.
[in] | periph_name | Peripheral name (e.g. SPIM). |
#define NRFX_INSTANCE_IRQ_HANDLERS | ( | periph_name, | |
periph_name_small | |||
) | NRFX_FOREACH_ENABLED(periph_name, _NRFX_IRQ_HANDLER, (), (), periph_name_small) |
Macro for creating an interrupt handler for all enabled driver instances.
Macro creates a set of functions which calls generic irq_handler
function with two parameters:
Generic interrupt handler function with above mentioned parameters named irq_handler
must be implemented in the driver.
[in] | periph_name | Peripheral name, e.g. SPIM. |
[in] | periph_name_small | Peripheral name written with small letters, e.g. spim. |
#define NRFX_INSTANCE_IRQ_HANDLERS_DECLARE | ( | periph_name, | |
periph_name_small | |||
) | NRFX_FOREACH_ENABLED(periph_name, _NRFX_IRQ_HANDLER_DECLARE, (), (), periph_name_small) |
Macro for declaring an interrupt handler for all enabled driver instances.
Macro creates set of function declarations. It is intended to be used in the driver header.
[in] | periph_name | Peripheral name, e.g. SPIM. |
[in] | periph_name_small | Peripheral name written with small letters, e.g. spim. |
#define NRFX_INSTANCE_IRQ_HANDLERS_EXT | ( | periph_name, | |
periph_name_small, | |||
ext_macro | |||
) | NRFX_FOREACH_ENABLED(periph_name, _NRFX_IRQ_HANDLER_EXT, (), (), periph_name_small, ext_macro) |
Macro for creating an interrupt handler for all enabled driver instances with the specified extra parameter.
Macro creates set of function which calls generic irq_handler
function with three parameters:
ext_macro
called with peripheral name suffix (e.g. 01 for TIMER01)Generic interrupt handler function with above mentioned parameters named irq_handler
must be implemented in the driver.
[in] | periph_name | Peripheral name, e.g. SPIM. |
[in] | periph_name_small | Peripheral name written with small letters, e.g. rtc. |
[in] | ext_macro | External macro to be executed for each instance. |
#define NRFX_INSTANCE_IRQ_HANDLERS_LIST | ( | periph_name, | |
periph_name_small | |||
) | NRFX_FOREACH_ENABLED(periph_name, _NRFX_IRQ_HANDLER_LIST, (), (), periph_name_small) |
Macro for generating comma-separated list of interrupt handlers for all enabled driver instances.
Interrupt handlers are generated using NRFX_INSTANCE_IRQ_HANDLERS. It is intended to be used to create a list which is used for passing an interrupt handler function to the PRS driver.
[in] | periph_name | Peripheral name, e.g. SPIM. |
[in] | periph_name_small | Peripheral name written with small letters, e.g. spim. |
#define NRFX_INSTANCE_PRESENT | ( | _inst | ) | NRFX_ARG_HAS_PARENTHESIS(NRFX_CONCAT(NRF_, _inst)) |
Macro for checking if given peripheral instance is present on the target.
Macro utilizes the fact that for each existing instance a define is created which points to the memory mapped register set casted to a register set structure. It is wrapped in parenthesis and existance of parethesis wrapping is used to determine if instance exists. It if does not exist then token (e.g. NRF_SPIM10) is undefined so it does not have parenthesis wrapping.
Since macro returns literal 1 it can be used by other macros.
[in] | _inst | Instance, .e.g SPIM10. |
1 | If instance is present. |
0 | If instance is not present. |
#define NRFX_IRQ_NUMBER_GET | ( | base_addr | ) | NRFX_PERIPHERAL_ID_GET(base_addr) |
Macro for getting the interrupt number assigned to a specific peripheral.
For peripherals in Nordic SoCs, the IRQ number assigned to a peripheral is equal to its ID number. See the chapter "Peripheral interface" (sections "Peripheral ID" and "Interrupts") in the Product Specification.
[in] | base_addr | Peripheral base address or pointer. |
#define NRFX_IS_EVEN | ( | val | ) | (((val) % 2) == 0) |
Macro for checking whether a given number is even.
[in] | val | Tested value. |
true | The value is even. |
false | The value is odd. |
#define NRFX_IS_POWER_OF_TWO | ( | val | ) | (((val) != 0) && ((val) & ((val) - 1)) == 0) |
Macro for checking whether given number is power of 2.
[in] | val | Tested value. |
true | The value is power of 2. |
false | The value is not power of 2. |
#define NRFX_KHZ_TO_HZ | ( | freq | ) | ((freq) * 1000) |
Macro for converting frequency in kHz to Hz.
[in] | freq | Frequency value in kHz. |
freq
kHz. #define NRFX_MAX | ( | a, | |
b | |||
) | ((a) > (b) ? (a) : (b)) |
Macro for getting the larger value between two arguments.
[in] | a | First argument. |
[in] | b | Second argument. |
#define NRFX_MHZ_TO_HZ | ( | freq | ) | ((freq) * 1000 * 1000) |
Macro for converting frequency in MHz to Hz.
[in] | freq | Frequency value in MHz. |
freq
MHz. #define NRFX_MIN | ( | a, | |
b | |||
) | ((a) < (b) ? (a) : (b)) |
Macro for getting the smaller value between two arguments.
[in] | a | First argument. |
[in] | b | Second argument. |
#define NRFX_OFFSETOF | ( | type, | |
member | |||
) | ((size_t) & (((type *)0)->member)) |
Macro for getting the offset (in bytes) from the beginning of a structure of the specified type to its specified member.
[in] | type | Structure type. |
[in] | member | Structure member whose offset is searched for. |
#define NRFX_PERIPHERAL_ID_GET | ( | base_addr | ) | (uint16_t)(((uint32_t)(base_addr) >> 12) & 0x000001FF) |
Macro for getting the ID number of the specified peripheral.
For peripherals in Nordic SoCs, there is a direct relationship between their ID numbers and their base addresses. See the chapter "Peripheral interface" (section "Peripheral ID") in the Product Specification.
[in] | base_addr | Peripheral base address or pointer. |
#define NRFX_ROUNDED_DIV | ( | a, | |
b | |||
) | ((((a) < 0) ^ ((b) < 0)) ? (((a) - (b) / 2) / (b)) : (((a) + (b) / 2) / (b))) |
Macro for performing rounded integer division (as opposed to truncating the result).
[in] | a | Numerator. |
[in] | b | Denominator. |
a
by b
. #define NRFX_WAIT_FOR | ( | condition, | |
attempts, | |||
delay_us, | |||
result | |||
) |
Macro for waiting until condition is met.
[in] | condition | Condition to meet. |
[in] | attempts | Maximum number of condition checks. Must not be 0. |
[in] | delay_us | Delay between consecutive checks, in microseconds. |
[out] | result | Boolean variable to store the result of the wait process. Set to true if the condition is met or false otherwise. |
enum nrfx_drv_state_t |
__STATIC_INLINE uint32_t nrfx_bitpos_to_event | ( | uint32_t | bit | ) |
Function for converting an INTEN register bit position to the corresponding event identifier.
The event identifier is the offset between the event register address and the peripheral base address, and is equal (thus, can be directly cast) to the corresponding value of the enumerated type from HAL (nrf_*_event_t).
[in] | bit | INTEN register bit position. |
__STATIC_INLINE uint32_t nrfx_event_to_bitpos | ( | uint32_t | event | ) |
Function for converting an event identifier to the corresponding INTEN register bit position.
The event identifier is the offset between the event register address and the peripheral base address, and is equal (thus, can be directly cast) to the corresponding value of the enumerated type from HAL (nrf_*_event_t).
[in] | event | Event identifier. |
__STATIC_INLINE IRQn_Type nrfx_get_irq_number | ( | void const * | p_reg | ) |
Function for getting the interrupt number for the specified peripheral.
[in] | p_reg | Peripheral base pointer. |
__STATIC_INLINE bool nrfx_is_in_ram | ( | void const * | p_object | ) |
Function for checking if an object is placed in the Data RAM region.
Several peripherals (the ones using EasyDMA) require the transfer buffers to be placed in the Data RAM region. This function can be used to check if this condition is met.
[in] | p_object | Pointer to an object whose location is to be checked. |
true | The pointed object is located in the Data RAM region. |
false | The pointed object is not located in the Data RAM region. |
__STATIC_INLINE bool nrfx_is_word_aligned | ( | void const * | p_object | ) |
Function for checking if an object is aligned to a 32-bit word.
Several peripherals (the ones using EasyDMA) require the transfer buffers to be aligned to a 32-bit word. This function can be used to check if this condition is met.
[in] | p_object | Pointer to an object whose location is to be checked. |
true | The pointed object is aligned to a 32-bit word. |
false | The pointed object is not aligned to a 32-bit word. |