void nrf_drv_clock_hfclk_request(nrf_drv_clock_handler_item_t * p_handler_item) { ASSERT(m_clock_cb.module_initialized); ASSERT(m_clock_cb.hfclk_requests != INT_MAX); CRITICAL_REGION_ENTER(); if (m_clock_cb.hfclk_on) { if (p_handler_item) { p_handler_item->event_handler(NRF_DRV_CLOCK_EVT_HFCLK_STARTED); } } else { if (p_handler_item) { item_enqueue((nrf_drv_clock_handler_item_t **)&m_clock_cb.p_hf_head, p_handler_item); } if (m_clock_cb.hfclk_requests == 0) { hfclk_start(); } } m_clock_cb.hfclk_requests++; CRITICAL_REGION_EXIT(); }
void packet_timer_rx_prepare(void) { hfclk_start(); NRF_TIMER0->CC[0] = 1500; NRF_TIMER0->SHORTS = TIMER_SHORTS_COMPARE0_CLEAR_Enabled << TIMER_SHORTS_COMPARE0_CLEAR_Pos; // CH21: TIMER0->EVENTS_COMPARE[0] -> RADIO->TASKS_RXEN NRF_PPI->CHENSET = PPI_CHENSET_CH21_Enabled << PPI_CHENSET_CH21_Pos; }
void packet_timer_tx_prepare(packet_timer_timeout_callback timeout_callback) { m_timeout_callback = timeout_callback; hfclk_start(); NRF_TIMER0->PRESCALER = 4; NRF_TIMER0->CC[0] = 1500; NRF_TIMER0->CC[1] = 2000; NRF_TIMER0->SHORTS = TIMER_SHORTS_COMPARE1_CLEAR_Enabled << TIMER_SHORTS_COMPARE1_CLEAR_Pos; NRF_TIMER0->INTENSET = TIMER_INTENSET_COMPARE0_Enabled << TIMER_INTENSET_COMPARE0_Pos | TIMER_INTENSET_COMPARE1_Enabled << TIMER_INTENSET_COMPARE1_Pos; NVIC_SetPriority(TIMER0_IRQn, 0); NVIC_EnableIRQ(TIMER0_IRQn); // CH20: TIMER0->EVENTS_COMPARE[0] -> RADIO->TASKS_TXEN // CH22: TIMER0->EVENTS_COMPARE[1] -> RADIO->TASKS_DISABLE NRF_PPI->CHENSET = PPI_CHENSET_CH20_Enabled << PPI_CHENSET_CH20_Pos | PPI_CHENSET_CH22_Enabled << PPI_CHENSET_CH22_Pos; }