Lines Matching refs:p_cb
134 static bool xfer_completeness_check(NRF_TWIM_Type * p_twim, twim_control_block_t const * p_cb) in xfer_completeness_check() argument
143 switch (p_cb->xfer_type) in xfer_completeness_check()
149 if (((p_cb->int_mask & NRF_TWIM_INT_SUSPENDED_MASK) && in xfer_completeness_check()
150 (nrfy_twim_txd_amount_get(p_twim) != p_cb->xfer_desc_primary.length)) || in xfer_completeness_check()
151 (!(p_cb->int_mask & NRF_TWIM_INT_SUSPENDED_MASK) && in xfer_completeness_check()
152 (nrfy_twim_txd_amount_get(p_twim) != p_cb->xfer_desc_secondary.length))) in xfer_completeness_check()
158 if ((nrfy_twim_txd_amount_get(p_twim) != p_cb->xfer_desc_primary.length) || in xfer_completeness_check()
159 (nrfy_twim_rxd_amount_get(p_twim) != p_cb->xfer_desc_secondary.length)) in xfer_completeness_check()
165 if (nrfy_twim_txd_amount_get(p_twim) != p_cb->xfer_desc_primary.length) in xfer_completeness_check()
171 if (nrfy_twim_rxd_amount_get(p_twim) != p_cb->xfer_desc_primary.length) in xfer_completeness_check()
270 twim_control_block_t * p_cb = &m_cb[p_instance->drv_inst_idx]; in nrfx_twim_init() local
273 if (p_cb->state != NRFX_DRV_STATE_UNINITIALIZED) in nrfx_twim_init()
301 p_cb->handler = event_handler; in nrfx_twim_init()
302 p_cb->p_context = p_context; in nrfx_twim_init()
303 p_cb->int_mask = 0; in nrfx_twim_init()
304 p_cb->repeated = false; in nrfx_twim_init()
305 p_cb->busy = false; in nrfx_twim_init()
309 p_cb->skip_gpio_cfg = p_config->skip_gpio_cfg; in nrfx_twim_init()
318 p_cb->hold_bus_uninit = p_config->hold_bus_uninit; in nrfx_twim_init()
320 p_cb->bus_frequency = (nrf_twim_frequency_t)p_config->frequency; in nrfx_twim_init()
326 p_cb->state = NRFX_DRV_STATE_INITIALIZED; in nrfx_twim_init()
338 twim_control_block_t * p_cb = &m_cb[p_instance->drv_inst_idx]; in nrfx_twim_reconfigure() local
340 if (p_cb->state == NRFX_DRV_STATE_UNINITIALIZED) in nrfx_twim_reconfigure()
344 if (p_cb->busy) in nrfx_twim_reconfigure()
365 twim_control_block_t * p_cb = &m_cb[p_instance->drv_inst_idx]; in nrfx_twim_uninit() local
367 NRFX_ASSERT(p_cb->state != NRFX_DRV_STATE_UNINITIALIZED); in nrfx_twim_uninit()
376 if (!p_cb->skip_gpio_cfg && !p_cb->hold_bus_uninit) in nrfx_twim_uninit()
385 p_cb->state = NRFX_DRV_STATE_UNINITIALIZED; in nrfx_twim_uninit()
391 twim_control_block_t * p_cb = &m_cb[p_instance->drv_inst_idx]; in nrfx_twim_init_check() local
393 return (p_cb->state != NRFX_DRV_STATE_UNINITIALIZED); in nrfx_twim_init_check()
398 twim_control_block_t * p_cb = &m_cb[p_instance->drv_inst_idx]; in nrfx_twim_enable() local
399 NRFX_ASSERT(p_cb->state == NRFX_DRV_STATE_INITIALIZED); in nrfx_twim_enable()
403 p_cb->state = NRFX_DRV_STATE_POWERED_ON; in nrfx_twim_enable()
409 twim_control_block_t * p_cb = &m_cb[p_instance->drv_inst_idx]; in nrfx_twim_disable() local
411 NRFX_ASSERT(p_cb->state != NRFX_DRV_STATE_UNINITIALIZED); in nrfx_twim_disable()
413 p_cb->int_mask = 0; in nrfx_twim_disable()
415 p_cb->state = NRFX_DRV_STATE_INITIALIZED; in nrfx_twim_disable()
416 p_cb->busy = false; in nrfx_twim_disable()
422 twim_control_block_t * p_cb = &m_cb[p_instance->drv_inst_idx]; in nrfx_twim_is_busy() local
423 return p_cb->busy; in nrfx_twim_is_busy()
426 static nrfx_err_t twim_xfer(twim_control_block_t * p_cb, in twim_xfer() argument
432 p_cb->error = false; in twim_xfer()
468 if (p_cb->busy) in twim_xfer()
470 nrfy_twim_int_enable(p_twim, p_cb->int_mask); in twim_xfer()
479 p_cb->busy = ((NRFX_TWIM_FLAG_NO_XFER_EVT_HANDLER & flags) || in twim_xfer()
483 p_cb->xfer_type = p_xfer_desc->type; in twim_xfer()
484 p_cb->address = p_xfer_desc->address; in twim_xfer()
485 p_cb->xfer_desc_primary.p_buffer = p_xfer_desc->p_primary_buf; in twim_xfer()
486 p_cb->xfer_desc_primary.length = p_xfer_desc->primary_length; in twim_xfer()
487 p_cb->xfer_desc_secondary.p_buffer = p_xfer_desc->p_secondary_buf; in twim_xfer()
488 p_cb->xfer_desc_secondary.length = p_xfer_desc->secondary_length; in twim_xfer()
489 p_cb->repeated = (flags & NRFX_TWIM_FLAG_REPEATED_XFER) ? true : false; in twim_xfer()
490 p_cb->flags = flags; in twim_xfer()
509 nrfy_twim_tx_buffer_set(p_twim, &p_cb->xfer_desc_primary); in twim_xfer()
515 nrfy_twim_tx_buffer_set(p_twim, &p_cb->xfer_desc_secondary); in twim_xfer()
517 p_cb->int_mask = NRF_TWIM_INT_SUSPENDED_MASK; in twim_xfer()
520 nrfy_twim_tx_buffer_set(p_twim, &p_cb->xfer_desc_primary); in twim_xfer()
521 nrfy_twim_rx_buffer_set(p_twim, &p_cb->xfer_desc_secondary); in twim_xfer()
525 p_cb->int_mask = NRF_TWIM_INT_STOPPED_MASK; in twim_xfer()
528 nrfy_twim_tx_buffer_set(p_twim, &p_cb->xfer_desc_primary); in twim_xfer()
532 p_cb->int_mask = NRF_TWIM_INT_SUSPENDED_MASK; in twim_xfer()
537 p_cb->int_mask = NRF_TWIM_INT_STOPPED_MASK; in twim_xfer()
542 nrfy_twim_rx_buffer_set(p_twim, &p_cb->xfer_desc_primary); in twim_xfer()
545 p_cb->int_mask = NRF_TWIM_INT_STOPPED_MASK; in twim_xfer()
556 nrfy_twim_rx_start(p_twim, p_cb->handler ? NULL : &p_cb->xfer_desc_primary); in twim_xfer()
560 nrfy_twim_tx_start(p_twim, p_cb->handler ? NULL : &p_cb->xfer_desc_primary); in twim_xfer()
566 if (p_xfer_desc->primary_length == 0 && p_cb->handler) in twim_xfer()
572 if (p_cb->handler) in twim_xfer()
576 p_cb->int_mask = 0; in twim_xfer()
581 p_cb->int_mask |= NRF_TWIM_INT_STOPPED_MASK; in twim_xfer()
585 p_cb->int_mask |= NRF_TWIM_INT_ERROR_MASK; in twim_xfer()
586 nrfy_twim_int_enable(p_twim, p_cb->int_mask); in twim_xfer()
599 nrfy_twim_frequency_set(p_twim, p_cb->bus_frequency); in twim_xfer()
607 p_cb->busy = false; in twim_xfer()
616 !xfer_completeness_check(p_twim, p_cb)) in twim_xfer()
638 twim_control_block_t * p_cb = &m_cb[p_instance->drv_inst_idx]; in nrfx_twim_xfer() local
640 NRFX_ASSERT(p_cb->state == NRFX_DRV_STATE_POWERED_ON); in nrfx_twim_xfer()
643 NRFX_ASSERT( !((p_cb->handler == NULL) && (p_xfer_desc->type == NRFX_TWIM_XFER_TXRX))); in nrfx_twim_xfer()
644 NRFX_ASSERT( !((p_cb->handler == NULL) && (p_xfer_desc->type == NRFX_TWIM_XFER_TXTX))); in nrfx_twim_xfer()
659 return twim_xfer(p_cb, p_instance->p_twim, p_xfer_desc, flags); in nrfx_twim_xfer()
678 static void irq_handler(NRF_TWIM_Type * p_twim, twim_control_block_t * p_cb) in irq_handler() argument
680 nrfy_twim_xfer_desc_t * p_xfer = p_cb->xfer_type == NRFX_TWIM_XFER_RX ? in irq_handler()
681 &p_cb->xfer_desc_primary : in irq_handler()
682 &p_cb->xfer_desc_secondary; in irq_handler()
696 nrfy_twim_frequency_set(p_twim, p_cb->bus_frequency); in irq_handler()
697 nrfy_twim_tx_list_set(p_twim, NRFX_TWIM_FLAG_TX_POSTINC & p_cb->flags); in irq_handler()
698 nrfy_twim_rx_list_set(p_twim, NRFX_TWIM_FLAG_RX_POSTINC & p_cb->flags); in irq_handler()
705 NRFX_ASSERT(p_cb->handler); in irq_handler()
718 nrfy_twim_int_disable(p_twim, p_cb->int_mask); in irq_handler()
719 p_cb->int_mask = NRF_TWIM_INT_STOPPED_MASK; in irq_handler()
720 nrfy_twim_int_enable(p_twim, p_cb->int_mask); in irq_handler()
731 p_cb->error = true; in irq_handler()
742 if (!(p_cb->flags & NRFX_TWIM_FLAG_NO_SPURIOUS_STOP_CHECK) && !p_cb->error) in irq_handler()
744 p_cb->error = !xfer_completeness_check(p_twim, p_cb); in irq_handler()
749 if (!(p_cb->flags & NRFX_TWIM_FLAG_NO_XFER_EVT_HANDLER)) in irq_handler()
753 if (!p_cb->repeated || p_cb->error) in irq_handler()
756 p_cb->int_mask = 0; in irq_handler()
767 event.xfer_desc.type = p_cb->xfer_type; in irq_handler()
768 event.xfer_desc.address = p_cb->address; in irq_handler()
769 event.xfer_desc.p_primary_buf = p_cb->xfer_desc_primary.p_buffer; in irq_handler()
770 event.xfer_desc.primary_length = p_cb->xfer_desc_primary.length; in irq_handler()
771 event.xfer_desc.p_secondary_buf = p_cb->xfer_desc_secondary.p_buffer; in irq_handler()
772 event.xfer_desc.secondary_length = p_cb->xfer_desc_secondary.length; in irq_handler()
776 else if (p_cb->xfer_type != NRFX_TWIM_XFER_RX) in irq_handler()
792 if (p_cb->xfer_type == NRFX_TWIM_XFER_TX) in irq_handler()
794 if (!p_cb->repeated) in irq_handler()
797 p_cb->int_mask = 0; in irq_handler()
808 event.xfer_desc.type = p_cb->xfer_type; in irq_handler()
809 event.xfer_desc.address = p_cb->address; in irq_handler()
810 event.xfer_desc.p_primary_buf = p_cb->xfer_desc_primary.p_buffer; in irq_handler()
811 event.xfer_desc.primary_length = p_cb->xfer_desc_primary.length; in irq_handler()
812 event.xfer_desc.p_secondary_buf = p_cb->xfer_desc_secondary.p_buffer; in irq_handler()
813 event.xfer_desc.secondary_length = p_cb->xfer_desc_secondary.length; in irq_handler()
818 p_cb->int_mask = NRF_TWIM_INT_STOPPED_MASK | NRF_TWIM_INT_ERROR_MASK; in irq_handler()
820 nrfy_twim_int_enable(p_twim, p_cb->int_mask); in irq_handler()
843 else if (p_cb->error) in irq_handler()
854 if (!p_cb->repeated) in irq_handler()
856 p_cb->busy = false; in irq_handler()
859 if (!(p_cb->flags & NRFX_TWIM_FLAG_NO_XFER_EVT_HANDLER) || p_cb->error) in irq_handler()
861 p_cb->handler(&event, p_cb->p_context); in irq_handler()