nRF5 SDK v17.1.0
Modules | Data Structures | Macros | Typedefs | Functions
GPIOTE Handler

GPIOTE handler module. More...

Modules

 GPIOTE events dispatcher configuration
 

Data Structures

struct  app_gpiote_user_pin_config_t
 Single pin configuration. More...
 

Macros

#define GPIOTE_USER_NODE_SIZE   ((4*sizeof(uint32_t)*GPIO_COUNT)+8)
 
#define APP_GPIOTE_BUF_SIZE(MAX_USERS)   ((MAX_USERS) * GPIOTE_USER_NODE_SIZE)
 Compute number of bytes required to hold the GPIOTE data structures. More...
 
#define APP_GPIOTE_INIT(MAX_USERS)
 Macro for initializing the GPIOTE module. More...
 

Typedefs

typedef uint8_t app_gpiote_user_id_t
 
typedef void(* app_gpiote_event_handler_t )(uint32_t const *p_event_pins_low_to_high, uint32_t const *p_event_pins_high_to_low)
 GPIOTE event handler type.
 
typedef void(* app_gpiote_input_event_handler_t )(void)
 GPIOTE input event handler type.
 

Functions

 STATIC_ASSERT (NRF_GPIOTE_POLARITY_LOTOHI<=3)
 
 STATIC_ASSERT (NRF_GPIOTE_POLARITY_HITOLO<=3)
 
 STATIC_ASSERT (NRF_GPIOTE_POLARITY_TOGGLE<=3)
 
uint32_t app_gpiote_init (uint8_t max_users, void *p_buffer)
 Function for initializing the GPIOTE module. More...
 
uint32_t app_gpiote_user_register (app_gpiote_user_id_t *p_user_id, uint32_t const *p_pins_low_to_high_mask, uint32_t const *p_pins_high_to_low_mask, app_gpiote_event_handler_t event_handler)
 Function for registering a GPIOTE user. More...
 
uint32_t app_gpiote_user_register_ex (app_gpiote_user_id_t *p_user_id, app_gpiote_user_pin_config_t const *p_pins_config, size_t pin_count, app_gpiote_event_handler_t event_handler)
 Function for registering GPIOTE user using pins configuration list. More...
 
uint32_t app_gpiote_user_enable (app_gpiote_user_id_t user_id)
 Function for informing the GPIOTE module that the specified user wants to use the GPIOTE module. More...
 
uint32_t app_gpiote_user_disable (app_gpiote_user_id_t user_id)
 Function for informing the GPIOTE module that the specified user is done using the GPIOTE module. More...
 
uint32_t app_gpiote_pins_state_get (app_gpiote_user_id_t user_id, uint32_t *p_pins)
 Function for getting the state of the pins which are registered for the specified user. More...
 

Detailed Description

GPIOTE handler module.

The GPIOTE handler allows several modules ("users") to share the GPIOTE interrupt, each user defining a set of pins able to generate events to the user. When a GPIOTE interrupt occurs, the GPIOTE interrupt handler will call the event handler of each user for which at least one of the pins generated an event.

The GPIOTE users are responsible for configuring all their corresponding pins, except the SENSE field, which should be initialized to GPIO_PIN_CNF_SENSE_Disabled. The SENSE field will be updated by the GPIOTE module when it is enabled or disabled, and also while it is enabled.

The module specifies on which pins events should be generated if the pin(s) goes from low->high or high->low or both directions.

Note
Even if the application is using the Scheduler, the GPIOTE event handlers will be called directly from the GPIOTE interrupt handler.
Warning
If multiple users registers for the same pins the behavior for those pins are undefined.

Macro Definition Documentation

#define APP_GPIOTE_BUF_SIZE (   MAX_USERS)    ((MAX_USERS) * GPIOTE_USER_NODE_SIZE)

Compute number of bytes required to hold the GPIOTE data structures.

Parameters
[in]MAX_USERSMaximum number of GPIOTE users.
Return values
Requiredbuffer size (in bytes).
#define APP_GPIOTE_INIT (   MAX_USERS)
Value:
do \
{ \
static uint32_t app_gpiote_buf[CEIL_DIV(APP_GPIOTE_BUF_SIZE(MAX_USERS), sizeof(uint32_t))];\
uint32_t ERR_CODE = app_gpiote_init((MAX_USERS), app_gpiote_buf); \
APP_ERROR_CHECK(ERR_CODE); \
} while (0)

Macro for initializing the GPIOTE module.

It will handle dimensioning and allocation of the memory buffer required by the module, making sure that the buffer is correctly aligned.

Parameters
[in]MAX_USERSMaximum number of GPIOTE users.
Note
Since this macro allocates a buffer, it must only be called once (it is OK to call it several times as long as it is from the same location, e.g. to do a reinitialization).
#define GPIOTE_USER_NODE_SIZE   ((4*sizeof(uint32_t)*GPIO_COUNT)+8)

