hi all,
i try to use to timer to have a single press and a long press. this my code.
const nrf_drv_timer_t TIMER_BUTTON = NRF_DRV_TIMER_INSTANCE(0);
const nrf_drv_timer_t TIMER_BUTTON_LONG_PUSH = NRF_DRV_TIMER_INSTANCE(1);
void TIMER_CreateDebounce(nrf_timer_event_handler_t DRV_TIMER_EventHandler)
{
uint32_t time_ticks;
nrf_drv_timer_init(&TIMER_BUTTON, NULL, DRV_TIMER_EventHandler);
time_ticks = nrf_drv_timer_ms_to_ticks(&TIMER_BUTTON, TIMER_DEBOUNCE_DELAY);
nrf_drv_timer_extended_compare(
&TIMER_BUTTON, NRF_TIMER_CC_CHANNEL0, time_ticks, NRF_TIMER_SHORT_COMPARE0_CLEAR_MASK, true);
}
/**@brief Create a Timer
*
* @param [in] TIMER_Id_t - IdTimer
* @param [in] app_timer_mode_t - Mode TImer
* @param [in] TIMER_TimerCallback - Callback to Call when the timer expires
*
* @retval uint32_t; Return error
*
*******************************************************************************/
void TIMER_LongPressCreate(nrf_timer_event_handler_t DRV_TIMER_EventHandlerLongPress)
{
uint32_t time_ticks2;
nrf_drv_timer_init(&TIMER_BUTTON_LONG_PUSH, NULL, DRV_TIMER_EventHandlerLongPress);
time_ticks2 = nrf_drv_timer_ms_to_ticks(&TIMER_BUTTON_LONG_PUSH, TIMER_PUSH_TIMEOUT_MS);
nrf_drv_timer_extended_compare(
&TIMER_BUTTON_LONG_PUSH, NRF_TIMER_CC_CHANNEL1, time_ticks2, NRF_TIMER_SHORT_COMPARE1_CLEAR_MASK, true);
}
/**@brief TIMER_Stop
*
* @param [in] TIMER_Id_t - Id Timer
*
* @retval uint32_t; Return error code
*
*******************************************************************************/
void TIMER_Stop(void)
{
nrf_drv_timer_disable(&TIMER_BUTTON);
}
/**@brief Start Timer
*
* @param [in] TIMER_Id_t - Id Timer
* @param [in] uint64_t - Delay Timer after tha callback is called
* @param [in] void * - Pointer use to pass a variable to callback
*
* @retval uint32_t; Return error code
*
*******************************************************************************/
void TIMER_Start(void)
{
nrf_drv_timer_enable(&TIMER_BUTTON);
}
/**@brief TIMER_Stop
*
* @param [in] TIMER_Id_t - Id Timer
*
* @retval uint32_t; Return error code
*
*******************************************************************************/
void TIMER_StopLongPress(void)
{
nrf_drv_timer_disable(&TIMER_BUTTON_LONG_PUSH);
}
/**@brief Start Timer
*
* @param [in] TIMER_Id_t - Id Timer
* @param [in] uint64_t - Delay Timer after tha callback is called
* @param [in] void * - Pointer use to pass a variable to callback
*
* @retval uint32_t; Return error code
*
*******************************************************************************/
void TIMER_StartLongPress(void)
{
nrf_drv_timer_enable(&TIMER_BUTTON_LONG_PUSH);
}
but timer 1 exipres faster. Some have an idea about that? thanks, Anna