diff --git a/os/hal/include/rng.h b/os/hal/include/rng.h index ab0e3633..4730f7bd 100644 --- a/os/hal/include/rng.h +++ b/os/hal/include/rng.h @@ -44,10 +44,6 @@ /* Derived constants and error checks. */ /*===========================================================================*/ -#if NRF51_RNG_USE_RNG1 != TRUE && RNGSW_USE_RNG1 != TRUE -#error "RNG requires at least one LLD driver." -#endif - /*===========================================================================*/ /* Driver data structures and types. */ /*===========================================================================*/ @@ -62,7 +58,6 @@ typedef enum { } rngstate_t; #include "rng_lld.h" -//#include "rngsw.h" /* Include software LL driver */ /*===========================================================================*/ diff --git a/os/hal/ports/NRF51/NRF51822/rng_lld.c b/os/hal/ports/NRF51/NRF51822/rng_lld.c index b22b9fc9..12a75e7a 100644 --- a/os/hal/ports/NRF51/NRF51822/rng_lld.c +++ b/os/hal/ports/NRF51/NRF51822/rng_lld.c @@ -124,19 +124,12 @@ msg_t rng_lld_write(RNGDriver *rngp, uint8_t *buf, size_t n, if (n == 0) return MSG_OK; - if (n == 1) - rngp->rng->SHORTS |= RNG_SHORTS_VALRDY_STOP_Msk; + NRF_RNG->EVENTS_VALRDY = 0; - - - NRF_RNG->EVENTS_VALRDY = 0; - for (i = 0 ; i < n ; i++) { - /* sleep until number is generated */ + /* wait for next byte */ while (NRF_RNG->EVENTS_VALRDY == 0) { - /* enable wake up on events for __WFE CPU sleep */ SCB->SCR |= SCB_SCR_SEVONPEND_Msk; - /* sleep until next event */ __SEV(); __WFE(); __WFE(); diff --git a/os/hal/ports/NRF51/NRF51822/rng_lld.h b/os/hal/ports/NRF51/NRF51822/rng_lld.h index a586ad40..8d4db02b 100644 --- a/os/hal/ports/NRF51/NRF51822/rng_lld.h +++ b/os/hal/ports/NRF51/NRF51822/rng_lld.h @@ -27,19 +27,6 @@ #if (HAL_USE_RNG == TRUE) || defined(__DOXYGEN__) -/* - * This error check must occur outsite of RNGSW_USE_RNG1 to check if - * two LLD drivers are enabled at the same time - */ -#if (NRF51_RNG_USE_RNG1 == TRUE) && (RNGSW_USE_RNG1 == TRUE) -#error "Software RNG can't be enable with NRF51_RNG_USE_RNG1" -#endif - -/** - * Allow RNG Software override. - */ -#if RNGSW_USE_RNG1 != TRUE - /*===========================================================================*/ /* Driver constants. */ /*===========================================================================*/ @@ -74,7 +61,7 @@ * @brief RNG1 interrupt priority level setting. */ #if !defined(NRF51_RNG_RNG1_IRQ_PRIORITY) || defined(__DOXYGEN__) -#define NRF51_RNG_RNG1_IRQ_PRIORITY 8 +#define NRF51_RNG_RNG1_IRQ_PRIORITY 10 #endif @@ -169,8 +156,6 @@ extern "C" { } #endif -#endif /* RNGSW_USE_RNG1 */ - #endif /* HAL_USE_RNG */ #endif /* _RNG_LLD_H_ */ diff --git a/os/hal/src/rng.c b/os/hal/src/rng.c index f9c3811e..5ff6d2dd 100644 --- a/os/hal/src/rng.c +++ b/os/hal/src/rng.c @@ -109,14 +109,13 @@ void rngStop(RNGDriver *rngp) { } /** - * @brief Performs a RNG calculation. - * @details This synchronous function performs a rng calculation operation. - * @pre In order to use this function the driver must have been configured - * without callbacks (@p end_cb = @p NULL). + * @brief Write random bytes + * @details Write the request number of bytes.. * * @param[in] rngp pointer to the @p RNGDriver object - * @param[in] n number of bytes to send * @param[in] buf the pointer to the buffer + * @param[in] n number of bytes to send + * @param[in] timeout timeout value * * @api */ @@ -129,15 +128,13 @@ msg_t rngWrite(RNGDriver *rngp, uint8_t *buf, size_t n, systime_t timeout) { } /** - * @brief Performs a RNG calculation. - * @details This synchronous function performs a rng calcuation operation. - * @pre In order to use this function the driver must have been configured - * without callbacks (@p end_cb = @p NULL). - * @post At the end of the operation the configured callback is invoked. + * @brief Write random bytes + * @details Write the request number of bytes.. * * @param[in] rngp pointer to the @p RNGDriver object - * @param[in] n number of bytes to send * @param[in] buf the pointer to the buffer + * @param[in] n number of bytes to send + * @param[in] timeout timeout value * * @iclass */