Size of app_gpiote.gpiote_user_t (only for use inside APP_GPIOTE_BUF_SIZE()).

Function Documentation

uint32_t app_gpiote_init ( uint8_t  max_users,
void *  p_buffer 
)

Function for initializing the GPIOTE module.

Note
Normally initialization should be done using the APP_GPIOTE_INIT() macro, as that will allocate the buffer needed by the GPIOTE module (including aligning the buffer correctly).
Parameters
[in]max_usersMaximum number of GPIOTE users.
[in]p_bufferPointer to memory buffer for internal use in the app_gpiote module. The size of the buffer can be computed using the APP_GPIOTE_BUF_SIZE() macro. The buffer must be aligned to a 4 byte boundary.
Return values
NRF_SUCCESSSuccessful initialization.
NRF_ERROR_INVALID_PARAMInvalid parameter (buffer not aligned to a 4 byte boundary).
uint32_t app_gpiote_pins_state_get ( app_gpiote_user_id_t  user_id,
uint32_t *  p_pins 
)

Function for getting the state of the pins which are registered for the specified user.

Parameters
[in]user_idId of user to check.
[out]p_pinsPointer to array of words with bit mask corresponding to the pins configured to generate events to the specified user. All bits corresponding to pins in the state 'high' will have value '1', all others will have value '0'. Size of array depends on number of ports in the device.
Return values
NRF_SUCCESSOn success.
NRF_ERROR_INVALID_PARAMInvalid user_id provided, No a valid user.
NRF_ERROR_INALID_STATEIf app_gpiote_init has not been called on the GPIOTE module.
uint32_t app_gpiote_user_disable ( app_gpiote_user_id_t  user_id)

Function for informing the GPIOTE module that the specified user is done using the GPIOTE module.

Parameters
[in]user_idId of user to enable.
Return values
NRF_SUCCESSOn success.
NRF_ERROR_INVALID_PARAMInvalid user_id provided, No a valid user.
NRF_ERROR_INALID_STATEIf app_gpiote_init has not been called on the GPIOTE module.
uint32_t app_gpiote_user_enable ( app_gpiote_user_id_t  user_id)

Function for informing the GPIOTE module that the specified user wants to use the GPIOTE module.

Parameters
[in]user_idId of user to enable.
Return values
NRF_SUCCESSOn success.
NRF_ERROR_INVALID_PARAMInvalid user_id provided, No a valid user.
NRF_ERROR_INALID_STATEIf app_gpiote_init has not been called on the GPIOTE module.
uint32_t app_gpiote_user_register ( app_gpiote_user_id_t *  p_user_id,
uint32_t const *  p_pins_low_to_high_mask,
uint32_t const *  p_pins_high_to_low_mask,
app_gpiote_event_handler_t  event_handler 
)

Function for registering a GPIOTE user.

Parameters
[out]p_user_idId for the new GPIOTE user.
[in]p_pins_low_to_high_maskPointer to word array with mask defining which pins will generate events to this user when state is changed from low->high. Size of array depends on number of ports in the device.
[in]p_pins_high_to_low_maskPointer to word array with mask defining which pins will generate events to this user when state is changed from high->low. Size of array depends on number of ports in the device.
[in]event_handlerPointer to function to be executed when an event occurs. Cannot be NULL.
Return values
NRF_SUCCESSSuccessful initialization.
NRF_ERROR_INALID_STATEIf app_gpiote_init has not been called on the GPIOTE module.
NRF_ERROR_NO_MEMReturned if the application tries to register more users than defined when the GPIOTE module was initialized in app_gpiote_init.
Note
The function can also return error codes from internally called nrf_drv_gpiote_in_init
See Also
app_gpiote_user_register_ex
uint32_t app_gpiote_user_register_ex ( app_gpiote_user_id_t *  p_user_id,
app_gpiote_user_pin_config_t const *  p_pins_config,
size_t  pin_count,
app_gpiote_event_handler_t  event_handler 
)

Function for registering GPIOTE user using pins configuration list.

Function for registering GPIOTE user that uses array of pins configuration. This function do not change pins configuration. Pins must be configured before calling this function.

Parameters
[out]p_user_idId for the new GPIOTE user.
[in]p_pins_configPointer to the array of pins configuration for the user.
[in]pin_countNumber of pins to configure for the user.
[in]event_handlerPointer to function to be executed when an event occurs. Cannot be NULL.
Return values
NRF_SUCCESSSuccessful user registration.
NRF_ERROR_INVALID_STATEIf app_gpiote_init has not been called before calling this function.
NRF_ERROR_NO_MEMReturned if the application tries to register more users than defined when the GPIOTE module was initialized in app_gpiote_init.
Note
The function can also return error codes from internally called nrf_drv_gpiote_in_init
See Also
app_gpiote_user_register

Documentation feedback | Developer Zone | Subscribe | Updated