void nrfx_rng_irq_handler(void) { nrf_rng_event_clear(NRF_RNG_EVENT_VALRDY); uint8_t rng_value = nrf_rng_random_value_get(); m_rng_hndl(rng_value); NRFX_LOG_DEBUG("Event: NRF_RNG_EVENT_VALRDY."); }
void RNG_IRQHandler(void) { if (nrf_rng_event_get(NRF_RNG_EVENT_VALRDY) && nrf_rng_int_get(NRF_RNG_INT_VALRDY_MASK)) { nrf_rng_event_clear(NRF_RNG_EVENT_VALRDY); uint32_t nrf_error = app_fifo_put(&m_rng_cb.rand_pool, nrf_rng_random_value_get()); if ((FIFO_LENGTH(m_rng_cb.rand_pool) > m_rng_cb.rand_pool.buf_size_mask) || (nrf_error == NRF_ERROR_NO_MEM)) { rng_stop(); } } }
void RNG_IRQHandler(void) { if (nrf_rng_event_get(NRF_RNG_EVENT_VALRDY) && nrf_rng_int_get(NRF_RNG_INT_VALRDY_MASK)) { nrf_rng_event_clear(NRF_RNG_EVENT_VALRDY); bufferPut(nrf_rng_random_value_get()); if (bufferIsFull()) { generatorStop(); } } }
static inline u8_t entropy_nrf5_get_u8(void) { while (!nrf_rng_event_get(NRF_RNG_EVENT_VALRDY)) { __WFE(); __SEV(); __WFE(); } nrf_rng_event_clear(NRF_RNG_EVENT_VALRDY); /* Clear the Pending status of the RNG interrupt so that it could * wake up the core when the VALRDY event occurs again. */ NVIC_ClearPendingIRQ(RNG_IRQn); return nrf_rng_random_value_get(); }
static int random_byte_get(void) { int retval = -EAGAIN; unsigned int key; key = irq_lock(); if (nrf_rng_event_get(NRF_RNG_EVENT_VALRDY)) { retval = nrf_rng_random_value_get(); nrf_rng_event_clear(NRF_RNG_EVENT_VALRDY); } irq_unlock(key); return retval; }