ret_code_t nrf_drv_qdec_init(const nrf_drv_qdec_config_t * p_config, qdec_event_handler_t event_handler) { if (m_state != NRF_DRV_STATE_UNINITIALIZED) { return NRF_ERROR_INVALID_STATE; // qdec_event_handler has been already registered } if (p_config == NULL) { p_config = &m_default_config; } if (event_handler) { m_qdec_event_handler = event_handler; } else { return NRF_ERROR_INVALID_PARAM; } nrf_qdec_sampleper_set(p_config->sampleper); nrf_gpio_cfg_input(p_config->pselled,NRF_GPIO_PIN_NOPULL); nrf_gpio_cfg_input(p_config->psela, NRF_GPIO_PIN_NOPULL); nrf_gpio_cfg_input(p_config->pselb, NRF_GPIO_PIN_NOPULL); nrf_qdec_pio_assign( p_config->psela, p_config->pselb, p_config->pselled); nrf_qdec_ledpre_set(p_config->ledpre); nrf_qdec_ledpol_set(p_config->ledpol); nrf_qdec_shorts_enable(NRF_QDEC_SHORT_REPORTRDY_READCLRACC_MASK); if (p_config->dbfen) { nrf_qdec_dbfen_enable(); } else { nrf_qdec_dbfen_disable(); } uint32_t int_mask = NRF_QDEC_INT_ACCOF_MASK; if (p_config->reportper != NRF_QDEC_REPORTPER_DISABLED) { nrf_qdec_reportper_set(p_config->reportper); int_mask |= NRF_QDEC_INT_REPORTRDY_MASK; } if (p_config->sample_inten) { int_mask |= NRF_QDEC_INT_SAMPLERDY_MASK; } nrf_qdec_int_enable(int_mask); nrf_drv_common_irq_enable(QDEC_IRQn, p_config->interrupt_priority); m_state = NRF_DRV_STATE_INITIALIZED; return NRF_SUCCESS; }
nrfx_err_t nrfx_qdec_init(nrfx_qdec_config_t const * p_config, nrfx_qdec_event_handler_t event_handler) { NRFX_ASSERT(p_config); nrfx_err_t err_code; if (m_state != NRFX_DRV_STATE_UNINITIALIZED) { err_code = NRFX_ERROR_INVALID_STATE; NRFX_LOG_WARNING("Function: %s, error code: %s.", __func__, NRFX_LOG_ERROR_STRING_GET(err_code)); return err_code; } if (event_handler) { m_qdec_event_handler = event_handler; } else { err_code = NRFX_ERROR_INVALID_PARAM; NRFX_LOG_WARNING("Function: %s, error code: %s.", __func__, NRFX_LOG_ERROR_STRING_GET(err_code)); return err_code; } nrf_qdec_sampleper_set(p_config->sampleper); nrf_gpio_cfg_input(p_config->pselled, NRF_GPIO_PIN_NOPULL); nrf_gpio_cfg_input(p_config->psela, NRF_GPIO_PIN_NOPULL); nrf_gpio_cfg_input(p_config->pselb, NRF_GPIO_PIN_NOPULL); nrf_qdec_pio_assign(p_config->psela, p_config->pselb, p_config->pselled); nrf_qdec_ledpre_set(p_config->ledpre); nrf_qdec_ledpol_set(p_config->ledpol); nrf_qdec_shorts_enable(NRF_QDEC_SHORT_REPORTRDY_READCLRACC_MASK); if (p_config->dbfen) { nrf_qdec_dbfen_enable(); } else { nrf_qdec_dbfen_disable(); } uint32_t int_mask = NRF_QDEC_INT_ACCOF_MASK; if (p_config->reportper != NRF_QDEC_REPORTPER_DISABLED) { nrf_qdec_reportper_set(p_config->reportper); int_mask |= NRF_QDEC_INT_REPORTRDY_MASK; } if (p_config->sample_inten) { int_mask |= NRF_QDEC_INT_SAMPLERDY_MASK; } nrf_qdec_int_enable(int_mask); NRFX_IRQ_PRIORITY_SET(QDEC_IRQn, p_config->interrupt_priority); NRFX_IRQ_ENABLE(QDEC_IRQn); m_state = NRFX_DRV_STATE_INITIALIZED; err_code = NRFX_SUCCESS; NRFX_LOG_INFO("Function: %s, error code: %s.", __func__, NRFX_LOG_ERROR_STRING_GET(err_code)); return err_code; }