Exemple #1
0
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;
}