From 6423c3dabeba4e4ed9217d71873653bc8af9ae4e Mon Sep 17 00:00:00 2001 From: Stephane D'Alu Date: Sun, 10 Jul 2016 12:04:39 +0200 Subject: [PATCH] moved rng to LLD directory. removed rng power control (doesn't exist in nrf52, wasn't documented in nrf51) renamed peripheral to start at 0 --- demos/NRF52/Classic/main.c | 41 ++++++++++++++++ .../NRF5/{NRF51822 => LLD}/hal_rng_lld.c | 14 ++---- .../NRF5/{NRF51822 => LLD}/hal_rng_lld.h | 47 +++++++++---------- os/hal/ports/NRF5/LLD/hal_st_lld.c | 4 +- os/hal/ports/NRF5/LLD/hal_st_lld.h | 4 +- os/hal/ports/NRF5/NRF51822/hal_qei_lld.h | 10 ++-- os/hal/ports/NRF5/NRF51822/platform.mk | 4 +- os/hal/ports/NRF5/NRF52832/platform.mk | 6 ++- testhal/NRF51/NRF51822/RNG/mcuconf.h | 2 +- 9 files changed, 84 insertions(+), 48 deletions(-) rename os/hal/ports/NRF5/{NRF51822 => LLD}/hal_rng_lld.c (93%) rename os/hal/ports/NRF5/{NRF51822 => LLD}/hal_rng_lld.h (78%) diff --git a/demos/NRF52/Classic/main.c b/demos/NRF52/Classic/main.c index c0a63b97..efa65918 100644 --- a/demos/NRF52/Classic/main.c +++ b/demos/NRF52/Classic/main.c @@ -9,9 +9,50 @@ #define LED_EXT 14 + + +/* + * Command Random + */ +#define RANDOM_BUFFER_SIZE 1024 +static uint8_t random_buffer[RANDOM_BUFFER_SIZE]; + +static void cmd_random(BaseSequentialStream *chp, int argc, char *argv[]) { + uint16_t size = 16; + uint16_t i = 0; + uint8_t nl = 0; + + if (argc > 0) { + size = atoi(argv[0]); + } + + if (size > RANDOM_BUFFER_SIZE) { + chprintf(chp, "random: maximum size is %d.\r\n", RANDOM_BUFFER_SIZE); + return; + } + + chprintf(chp, "Fetching %d random byte(s):\r\n", size); + + rngStart(&RNGD1, NULL); + rngWrite(&RNGD1, random_buffer, size, TIME_INFINITE); + rngStop(&RNGD1); + + for (i = 0 ; i < size ; i++) { + chprintf(chp, "%02x ", random_buffer[i]); + if ((nl = (((i+1) % 20)) == 0)) + chprintf(chp, "\r\n"); + } + if (!nl) + chprintf(chp, "\r\n"); + +} + + + static THD_WORKING_AREA(shell_wa, 1024); static const ShellCommand commands[] = { + {"random", cmd_random}, {NULL, NULL} }; diff --git a/os/hal/ports/NRF5/NRF51822/hal_rng_lld.c b/os/hal/ports/NRF5/LLD/hal_rng_lld.c similarity index 93% rename from os/hal/ports/NRF5/NRF51822/hal_rng_lld.c rename to os/hal/ports/NRF5/LLD/hal_rng_lld.c index d041cfac..5e859815 100644 --- a/os/hal/ports/NRF5/NRF51822/hal_rng_lld.c +++ b/os/hal/ports/NRF5/LLD/hal_rng_lld.c @@ -15,8 +15,8 @@ */ /** - * @file NRF51/NRF518221/rng_lld.c - * @brief NRF51 RNG subsystem low level driver source. + * @file NRF5/LLD/hal_rng_lld.c + * @brief NRF5 RNG subsystem low level driver source. * * @addtogroup RNG * @{ @@ -41,8 +41,8 @@ static const RNGConfig default_config = { /* Driver exported variables. */ /*===========================================================================*/ -/** @brief RNG1 driver identifier.*/ -#if NRF5_RNG_USE_RNG1 || defined(__DOXYGEN__) +/** @brief RNGD1 driver identifier.*/ +#if NRF5_RNG_USE_RNG0 || defined(__DOXYGEN__) RNGDriver RNGD1; #endif @@ -87,9 +87,6 @@ void rng_lld_start(RNGDriver *rngp) { if (rngp->config == NULL) rngp->config = &default_config; - /* Power on peripheric */ - rng->POWER = 1; - /* Configure digital error correction */ if (rngp->config->digital_error_correction) rng->CONFIG |= RNG_CONFIG_DERCEN_Msk; @@ -117,9 +114,8 @@ void rng_lld_start(RNGDriver *rngp) { void rng_lld_stop(RNGDriver *rngp) { NRF_RNG_Type *rng = rngp->rng; - /* Stop and power off peripheric */ + /* Stop peripheric */ rng->TASKS_STOP = 1; - rng->POWER = 0; } diff --git a/os/hal/ports/NRF5/NRF51822/hal_rng_lld.h b/os/hal/ports/NRF5/LLD/hal_rng_lld.h similarity index 78% rename from os/hal/ports/NRF5/NRF51822/hal_rng_lld.h rename to os/hal/ports/NRF5/LLD/hal_rng_lld.h index feeaae46..9a9f4716 100644 --- a/os/hal/ports/NRF5/NRF51822/hal_rng_lld.h +++ b/os/hal/ports/NRF5/LLD/hal_rng_lld.h @@ -15,8 +15,8 @@ */ /** - * @file NRF51/NRF51822/rng_lld.h - * @brief NRF51 RNG subsystem low level driver header. + * @file NRF5/LLD/hal_rng_lld.h + * @brief NRF5 RNG subsystem low level driver header. * * @addtogroup RNG * @{ @@ -40,28 +40,19 @@ * @{ */ /** - * @brief RNG1 driver enable switch. - * @details If set to @p TRUE the support for RNG1 is included. + * @brief RNGD1 driver enable switch. + * @details If set to @p TRUE the support for RNGD1 is included. * @note The default is @p FALSE. */ -#if !defined(NRF5_RNG_USE_RNG1) || defined(__DOXYGEN__) -#define NRF5_RNG_USE_RNG1 FALSE +#if !defined(NRF5_RNG_USE_RNG0) || defined(__DOXYGEN__) +#define NRF5_RNG_USE_RNG0 FALSE #endif /** - * @brief RNG1 driver enable switch. - * @details If set to @p TRUE the support for RNG1 is included. - * @note The default is @p FALSE. + * @brief RNG interrupt priority level setting for RNG0. */ -#if !defined(NRF5_RNG_USE_RNG1) || defined(__DOXYGEN__) -#define NRF5_RNG_USE_POWER_ON_WRITE FALSE -#endif - -/** - * @brief RNG1 interrupt priority level setting. - */ -#if !defined(NRF5_RNG_RNG1_IRQ_PRIORITY) || defined(__DOXYGEN__) -#define NRF5_RNG_RNG1_IRQ_PRIORITY 3 +#if !defined(NRF5_RNG_RNG0_IRQ_PRIORITY) || defined(__DOXYGEN__) +#define NRF5_RNG_RNG0_IRQ_PRIORITY 3 #endif @@ -69,9 +60,13 @@ /* Derived constants and error checks. */ /*===========================================================================*/ -#if NRF5_RNG_USE_RNG1 && \ - !OSAL_IRQ_IS_VALID_PRIORITY(NRF5_RNG_RNG1_IRQ_PRIORITY) -#error "Invalid IRQ priority assigned to RNG1" +#if NRF5_RNG_USE_RNG0 == FALSE +#error "Requesting RNG driver, but no RNG peripheric attached" +#endif + +#if NRF5_RNG_USE_RNG0 && \ + !OSAL_IRQ_IS_VALID_PRIORITY(NRF5_RNG_RNG0_IRQ_PRIORITY) +#error "Invalid IRQ priority assigned to RNG0" #endif /*===========================================================================*/ @@ -96,9 +91,9 @@ typedef struct { * speed advantage, but may result in a statistical distribution * that is not perfectly uniform. * - * @note On average, it take 167µs to get a byte without digitial - * error correction and 677µs with, but no garantee is made - * on the necessary time to generate one byte. + * @note For nRF51, on average, it take 167µs to get a byte without + * digitial error correction and 677µs with, but no garantee + * is made on the necessary time to generate one byte. */ uint8_t digital_error_correction:1; /** @@ -148,9 +143,9 @@ struct RNGDriver { /* External declarations. */ /*===========================================================================*/ -#if NRF5_RNG_USE_RNG1 && !defined(__DOXYGEN__) +#if NRF5_RNG_USE_RNG0 && !defined(__DOXYGEN__) extern RNGDriver RNGD1; -#endif /* NRF5_RNG_USE_RNG1 */ +#endif /* NRF5_RNG_USE_RNG0 */ #ifdef __cplusplus extern "C" { diff --git a/os/hal/ports/NRF5/LLD/hal_st_lld.c b/os/hal/ports/NRF5/LLD/hal_st_lld.c index 931f1a72..c78b4bbf 100644 --- a/os/hal/ports/NRF5/LLD/hal_st_lld.c +++ b/os/hal/ports/NRF5/LLD/hal_st_lld.c @@ -275,8 +275,8 @@ void st_lld_init(void) { NRF_TIMER0->TASKS_CLEAR = 1; /* - * Using 32-bit mode with prescaler 16 configures this - * timer with a 1MHz clock. + * Using 32-bit mode with prescaler 1/16 configures this + * timer with a 1MHz clock, reducing power consumption. */ NRF_TIMER0->BITMODE = TIMER_BITMODE_BITMODE_32Bit; NRF_TIMER0->PRESCALER = 4; diff --git a/os/hal/ports/NRF5/LLD/hal_st_lld.h b/os/hal/ports/NRF5/LLD/hal_st_lld.h index 3b4bf8ec..9d67ce97 100644 --- a/os/hal/ports/NRF5/LLD/hal_st_lld.h +++ b/os/hal/ports/NRF5/LLD/hal_st_lld.h @@ -15,8 +15,8 @@ */ /** - * @file st_lld.h - * @brief NRF51822 ST subsystem low level driver header. + * @file NRF5/LLD/st_lld.h + * @brief NRF5 ST subsystem low level driver header. * @details This header is designed to be include-able without having to * include other files from the HAL. * diff --git a/os/hal/ports/NRF5/NRF51822/hal_qei_lld.h b/os/hal/ports/NRF5/NRF51822/hal_qei_lld.h index f9a87b0e..6328babb 100644 --- a/os/hal/ports/NRF5/NRF51822/hal_qei_lld.h +++ b/os/hal/ports/NRF5/NRF51822/hal_qei_lld.h @@ -106,15 +106,15 @@ /* Derived constants and error checks. */ /*===========================================================================*/ -#if NRF5_QEI_USE_QDEC0 && \ - !OSAL_IRQ_IS_VALID_PRIORITY(NRF5_QEI_QDEC0_IRQ_PRIORITY) -#error "Invalid IRQ priority assigned to QDEC0" -#endif - #if NRF5_QEI_USE_QDEC0 == FALSE #error "Requesting QEI driver, but no QDEC peripheric attached" #endif +#if NRF5_QEI_USE_QDEC0 && \ + !OSAL_IRQ_IS_VALID_PRIORITY(NRF5_QEI_QDEC0_IRQ_PRIORITY) +#error "Invalid IRQ priority assigned to QDEC0" +#endif + /*===========================================================================*/ /* Driver data structures and types. */ diff --git a/os/hal/ports/NRF5/NRF51822/platform.mk b/os/hal/ports/NRF5/NRF51822/platform.mk index ce424370..eff2f204 100644 --- a/os/hal/ports/NRF5/NRF51822/platform.mk +++ b/os/hal/ports/NRF5/NRF51822/platform.mk @@ -32,7 +32,7 @@ ifneq ($(findstring HAL_USE_WDG TRUE,$(HALCONF)),) PLATFORMSRC += ${CHIBIOS_CONTRIB}/os/hal/ports/NRF5/NRF51822/hal_wdg_lld.c endif ifneq ($(findstring HAL_USE_RNG TRUE,$(HALCONF)),) -PLATFORMSRC += ${CHIBIOS_CONTRIB}/os/hal/ports/NRF5/NRF51822/hal_rng_lld.c +PLATFORMSRC += ${CHIBIOS_CONTRIB}/os/hal/ports/NRF5/LLD/hal_rng_lld.c endif ifneq ($(findstring HAL_USE_PWM TRUE,$(HALCONF)),) PLATFORMSRC += ${CHIBIOS_CONTRIB}/os/hal/ports/NRF5/NRF51822/hal_pwm_lld.c @@ -53,7 +53,7 @@ PLATFORMSRC = ${CHIBIOS}/os/hal/ports/common/ARMCMx/nvic.c \ ${CHIBIOS_CONTRIB}/os/hal/ports/NRF5/NRF51822/hal_adc_lld.c \ ${CHIBIOS_CONTRIB}/os/hal/ports/NRF5/NRF51822/hal_gpt_lld.c \ ${CHIBIOS_CONTRIB}/os/hal/ports/NRF5/NRF51822/hal_wdg_lld.c \ - ${CHIBIOS_CONTRIB}/os/hal/ports/NRF5/NRF51822/hal_rng_lld.c \ + ${CHIBIOS_CONTRIB}/os/hal/ports/NRF5/LLD/hal_rng_lld.c \ ${CHIBIOS_CONTRIB}/os/hal/ports/NRF5/NRF51822/hal_pwm_lld.c \ ${CHIBIOS_CONTRIB}/os/hal/ports/NRF5/NRF51822/hal_qei_lld.c endif diff --git a/os/hal/ports/NRF5/NRF52832/platform.mk b/os/hal/ports/NRF5/NRF52832/platform.mk index 453abc98..855752cf 100644 --- a/os/hal/ports/NRF5/NRF52832/platform.mk +++ b/os/hal/ports/NRF5/NRF52832/platform.mk @@ -12,12 +12,16 @@ endif ifneq ($(findstring HAL_USE_SERIAL TRUE,$(HALCONF)),) PLATFORMSRC += ${CHIBIOS_CONTRIB}/os/hal/ports/NRF5/LLD/hal_serial_lld.c endif +ifneq ($(findstring HAL_USE_RNG TRUE,$(HALCONF)),) +PLATFORMSRC += ${CHIBIOS_CONTRIB}/os/hal/ports/NRF5/LLD/hal_rng_lld.c +endif else PLATFORMSRC = ${CHIBIOS}/os/hal/ports/common/ARMCMx/nvic.c \ ${CHIBIOS_CONTRIB}/os/hal/ports/NRF5/NRF52832/hal_lld.c \ ${CHIBIOS_CONTRIB}/os/hal/ports/NRF5/LLD/hal_pal_lld.c \ ${CHIBIOS_CONTRIB}/os/hal/ports/NRF5/LLD/hal_serial_lld.c \ - ${CHIBIOS_CONTRIB}/os/hal/ports/NRF5/LLD/hal_st_lld.c + ${CHIBIOS_CONTRIB}/os/hal/ports/NRF5/LLD/hal_st_lld.c \ + ${CHIBIOS_CONTRIB}/os/hal/ports/NRF5/LLD/hal_rng_lld.c endif # Required include directories diff --git a/testhal/NRF51/NRF51822/RNG/mcuconf.h b/testhal/NRF51/NRF51822/RNG/mcuconf.h index 11ebce1b..dfde5a91 100644 --- a/testhal/NRF51/NRF51822/RNG/mcuconf.h +++ b/testhal/NRF51/NRF51822/RNG/mcuconf.h @@ -17,7 +17,7 @@ #ifndef _MCUCONF_H_ #define _MCUCONF_H_ -#define NRF5_RNG_USE_RNG1 TRUE +#define NRF5_RNG_USE_RNG0 TRUE #define NRF5_SERIAL_USE_UART0 TRUE