| nRF5 SDK v12.0.0 |

Choose documentation: | nRF5 SDK | S130 SoftDevice API | S132 SoftDevice API | S212 SoftDevice API | S332 SoftDevice API

All Data Structures Functions Variables Typedefs Enumerations Enumerator Groups Pages
Modules | Macros | Typedefs | Functions
GPIOTE Handler
SDK common libraries

GPIOTE handler module. More...

## Modules
| GPIOTE events dispatcher configuration

## Macros
#define | GPIOTE_USER_NODE_SIZE 24
#define | NO_OF_PINS 32
#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 event_pins_low_to_high, uint32_t event_pins_high_to_low)
| GPIOTE event handler type.
typedef void(* | app_gpiote_input_event_handler_t )(void)
| GPIOTE input event handler type.

## Functions
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 pins_low_to_high_mask, uint32_t pins_high_to_low_mask, app_gpiote_event_handler_t event_handler)
| Function for registering a GPIOTE user. 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...
uint32_t | app_gpiote_input_event_handler_register (const uint8_t channel, const uint32_t pin, const uint32_t polarity, app_gpiote_input_event_handler_t event_handler)
| Function for registering event handlers for GPIOTE IN events. More...
uint32_t | app_gpiote_input_event_handler_unregister (const uint8_t channel)
| Function for unregistering event handlers for GPIOTE IN events. More...
uint32_t | app_gpiote_end_irq_event_handler_register (app_gpiote_input_event_handler_t event_handler)
| Function for registering event handler invoked at the end of a GPIOTE interrupt. More...
uint32_t | app_gpiote_end_irq_event_handler_unregister (void)
| Function for unregistering event handler invoked at the end of a GPIOTE interrupt. More...
uint32_t | app_gpiote_enable_interrupts (void)
| Function for enabling interrupts in the GPIOTE driver. More...
uint32_t | app_gpiote_disable_interrupts (void)
| Function for disabling interrupts in the GPIOTE driver. 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_USERS | Maximum number of GPIOTE users.

Return values

  Required | buffer 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_USERS | Maximum 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 24

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

#define NO_OF_PINS 32

Number of GPIO pins on the nRF5 chip.

## Function Documentation

uint32_t app_gpiote_disable_interrupts | ( | void |  | ) |

Function for disabling interrupts in the GPIOTE driver.

Return values

  NRF_SUCCESS | On success.
  NRF_ERROR_NOT_SUPPORTED | Driver doesn't support.

uint32_t app_gpiote_enable_interrupts | ( | void |  | ) |

Function for enabling interrupts in the GPIOTE driver.

Return values

  NRF_SUCCESS | On success.
  NRF_ERROR_NOT_SUPPORTED | Driver doesn't support.

uint32_t app_gpiote_end_irq_event_handler_register | ( | app_gpiote_input_event_handler_t | event_handler | ) |

Function for registering event handler invoked at the end of a GPIOTE interrupt.

Parameters

  [in] | event_handler | Event handler invoked at the end of the GPIOTE interrupt.

Return values

  NRF_SUCCESS | On success.
  NRF_ERROR_NOT_SUPPORTED | Driver doesn't support IN events.

uint32_t app_gpiote_end_irq_event_handler_unregister | ( | void |  | ) |

Function for unregistering event handler invoked at the end of a GPIOTE interrupt.

Return values

  NRF_SUCCESS | On success.
  NRF_ERROR_NOT_SUPPORTED | Driver doesn't support IN events.

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_users | Maximum number of GPIOTE users.
  [in] | p_buffer | Pointer 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_SUCCESS | Successful initialization.
  NRF_ERROR_INVALID_PARAM | Invalid parameter (buffer not aligned to a 4 byte boundary).

uint32_t app_gpiote_input_event_handler_register | ( | const uint8_t | channel,
|  | const uint32_t | pin,
|  | const uint32_t | polarity,
|  | app_gpiote_input_event_handler_t | event_handler
| ) |  |

Function for registering event handlers for GPIOTE IN events.

Parameters

  [in] | channel | GPIOTE channel [0..3].
  [in] | pin | Pins associated with GPIOTE channel. Changes on following pins will generate events.
  [in] | polarity | Specify operation on input that shall trigger IN event.
  [in] | event_handler | Event handler invoked on the IN event in the GPIOTE interrupt.

Return values

  NRF_SUCCESS | On success.
  NRF_ERROR_INVALID_PARAM | Invalid channel or pin number.
  NRF_ERROR_NOT_SUPPORTED | Driver doesn't support IN events.

uint32_t app_gpiote_input_event_handler_unregister | ( | const uint8_t | channel | ) |

Function for unregistering event handlers for GPIOTE IN events.

Return values

  NRF_SUCCESS | On success.
  NRF_ERROR_NOT_SUPPORTED | Driver doesn't support IN events.

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_id | Id of user to check.
  [out] | p_pins | 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'.

Return values

  NRF_SUCCESS | On success.
  NRF_ERROR_INVALID_PARAM | Invalid user_id provided, No a valid user.
  NRF_ERROR_INALID_STATE | If 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_id | Id of user to enable.

Return values

  NRF_SUCCESS | On success.
  NRF_ERROR_INVALID_PARAM | Invalid user_id provided, No a valid user.
  NRF_ERROR_INALID_STATE | If 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_id | Id of user to enable.

Return values

  NRF_SUCCESS | On success.
  NRF_ERROR_INVALID_PARAM | Invalid user_id provided, No a valid user.
  NRF_ERROR_INALID_STATE | If 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 | pins_low_to_high_mask,
|  | uint32_t | pins_high_to_low_mask,
|  | app_gpiote_event_handler_t | event_handler
| ) |  |

Function for registering a GPIOTE user.

Parameters

  [out] | p_user_id | Id for the new GPIOTE user.
  [in] | pins_low_to_high_mask | Mask defining which pins will generate events to this user when state is changed from low->high.
  [in] | pins_high_to_low_mask | Mask defining which pins will generate events to this user when state is changed from high->low.
  [in] | event_handler | Pointer to function to be executed when an event occurs.

Return values

  NRF_SUCCESS | Successful initialization.
  NRF_ERROR_INVALID_PARAM | Invalid parameter (buffer not aligned to a 4 byte boundary).
  NRF_ERROR_INALID_STATE | If app_gpiote_init has not been called on the GPIOTE module.
  NRF_ERROR_NO_MEM | Returned if the application tries to register more users than defined when the GPIOTE module was initialized in app_gpiote_init.