Lines Matching full:pin

50 /* Check if every pin can be encoded on provided number of bits. */
103 __STATIC_INLINE bool pin_in_use(uint32_t pin) in pin_in_use() argument
105 return (m_cb.pin_assignments[pin] != PIN_NOT_USED); in pin_in_use()
109 __STATIC_INLINE bool pin_in_use_as_non_task_out(uint32_t pin) in pin_in_use_as_non_task_out() argument
111 return (m_cb.pin_assignments[pin] == PIN_USED); in pin_in_use_as_non_task_out()
115 __STATIC_INLINE bool pin_in_use_by_te(uint32_t pin) in pin_in_use_by_te() argument
117 return (m_cb.pin_assignments[pin] >= 0 && m_cb.pin_assignments[pin] < GPIOTE_CH_NUM) ? in pin_in_use_by_te()
122 __STATIC_INLINE bool pin_in_use_by_port(uint32_t pin) in pin_in_use_by_port() argument
124 return (m_cb.pin_assignments[pin] >= GPIOTE_CH_NUM); in pin_in_use_by_port()
128 __STATIC_INLINE bool pin_in_use_by_gpiote(uint32_t pin) in pin_in_use_by_gpiote() argument
130 return (m_cb.pin_assignments[pin] >= 0); in pin_in_use_by_gpiote()
134 __STATIC_INLINE void pin_in_use_by_te_set(uint32_t pin, in pin_in_use_by_te_set() argument
139 m_cb.pin_assignments[pin] = channel_id; in pin_in_use_by_te_set()
143 m_cb.port_handlers_pins[channel_id - GPIOTE_CH_NUM] = (int8_t)pin; in pin_in_use_by_te_set()
148 __STATIC_INLINE void pin_in_use_set(uint32_t pin) in pin_in_use_set() argument
150 m_cb.pin_assignments[pin] = PIN_USED; in pin_in_use_set()
154 __STATIC_INLINE void pin_in_use_clear(uint32_t pin) in pin_in_use_clear() argument
156 m_cb.pin_assignments[pin] = PIN_NOT_USED; in pin_in_use_clear()
160 __STATIC_INLINE void pin_configured_set(uint32_t pin) in pin_configured_set() argument
162 nrf_bitmask_bit_set(pin, m_cb.configured_pins); in pin_configured_set()
165 __STATIC_INLINE void pin_configured_clear(uint32_t pin) in pin_configured_clear() argument
167 nrf_bitmask_bit_clear(pin, m_cb.configured_pins); in pin_configured_clear()
170 __STATIC_INLINE bool pin_configured_check(uint32_t pin) in pin_configured_check() argument
172 return 0 != nrf_bitmask_bit_is_set(pin, m_cb.configured_pins); in pin_configured_check()
175 __STATIC_INLINE int8_t channel_port_get(uint32_t pin) in channel_port_get() argument
177 return m_cb.pin_assignments[pin]; in channel_port_get()
187 static int8_t channel_port_alloc(uint32_t pin, nrfx_gpiote_evt_handler_t handler, bool channel) in channel_port_alloc() argument
202 pin_in_use_by_te_set(pin, i, handler, channel); in channel_port_alloc()
281 /* Disable gpiote_in is having the same effect on out pin as gpiote_out_uninit on in nrfx_gpiote_uninit()
292 nrfx_err_t nrfx_gpiote_out_init(nrfx_gpiote_pin_t pin, in nrfx_gpiote_out_init() argument
295 NRFX_ASSERT(pin < NUMBER_OF_PINS); in nrfx_gpiote_out_init()
301 if (pin_in_use(pin)) in nrfx_gpiote_out_init()
309 int8_t channel = channel_port_alloc(pin, NULL, true); in nrfx_gpiote_out_init()
314 pin, in nrfx_gpiote_out_init()
325 pin_in_use_set(pin); in nrfx_gpiote_out_init()
332 nrf_gpio_pin_set(pin); in nrfx_gpiote_out_init()
336 nrf_gpio_pin_clear(pin); in nrfx_gpiote_out_init()
339 nrf_gpio_cfg_output(pin); in nrfx_gpiote_out_init()
340 pin_configured_set(pin); in nrfx_gpiote_out_init()
349 void nrfx_gpiote_out_uninit(nrfx_gpiote_pin_t pin) in nrfx_gpiote_out_uninit() argument
351 NRFX_ASSERT(pin < NUMBER_OF_PINS); in nrfx_gpiote_out_uninit()
352 NRFX_ASSERT(pin_in_use(pin)); in nrfx_gpiote_out_uninit()
354 if (pin_in_use_by_te(pin)) in nrfx_gpiote_out_uninit()
356 channel_free((uint8_t)channel_port_get(pin)); in nrfx_gpiote_out_uninit()
357 nrf_gpiote_te_default((uint32_t)channel_port_get(pin)); in nrfx_gpiote_out_uninit()
359 pin_in_use_clear(pin); in nrfx_gpiote_out_uninit()
361 if (pin_configured_check(pin)) in nrfx_gpiote_out_uninit()
363 nrf_gpio_cfg_default(pin); in nrfx_gpiote_out_uninit()
364 pin_configured_clear(pin); in nrfx_gpiote_out_uninit()
369 void nrfx_gpiote_out_set(nrfx_gpiote_pin_t pin) in nrfx_gpiote_out_set() argument
371 NRFX_ASSERT(pin < NUMBER_OF_PINS); in nrfx_gpiote_out_set()
372 NRFX_ASSERT(pin_in_use(pin)); in nrfx_gpiote_out_set()
373 NRFX_ASSERT(!pin_in_use_by_te(pin)); in nrfx_gpiote_out_set()
375 nrf_gpio_pin_set(pin); in nrfx_gpiote_out_set()
379 void nrfx_gpiote_out_clear(nrfx_gpiote_pin_t pin) in nrfx_gpiote_out_clear() argument
381 NRFX_ASSERT(pin < NUMBER_OF_PINS); in nrfx_gpiote_out_clear()
382 NRFX_ASSERT(pin_in_use(pin)); in nrfx_gpiote_out_clear()
383 NRFX_ASSERT(!pin_in_use_by_te(pin)); in nrfx_gpiote_out_clear()
385 nrf_gpio_pin_clear(pin); in nrfx_gpiote_out_clear()
389 void nrfx_gpiote_out_toggle(nrfx_gpiote_pin_t pin) in nrfx_gpiote_out_toggle() argument
391 NRFX_ASSERT(pin < NUMBER_OF_PINS); in nrfx_gpiote_out_toggle()
392 NRFX_ASSERT(pin_in_use(pin)); in nrfx_gpiote_out_toggle()
393 NRFX_ASSERT(!pin_in_use_by_te(pin)); in nrfx_gpiote_out_toggle()
395 nrf_gpio_pin_toggle(pin); in nrfx_gpiote_out_toggle()
399 void nrfx_gpiote_out_task_enable(nrfx_gpiote_pin_t pin) in nrfx_gpiote_out_task_enable() argument
401 NRFX_ASSERT(pin < NUMBER_OF_PINS); in nrfx_gpiote_out_task_enable()
402 NRFX_ASSERT(pin_in_use(pin)); in nrfx_gpiote_out_task_enable()
403 NRFX_ASSERT(pin_in_use_by_te(pin)); in nrfx_gpiote_out_task_enable()
405 nrf_gpiote_task_enable((uint32_t)m_cb.pin_assignments[pin]); in nrfx_gpiote_out_task_enable()
409 void nrfx_gpiote_out_task_disable(nrfx_gpiote_pin_t pin) in nrfx_gpiote_out_task_disable() argument
411 NRFX_ASSERT(pin < NUMBER_OF_PINS); in nrfx_gpiote_out_task_disable()
412 NRFX_ASSERT(pin_in_use(pin)); in nrfx_gpiote_out_task_disable()
413 NRFX_ASSERT(pin_in_use_by_te(pin)); in nrfx_gpiote_out_task_disable()
415 nrf_gpiote_task_disable((uint32_t)m_cb.pin_assignments[pin]); in nrfx_gpiote_out_task_disable()
419 uint32_t nrfx_gpiote_out_task_addr_get(nrfx_gpiote_pin_t pin) in nrfx_gpiote_out_task_addr_get() argument
421 NRFX_ASSERT(pin < NUMBER_OF_PINS); in nrfx_gpiote_out_task_addr_get()
422 NRFX_ASSERT(pin_in_use_by_te(pin)); in nrfx_gpiote_out_task_addr_get()
424 nrf_gpiote_tasks_t task = TE_OUT_IDX_TO_TASK_ADDR((uint32_t)channel_port_get(pin)); in nrfx_gpiote_out_task_addr_get()
430 uint32_t nrfx_gpiote_set_task_addr_get(nrfx_gpiote_pin_t pin) in nrfx_gpiote_set_task_addr_get() argument
432 NRFX_ASSERT(pin < NUMBER_OF_PINS); in nrfx_gpiote_set_task_addr_get()
433 NRFX_ASSERT(pin_in_use_by_te(pin)); in nrfx_gpiote_set_task_addr_get()
435 nrf_gpiote_tasks_t task = TE_SET_IDX_TO_TASK_ADDR((uint32_t)channel_port_get(pin)); in nrfx_gpiote_set_task_addr_get()
443 uint32_t nrfx_gpiote_clr_task_addr_get(nrfx_gpiote_pin_t pin) in nrfx_gpiote_clr_task_addr_get() argument
445 NRFX_ASSERT(pin < NUMBER_OF_PINS); in nrfx_gpiote_clr_task_addr_get()
446 NRFX_ASSERT(pin_in_use_by_te(pin)); in nrfx_gpiote_clr_task_addr_get()
448 nrf_gpiote_tasks_t task = TE_CLR_IDX_TO_TASK_ADDR((uint32_t)channel_port_get(pin)); in nrfx_gpiote_clr_task_addr_get()
455 void nrfx_gpiote_out_task_force(nrfx_gpiote_pin_t pin, uint8_t state) in nrfx_gpiote_out_task_force() argument
457 NRFX_ASSERT(pin < NUMBER_OF_PINS); in nrfx_gpiote_out_task_force()
458 NRFX_ASSERT(pin_in_use(pin)); in nrfx_gpiote_out_task_force()
459 NRFX_ASSERT(pin_in_use_by_te(pin)); in nrfx_gpiote_out_task_force()
463 nrf_gpiote_task_force((uint32_t)m_cb.pin_assignments[pin], init_val); in nrfx_gpiote_out_task_force()
467 void nrfx_gpiote_out_task_trigger(nrfx_gpiote_pin_t pin) in nrfx_gpiote_out_task_trigger() argument
469 NRFX_ASSERT(pin < NUMBER_OF_PINS); in nrfx_gpiote_out_task_trigger()
470 NRFX_ASSERT(pin_in_use(pin)); in nrfx_gpiote_out_task_trigger()
471 NRFX_ASSERT(pin_in_use_by_te(pin)); in nrfx_gpiote_out_task_trigger()
473 nrf_gpiote_tasks_t task = TE_OUT_IDX_TO_TASK_ADDR((uint32_t)channel_port_get(pin)); in nrfx_gpiote_out_task_trigger()
479 void nrfx_gpiote_set_task_trigger(nrfx_gpiote_pin_t pin) in nrfx_gpiote_set_task_trigger() argument
481 NRFX_ASSERT(pin < NUMBER_OF_PINS); in nrfx_gpiote_set_task_trigger()
482 NRFX_ASSERT(pin_in_use(pin)); in nrfx_gpiote_set_task_trigger()
483 NRFX_ASSERT(pin_in_use_by_te(pin)); in nrfx_gpiote_set_task_trigger()
485 nrf_gpiote_tasks_t task = TE_SET_IDX_TO_TASK_ADDR((uint32_t)channel_port_get(pin)); in nrfx_gpiote_set_task_trigger()
493 void nrfx_gpiote_clr_task_trigger(nrfx_gpiote_pin_t pin) in nrfx_gpiote_clr_task_trigger() argument
495 NRFX_ASSERT(pin < NUMBER_OF_PINS); in nrfx_gpiote_clr_task_trigger()
496 NRFX_ASSERT(pin_in_use(pin)); in nrfx_gpiote_clr_task_trigger()
497 NRFX_ASSERT(pin_in_use_by_te(pin)); in nrfx_gpiote_clr_task_trigger()
499 nrf_gpiote_tasks_t task = TE_CLR_IDX_TO_TASK_ADDR((uint32_t)channel_port_get(pin)); in nrfx_gpiote_clr_task_trigger()
506 nrfx_err_t nrfx_gpiote_in_init(nrfx_gpiote_pin_t pin, in nrfx_gpiote_in_init() argument
510 NRFX_ASSERT(pin < NUMBER_OF_PINS); in nrfx_gpiote_in_init()
513 /* Only one GPIOTE channel can be assigned to one physical pin. */ in nrfx_gpiote_in_init()
514 if (pin_in_use_by_gpiote(pin)) in nrfx_gpiote_in_init()
520 int8_t channel = channel_port_alloc(pin, evt_handler, p_config->hi_accuracy); in nrfx_gpiote_in_init()
527 nrf_gpio_cfg_watcher(pin); in nrfx_gpiote_in_init()
531 nrf_gpio_cfg_input(pin, p_config->pull); in nrfx_gpiote_in_init()
533 pin_configured_set(pin); in nrfx_gpiote_in_init()
538 nrf_gpiote_event_configure((uint32_t)channel, pin, p_config->sense); in nrfx_gpiote_in_init()
556 void nrfx_gpiote_in_event_enable(nrfx_gpiote_pin_t pin, bool int_enable) in nrfx_gpiote_in_event_enable() argument
558 NRFX_ASSERT(pin < NUMBER_OF_PINS); in nrfx_gpiote_in_event_enable()
559 NRFX_ASSERT(pin_in_use_by_gpiote(pin)); in nrfx_gpiote_in_event_enable()
560 if (pin_in_use_by_port(pin)) in nrfx_gpiote_in_event_enable()
563 m_cb.port_handlers_pins[channel_port_get(pin) - GPIOTE_CH_NUM]; in nrfx_gpiote_in_event_enable()
569 /* read current pin state and set for next sense to oposit */ in nrfx_gpiote_in_event_enable()
570 sense = (nrf_gpio_pin_read(pin)) ? in nrfx_gpiote_in_event_enable()
578 nrf_gpio_cfg_sense_set(pin, sense); in nrfx_gpiote_in_event_enable()
580 else if (pin_in_use_by_te(pin)) in nrfx_gpiote_in_event_enable()
582 int32_t channel = (int32_t)channel_port_get(pin); in nrfx_gpiote_in_event_enable()
590 … nrfx_gpiote_evt_handler_t handler = channel_handler_get((uint32_t)channel_port_get(pin)); in nrfx_gpiote_in_event_enable()
601 void nrfx_gpiote_in_event_disable(nrfx_gpiote_pin_t pin) in nrfx_gpiote_in_event_disable() argument
603 NRFX_ASSERT(pin < NUMBER_OF_PINS); in nrfx_gpiote_in_event_disable()
604 NRFX_ASSERT(pin_in_use_by_gpiote(pin)); in nrfx_gpiote_in_event_disable()
605 if (pin_in_use_by_port(pin)) in nrfx_gpiote_in_event_disable()
607 nrf_gpio_cfg_sense_set(pin, NRF_GPIO_PIN_NOSENSE); in nrfx_gpiote_in_event_disable()
609 else if (pin_in_use_by_te(pin)) in nrfx_gpiote_in_event_disable()
611 int32_t channel = (int32_t)channel_port_get(pin); in nrfx_gpiote_in_event_disable()
618 void nrfx_gpiote_in_uninit(nrfx_gpiote_pin_t pin) in nrfx_gpiote_in_uninit() argument
620 NRFX_ASSERT(pin < NUMBER_OF_PINS); in nrfx_gpiote_in_uninit()
621 NRFX_ASSERT(pin_in_use_by_gpiote(pin)); in nrfx_gpiote_in_uninit()
622 nrfx_gpiote_in_event_disable(pin); in nrfx_gpiote_in_uninit()
623 if (pin_in_use_by_te(pin)) in nrfx_gpiote_in_uninit()
625 nrf_gpiote_te_default((uint32_t)channel_port_get(pin)); in nrfx_gpiote_in_uninit()
627 if (pin_configured_check(pin)) in nrfx_gpiote_in_uninit()
629 nrf_gpio_cfg_default(pin); in nrfx_gpiote_in_uninit()
630 pin_configured_clear(pin); in nrfx_gpiote_in_uninit()
632 channel_free((uint8_t)channel_port_get(pin)); in nrfx_gpiote_in_uninit()
633 pin_in_use_clear(pin); in nrfx_gpiote_in_uninit()
637 bool nrfx_gpiote_in_is_set(nrfx_gpiote_pin_t pin) in nrfx_gpiote_in_is_set() argument
639 NRFX_ASSERT(pin < NUMBER_OF_PINS); in nrfx_gpiote_in_is_set()
640 return nrf_gpio_pin_read(pin) ? true : false; in nrfx_gpiote_in_is_set()
644 uint32_t nrfx_gpiote_in_event_addr_get(nrfx_gpiote_pin_t pin) in nrfx_gpiote_in_event_addr_get() argument
646 NRFX_ASSERT(pin < NUMBER_OF_PINS); in nrfx_gpiote_in_event_addr_get()
647 NRFX_ASSERT(pin_in_use_by_port(pin) || pin_in_use_by_te(pin)); in nrfx_gpiote_in_event_addr_get()
651 if (pin_in_use_by_te(pin)) in nrfx_gpiote_in_event_addr_get()
653 event = TE_IDX_TO_EVENT_ADDR((uint32_t)channel_port_get(pin)); in nrfx_gpiote_in_event_addr_get()
664 …/* collect status of all GPIOTE pin events. Processing is done once all are collected and cleared.… in nrfx_gpiote_irq_handler()
691 /* Process pin events. */ in nrfx_gpiote_irq_handler()
700 nrfx_gpiote_pin_t pin = nrf_gpiote_event_pin_get(i); in nrfx_gpiote_irq_handler() local
704 NRFX_LOG_DEBUG("Pin: %d, polarity: %d.", pin, polarity); in nrfx_gpiote_irq_handler()
707 handler(pin, polarity); in nrfx_gpiote_irq_handler()
735 nrfx_gpiote_pin_t pin = (pin_and_sense & ~SENSE_FIELD_MASK); in nrfx_gpiote_irq_handler() local
738 && nrf_bitmask_bit_is_set(pin, pins_to_check)) in nrfx_gpiote_irq_handler()
744 channel_handler_get((uint32_t)channel_port_get(pin)); in nrfx_gpiote_irq_handler()
749 nrf_bitmask_bit_set(pin, toggle_mask); in nrfx_gpiote_irq_handler()
751 nrf_gpio_pin_sense_t sense = nrf_gpio_pin_sense_get(pin); in nrfx_gpiote_irq_handler()
752 uint32_t pin_state = nrf_bitmask_bit_is_set(pin, input); in nrfx_gpiote_irq_handler()
756 NRFX_LOG_DEBUG("PORT event for pin: %d, polarity: %d.", pin, polarity); in nrfx_gpiote_irq_handler()
763 nrf_gpio_cfg_sense_set(pin, next_sense); in nrfx_gpiote_irq_handler()
769 handler(pin, polarity); in nrfx_gpiote_irq_handler()