123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582 |
- #ifndef NRF_GPIOTE_H__
- #define NRF_GPIOTE_H__
- #include <nrfx.h>
- #ifdef __cplusplus
- extern "C" {
- #endif
- #if defined(GPIOTE_CONFIG_PORT_Msk) || defined(__NRFX_DOXYGEN__)
- #define GPIOTE_CONFIG_PORT_PIN_Msk (GPIOTE_CONFIG_PORT_Msk | GPIOTE_CONFIG_PSEL_Msk)
- #else
- #define GPIOTE_CONFIG_PORT_PIN_Msk GPIOTE_CONFIG_PSEL_Msk
- #endif
-
- typedef enum
- {
- NRF_GPIOTE_POLARITY_LOTOHI = GPIOTE_CONFIG_POLARITY_LoToHi,
- NRF_GPIOTE_POLARITY_HITOLO = GPIOTE_CONFIG_POLARITY_HiToLo,
- NRF_GPIOTE_POLARITY_TOGGLE = GPIOTE_CONFIG_POLARITY_Toggle
- } nrf_gpiote_polarity_t;
- typedef enum
- {
- NRF_GPIOTE_INITIAL_VALUE_LOW = GPIOTE_CONFIG_OUTINIT_Low,
- NRF_GPIOTE_INITIAL_VALUE_HIGH = GPIOTE_CONFIG_OUTINIT_High
- } nrf_gpiote_outinit_t;
- typedef enum
- {
- NRF_GPIOTE_TASKS_OUT_0 = offsetof(NRF_GPIOTE_Type, TASKS_OUT[0]),
- NRF_GPIOTE_TASKS_OUT_1 = offsetof(NRF_GPIOTE_Type, TASKS_OUT[1]),
- NRF_GPIOTE_TASKS_OUT_2 = offsetof(NRF_GPIOTE_Type, TASKS_OUT[2]),
- NRF_GPIOTE_TASKS_OUT_3 = offsetof(NRF_GPIOTE_Type, TASKS_OUT[3]),
- #if (GPIOTE_CH_NUM > 4) || defined(__NRFX_DOXYGEN__)
- NRF_GPIOTE_TASKS_OUT_4 = offsetof(NRF_GPIOTE_Type, TASKS_OUT[4]),
- NRF_GPIOTE_TASKS_OUT_5 = offsetof(NRF_GPIOTE_Type, TASKS_OUT[5]),
- NRF_GPIOTE_TASKS_OUT_6 = offsetof(NRF_GPIOTE_Type, TASKS_OUT[6]),
- NRF_GPIOTE_TASKS_OUT_7 = offsetof(NRF_GPIOTE_Type, TASKS_OUT[7]),
- #endif
- #if defined(GPIOTE_FEATURE_SET_PRESENT) || defined(__NRFX_DOXYGEN__)
- NRF_GPIOTE_TASKS_SET_0 = offsetof(NRF_GPIOTE_Type, TASKS_SET[0]),
- NRF_GPIOTE_TASKS_SET_1 = offsetof(NRF_GPIOTE_Type, TASKS_SET[1]),
- NRF_GPIOTE_TASKS_SET_2 = offsetof(NRF_GPIOTE_Type, TASKS_SET[2]),
- NRF_GPIOTE_TASKS_SET_3 = offsetof(NRF_GPIOTE_Type, TASKS_SET[3]),
- NRF_GPIOTE_TASKS_SET_4 = offsetof(NRF_GPIOTE_Type, TASKS_SET[4]),
- NRF_GPIOTE_TASKS_SET_5 = offsetof(NRF_GPIOTE_Type, TASKS_SET[5]),
- NRF_GPIOTE_TASKS_SET_6 = offsetof(NRF_GPIOTE_Type, TASKS_SET[6]),
- NRF_GPIOTE_TASKS_SET_7 = offsetof(NRF_GPIOTE_Type, TASKS_SET[7]),
- #endif
- #if defined(GPIOTE_FEATURE_CLR_PRESENT) || defined(__NRFX_DOXYGEN__)
- NRF_GPIOTE_TASKS_CLR_0 = offsetof(NRF_GPIOTE_Type, TASKS_CLR[0]),
- NRF_GPIOTE_TASKS_CLR_1 = offsetof(NRF_GPIOTE_Type, TASKS_CLR[1]),
- NRF_GPIOTE_TASKS_CLR_2 = offsetof(NRF_GPIOTE_Type, TASKS_CLR[2]),
- NRF_GPIOTE_TASKS_CLR_3 = offsetof(NRF_GPIOTE_Type, TASKS_CLR[3]),
- NRF_GPIOTE_TASKS_CLR_4 = offsetof(NRF_GPIOTE_Type, TASKS_CLR[4]),
- NRF_GPIOTE_TASKS_CLR_5 = offsetof(NRF_GPIOTE_Type, TASKS_CLR[5]),
- NRF_GPIOTE_TASKS_CLR_6 = offsetof(NRF_GPIOTE_Type, TASKS_CLR[6]),
- NRF_GPIOTE_TASKS_CLR_7 = offsetof(NRF_GPIOTE_Type, TASKS_CLR[7]),
- #endif
- } nrf_gpiote_tasks_t;
- typedef enum
- {
- NRF_GPIOTE_EVENTS_IN_0 = offsetof(NRF_GPIOTE_Type, EVENTS_IN[0]),
- NRF_GPIOTE_EVENTS_IN_1 = offsetof(NRF_GPIOTE_Type, EVENTS_IN[1]),
- NRF_GPIOTE_EVENTS_IN_2 = offsetof(NRF_GPIOTE_Type, EVENTS_IN[2]),
- NRF_GPIOTE_EVENTS_IN_3 = offsetof(NRF_GPIOTE_Type, EVENTS_IN[3]),
- #if (GPIOTE_CH_NUM > 4) || defined(__NRFX_DOXYGEN__)
- NRF_GPIOTE_EVENTS_IN_4 = offsetof(NRF_GPIOTE_Type, EVENTS_IN[4]),
- NRF_GPIOTE_EVENTS_IN_5 = offsetof(NRF_GPIOTE_Type, EVENTS_IN[5]),
- NRF_GPIOTE_EVENTS_IN_6 = offsetof(NRF_GPIOTE_Type, EVENTS_IN[6]),
- NRF_GPIOTE_EVENTS_IN_7 = offsetof(NRF_GPIOTE_Type, EVENTS_IN[7]),
- #endif
- NRF_GPIOTE_EVENTS_PORT = offsetof(NRF_GPIOTE_Type, EVENTS_PORT),
- } nrf_gpiote_events_t;
- typedef enum
- {
- NRF_GPIOTE_INT_IN0_MASK = GPIOTE_INTENSET_IN0_Msk,
- NRF_GPIOTE_INT_IN1_MASK = GPIOTE_INTENSET_IN1_Msk,
- NRF_GPIOTE_INT_IN2_MASK = GPIOTE_INTENSET_IN2_Msk,
- NRF_GPIOTE_INT_IN3_MASK = GPIOTE_INTENSET_IN3_Msk,
- #if (GPIOTE_CH_NUM > 4) || defined(__NRFX_DOXYGEN__)
- NRF_GPIOTE_INT_IN4_MASK = GPIOTE_INTENSET_IN4_Msk,
- NRF_GPIOTE_INT_IN5_MASK = GPIOTE_INTENSET_IN5_Msk,
- NRF_GPIOTE_INT_IN6_MASK = GPIOTE_INTENSET_IN6_Msk,
- NRF_GPIOTE_INT_IN7_MASK = GPIOTE_INTENSET_IN7_Msk,
- #endif
- NRF_GPIOTE_INT_PORT_MASK = (int)GPIOTE_INTENSET_PORT_Msk,
- } nrf_gpiote_int_t;
- #if (GPIOTE_CH_NUM == 4) || defined(__NRFX_DOXYGEN__)
- #define NRF_GPIOTE_INT_IN_MASK (NRF_GPIOTE_INT_IN0_MASK | NRF_GPIOTE_INT_IN1_MASK |\
- NRF_GPIOTE_INT_IN2_MASK | NRF_GPIOTE_INT_IN3_MASK)
- #else
- #define NRF_GPIOTE_INT_IN_MASK (NRF_GPIOTE_INT_IN0_MASK | NRF_GPIOTE_INT_IN1_MASK |\
- NRF_GPIOTE_INT_IN2_MASK | NRF_GPIOTE_INT_IN3_MASK |\
- NRF_GPIOTE_INT_IN4_MASK | NRF_GPIOTE_INT_IN5_MASK |\
- NRF_GPIOTE_INT_IN6_MASK | NRF_GPIOTE_INT_IN7_MASK)
- #endif
- __STATIC_INLINE void nrf_gpiote_task_set(nrf_gpiote_tasks_t task);
- __STATIC_INLINE uint32_t nrf_gpiote_task_addr_get(nrf_gpiote_tasks_t task);
- __STATIC_INLINE bool nrf_gpiote_event_is_set(nrf_gpiote_events_t event);
- __STATIC_INLINE void nrf_gpiote_event_clear(nrf_gpiote_events_t event);
- __STATIC_INLINE uint32_t nrf_gpiote_event_addr_get(nrf_gpiote_events_t event);
- __STATIC_INLINE void nrf_gpiote_int_enable(uint32_t mask);
- __STATIC_INLINE void nrf_gpiote_int_disable(uint32_t mask);
- __STATIC_INLINE uint32_t nrf_gpiote_int_is_enabled(uint32_t mask);
- #if defined(DPPI_PRESENT) || defined(__NRFX_DOXYGEN__)
- __STATIC_INLINE void nrf_gpiote_subscribe_set(nrf_gpiote_tasks_t task,
- uint8_t channel);
- __STATIC_INLINE void nrf_gpiote_subscribe_clear(nrf_gpiote_tasks_t task);
- __STATIC_INLINE void nrf_gpiote_publish_set(nrf_gpiote_events_t event,
- uint8_t channel);
- __STATIC_INLINE void nrf_gpiote_publish_clear(nrf_gpiote_events_t event);
- #endif
- __STATIC_INLINE void nrf_gpiote_event_enable(uint32_t idx);
- __STATIC_INLINE void nrf_gpiote_event_disable(uint32_t idx);
- __STATIC_INLINE void nrf_gpiote_event_configure(uint32_t idx,
- uint32_t pin,
- nrf_gpiote_polarity_t polarity);
- __STATIC_INLINE uint32_t nrf_gpiote_event_pin_get(uint32_t idx);
- __STATIC_INLINE nrf_gpiote_polarity_t nrf_gpiote_event_polarity_get(uint32_t idx);
- __STATIC_INLINE void nrf_gpiote_task_enable(uint32_t idx);
- __STATIC_INLINE void nrf_gpiote_task_disable(uint32_t idx);
- __STATIC_INLINE void nrf_gpiote_task_configure(uint32_t idx,
- uint32_t pin,
- nrf_gpiote_polarity_t polarity,
- nrf_gpiote_outinit_t init_val);
- __STATIC_INLINE void nrf_gpiote_task_force(uint32_t idx, nrf_gpiote_outinit_t init_val);
- __STATIC_INLINE void nrf_gpiote_te_default(uint32_t idx);
- __STATIC_INLINE bool nrf_gpiote_te_is_enabled(uint32_t idx);
- __STATIC_INLINE nrf_gpiote_tasks_t nrf_gpiote_out_task_get(uint8_t index);
- #if defined(GPIOTE_FEATURE_SET_PRESENT) || defined(__NRFX_DOXYGEN__)
- __STATIC_INLINE nrf_gpiote_tasks_t nrf_gpiote_set_task_get(uint8_t index);
- #endif
- #if defined(GPIOTE_FEATURE_CLR_PRESENT) || defined(__NRFX_DOXYGEN__)
- __STATIC_INLINE nrf_gpiote_tasks_t nrf_gpiote_clr_task_get(uint8_t index);
- #endif
- __STATIC_INLINE nrf_gpiote_events_t nrf_gpiote_in_event_get(uint8_t index);
- #ifndef SUPPRESS_INLINE_IMPLEMENTATION
- __STATIC_INLINE void nrf_gpiote_task_set(nrf_gpiote_tasks_t task)
- {
- *(__IO uint32_t *)((uint32_t)NRF_GPIOTE + task) = 0x1UL;
- }
- __STATIC_INLINE uint32_t nrf_gpiote_task_addr_get(nrf_gpiote_tasks_t task)
- {
- return ((uint32_t)NRF_GPIOTE + task);
- }
- __STATIC_INLINE bool nrf_gpiote_event_is_set(nrf_gpiote_events_t event)
- {
- return (*(uint32_t *)nrf_gpiote_event_addr_get(event) == 0x1UL) ? true : false;
- }
- __STATIC_INLINE void nrf_gpiote_event_clear(nrf_gpiote_events_t event)
- {
- *(uint32_t *)nrf_gpiote_event_addr_get(event) = 0;
- #if __CORTEX_M == 0x04
- volatile uint32_t dummy = *((volatile uint32_t *)nrf_gpiote_event_addr_get(event));
- (void)dummy;
- #endif
- }
- __STATIC_INLINE uint32_t nrf_gpiote_event_addr_get(nrf_gpiote_events_t event)
- {
- return ((uint32_t)NRF_GPIOTE + event);
- }
- __STATIC_INLINE void nrf_gpiote_int_enable(uint32_t mask)
- {
- NRF_GPIOTE->INTENSET = mask;
- }
- __STATIC_INLINE void nrf_gpiote_int_disable(uint32_t mask)
- {
- NRF_GPIOTE->INTENCLR = mask;
- }
- __STATIC_INLINE uint32_t nrf_gpiote_int_is_enabled(uint32_t mask)
- {
- return (NRF_GPIOTE->INTENSET & mask);
- }
- #if defined(DPPI_PRESENT)
- __STATIC_INLINE void nrf_gpiote_subscribe_set(nrf_gpiote_tasks_t task,
- uint8_t channel)
- {
- *((volatile uint32_t *) ((uint8_t *) NRF_GPIOTE + (uint32_t) task + 0x80uL)) =
- ((uint32_t)channel | GPIOTE_SUBSCRIBE_OUT_EN_Msk);
- }
- __STATIC_INLINE void nrf_gpiote_subscribe_clear(nrf_gpiote_tasks_t task)
- {
- *((volatile uint32_t *) ((uint8_t *) NRF_GPIOTE + (uint32_t) task + 0x80uL)) = 0;
- }
- __STATIC_INLINE void nrf_gpiote_publish_set(nrf_gpiote_events_t event,
- uint8_t channel)
- {
- *((volatile uint32_t *) ((uint8_t *) NRF_GPIOTE + (uint32_t) event + 0x80uL)) =
- ((uint32_t)channel | GPIOTE_PUBLISH_IN_EN_Msk);
- }
- __STATIC_INLINE void nrf_gpiote_publish_clear(nrf_gpiote_events_t event)
- {
- *((volatile uint32_t *) ((uint8_t *) NRF_GPIOTE + (uint32_t) event + 0x80uL)) = 0;
- }
- #endif
- __STATIC_INLINE void nrf_gpiote_event_enable(uint32_t idx)
- {
- NRF_GPIOTE->CONFIG[idx] |= GPIOTE_CONFIG_MODE_Event;
- }
- __STATIC_INLINE void nrf_gpiote_event_disable(uint32_t idx)
- {
- NRF_GPIOTE->CONFIG[idx] &= ~GPIOTE_CONFIG_MODE_Event;
- }
- __STATIC_INLINE void nrf_gpiote_event_configure(uint32_t idx, uint32_t pin, nrf_gpiote_polarity_t polarity)
- {
- NRF_GPIOTE->CONFIG[idx] &= ~(GPIOTE_CONFIG_PORT_PIN_Msk | GPIOTE_CONFIG_POLARITY_Msk);
- NRF_GPIOTE->CONFIG[idx] |= ((pin << GPIOTE_CONFIG_PSEL_Pos) & GPIOTE_CONFIG_PORT_PIN_Msk) |
- ((polarity << GPIOTE_CONFIG_POLARITY_Pos) & GPIOTE_CONFIG_POLARITY_Msk);
- }
- __STATIC_INLINE uint32_t nrf_gpiote_event_pin_get(uint32_t idx)
- {
- return ((NRF_GPIOTE->CONFIG[idx] & GPIOTE_CONFIG_PORT_PIN_Msk) >> GPIOTE_CONFIG_PSEL_Pos);
- }
- __STATIC_INLINE nrf_gpiote_polarity_t nrf_gpiote_event_polarity_get(uint32_t idx)
- {
- return (nrf_gpiote_polarity_t)((NRF_GPIOTE->CONFIG[idx] & GPIOTE_CONFIG_POLARITY_Msk) >> GPIOTE_CONFIG_POLARITY_Pos);
- }
- __STATIC_INLINE void nrf_gpiote_task_enable(uint32_t idx)
- {
- uint32_t final_config = NRF_GPIOTE->CONFIG[idx] | GPIOTE_CONFIG_MODE_Task;
- #ifdef NRF51
-
-
- NRF_GPIOTE->CONFIG[idx] = final_config | (((31) << GPIOTE_CONFIG_PSEL_Pos) & GPIOTE_CONFIG_PORT_PIN_Msk);
- __NOP();
- __NOP();
- __NOP();
- #endif
- NRF_GPIOTE->CONFIG[idx] = final_config;
- }
- __STATIC_INLINE void nrf_gpiote_task_disable(uint32_t idx)
- {
- NRF_GPIOTE->CONFIG[idx] &= ~GPIOTE_CONFIG_MODE_Task;
- }
- __STATIC_INLINE void nrf_gpiote_task_configure(uint32_t idx, uint32_t pin,
- nrf_gpiote_polarity_t polarity,
- nrf_gpiote_outinit_t init_val)
- {
- NRF_GPIOTE->CONFIG[idx] &= ~(GPIOTE_CONFIG_PORT_PIN_Msk |
- GPIOTE_CONFIG_POLARITY_Msk |
- GPIOTE_CONFIG_OUTINIT_Msk);
- NRF_GPIOTE->CONFIG[idx] |= ((pin << GPIOTE_CONFIG_PSEL_Pos) & GPIOTE_CONFIG_PORT_PIN_Msk) |
- ((polarity << GPIOTE_CONFIG_POLARITY_Pos) & GPIOTE_CONFIG_POLARITY_Msk) |
- ((init_val << GPIOTE_CONFIG_OUTINIT_Pos) & GPIOTE_CONFIG_OUTINIT_Msk);
- }
- __STATIC_INLINE void nrf_gpiote_task_force(uint32_t idx, nrf_gpiote_outinit_t init_val)
- {
- NRF_GPIOTE->CONFIG[idx] = (NRF_GPIOTE->CONFIG[idx] & ~GPIOTE_CONFIG_OUTINIT_Msk)
- | ((init_val << GPIOTE_CONFIG_OUTINIT_Pos) & GPIOTE_CONFIG_OUTINIT_Msk);
- }
- __STATIC_INLINE void nrf_gpiote_te_default(uint32_t idx)
- {
- NRF_GPIOTE->CONFIG[idx] = 0;
- }
- __STATIC_INLINE bool nrf_gpiote_te_is_enabled(uint32_t idx)
- {
- return (NRF_GPIOTE->CONFIG[idx] & GPIOTE_CONFIG_MODE_Msk) != GPIOTE_CONFIG_MODE_Disabled;
- }
- __STATIC_INLINE nrf_gpiote_tasks_t nrf_gpiote_out_task_get(uint8_t index)
- {
- NRFX_ASSERT(index < NRFX_ARRAY_SIZE(NRF_GPIOTE->TASKS_OUT));
- return (nrf_gpiote_tasks_t)NRFX_OFFSETOF(NRF_GPIOTE_Type, TASKS_OUT[index]);
- }
- #if defined(GPIOTE_FEATURE_SET_PRESENT)
- __STATIC_INLINE nrf_gpiote_tasks_t nrf_gpiote_set_task_get(uint8_t index)
- {
- NRFX_ASSERT(index < NRFX_ARRAY_SIZE(NRF_GPIOTE->TASKS_SET));
- return (nrf_gpiote_tasks_t)NRFX_OFFSETOF(NRF_GPIOTE_Type, TASKS_SET[index]);
- }
- #endif
- #if defined(GPIOTE_FEATURE_CLR_PRESENT)
- __STATIC_INLINE nrf_gpiote_tasks_t nrf_gpiote_clr_task_get(uint8_t index)
- {
- NRFX_ASSERT(index < NRFX_ARRAY_SIZE(NRF_GPIOTE->TASKS_CLR));
- return (nrf_gpiote_tasks_t)NRFX_OFFSETOF(NRF_GPIOTE_Type, TASKS_CLR[index]);
- }
- #endif
- __STATIC_INLINE nrf_gpiote_events_t nrf_gpiote_in_event_get(uint8_t index)
- {
- NRFX_ASSERT(index < NRFX_ARRAY_SIZE(NRF_GPIOTE->EVENTS_IN));
- return (nrf_gpiote_events_t)NRFX_OFFSETOF(NRF_GPIOTE_Type, EVENTS_IN[index]);
- }
- #endif
- #ifdef __cplusplus
- }
- #endif
- #endif
|