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
This commit is contained in:
Stephane D'Alu 2016-07-10 12:04:39 +02:00
parent 3db81f7f03
commit 6423c3dabe
9 changed files with 84 additions and 48 deletions

View File

@ -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}
};

View File

@ -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;
}

View File

@ -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" {

View File

@ -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;

View File

@ -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.
*

View File

@ -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. */

View File

@ -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

View File

@ -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

View File

@ -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