aboutsummaryrefslogtreecommitdiffstats
path: root/os/hal/ports/NRF5/NRF51822
diff options
context:
space:
mode:
Diffstat (limited to 'os/hal/ports/NRF5/NRF51822')
-rw-r--r--os/hal/ports/NRF5/NRF51822/hal_qei_lld.h10
-rw-r--r--os/hal/ports/NRF5/NRF51822/hal_rng_lld.c167
-rw-r--r--os/hal/ports/NRF5/NRF51822/hal_rng_lld.h171
-rw-r--r--os/hal/ports/NRF5/NRF51822/platform.mk4
4 files changed, 7 insertions, 345 deletions
diff --git a/os/hal/ports/NRF5/NRF51822/hal_qei_lld.h b/os/hal/ports/NRF5/NRF51822/hal_qei_lld.h
index f9a87b0..6328bab 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/hal_rng_lld.c b/os/hal/ports/NRF5/NRF51822/hal_rng_lld.c
deleted file mode 100644
index d041cfa..0000000
--- a/os/hal/ports/NRF5/NRF51822/hal_rng_lld.c
+++ /dev/null
@@ -1,167 +0,0 @@
-/*
- RNG for ChibiOS - Copyright (C) 2016 Stephane D'Alu
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
-*/
-
-/**
- * @file NRF51/NRF518221/rng_lld.c
- * @brief NRF51 RNG subsystem low level driver source.
- *
- * @addtogroup RNG
- * @{
- */
-
-#include "hal.h"
-
-#if (HAL_USE_RNG == TRUE) || defined(__DOXYGEN__)
-
-/*===========================================================================*/
-/* Driver local definitions. */
-/*===========================================================================*/
-
-/**
- * @brief RNG default configuration.
- */
-static const RNGConfig default_config = {
- .digital_error_correction = 1,
-};
-
-/*===========================================================================*/
-/* Driver exported variables. */
-/*===========================================================================*/
-
-/** @brief RNG1 driver identifier.*/
-#if NRF5_RNG_USE_RNG1 || defined(__DOXYGEN__)
-RNGDriver RNGD1;
-#endif
-
-/*===========================================================================*/
-/* Driver local variables and types. */
-/*===========================================================================*/
-
-/*===========================================================================*/
-/* Driver local functions. */
-/*===========================================================================*/
-
-/*===========================================================================*/
-/* Driver interrupt handlers. */
-/*===========================================================================*/
-
-/*===========================================================================*/
-/* Driver exported functions. */
-/*===========================================================================*/
-
-/**
- * @brief Low level RNG driver initialization.
- *
- * @notapi
- */
-void rng_lld_init(void) {
- rngObjectInit(&RNGD1);
- RNGD1.rng = NRF_RNG;
- RNGD1.irq = RNG_IRQn;
-}
-
-/**
- * @brief Configures and activates the RNG peripheral.
- *
- * @param[in] rngp pointer to the @p RNGDriver object
- *
- * @notapi
- */
-void rng_lld_start(RNGDriver *rngp) {
- NRF_RNG_Type *rng = rngp->rng;
-
- /* If not specified, set default configuration */
- 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;
- else
- rng->CONFIG &= ~RNG_CONFIG_DERCEN_Msk;
-
- /* Clear pending events */
- rng->EVENTS_VALRDY = 0;
-
- /* Set interrupt mask */
- rng->INTENSET = RNG_INTENSET_VALRDY_Msk;
-
- /* Start */
- rng->TASKS_START = 1;
-}
-
-
-/**
- * @brief Deactivates the RNG peripheral.
- *
- * @param[in] rngp pointer to the @p RNGDriver object
- *
- * @notapi
- */
-void rng_lld_stop(RNGDriver *rngp) {
- NRF_RNG_Type *rng = rngp->rng;
-
- /* Stop and power off peripheric */
- rng->TASKS_STOP = 1;
- rng->POWER = 0;
-}
-
-
-/**
- * @brief Write random bytes;
- *
- * @param[in] rngp pointer to the @p RNGDriver object
- * @param[in] n size of buf in bytes
- * @param[in] buf @p buffer location
- *
- * @notapi
- */
-msg_t rng_lld_write(RNGDriver *rngp, uint8_t *buf, size_t n,
- systime_t timeout) {
- NRF_RNG_Type *rng = rngp->rng;
- size_t i;
-
- for (i = 0 ; i < n ; i++) {
- /* Wait for byte ready
- * It take about 677µs to generate a new byte, not sure if
- * forcing a context switch will be a benefit
- */
- while (rng->EVENTS_VALRDY == 0) {
- /* Sleep and wakeup on ARM event (interrupt) */
- SCB->SCR |= SCB_SCR_SEVONPEND_Msk;
- __SEV();
- __WFE();
- __WFE();
- }
-
- /* Read byte */
- buf[i] = (char)rng->VALUE;
-
- /* Mark as read */
- rng->EVENTS_VALRDY = 0;
-
- /* Clear interrupt so we can wake up again */
- nvicClearPending(rngp->irq);
- }
- return MSG_OK;
-}
-
-#endif /* HAL_USE_RNG */
-
-/** @} */
diff --git a/os/hal/ports/NRF5/NRF51822/hal_rng_lld.h b/os/hal/ports/NRF5/NRF51822/hal_rng_lld.h
deleted file mode 100644
index feeaae4..0000000
--- a/os/hal/ports/NRF5/NRF51822/hal_rng_lld.h
+++ /dev/null
@@ -1,171 +0,0 @@
-/*
- RNG for ChibiOS - Copyright (C) 2016 Stephane D'Alu
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
-*/
-
-/**
- * @file NRF51/NRF51822/rng_lld.h
- * @brief NRF51 RNG subsystem low level driver header.
- *
- * @addtogroup RNG
- * @{
- */
-
-#ifndef HAL_RNG_LLD_H
-#define HAL_RNG_LLD_H
-
-#if (HAL_USE_RNG == TRUE) || defined(__DOXYGEN__)
-
-/*===========================================================================*/
-/* Driver constants. */
-/*===========================================================================*/
-
-/*===========================================================================*/
-/* Driver pre-compile time settings. */
-/*===========================================================================*/
-
-/**
- * @name Configuration options
- * @{
- */
-/**
- * @brief RNG1 driver enable switch.
- * @details If set to @p TRUE the support for RNG1 is included.
- * @note The default is @p FALSE.
- */
-#if !defined(NRF5_RNG_USE_RNG1) || defined(__DOXYGEN__)
-#define NRF5_RNG_USE_RNG1 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.
- */
-#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
-#endif
-
-
-/*===========================================================================*/
-/* 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"
-#endif
-
-/*===========================================================================*/
-/* Driver data structures and types. */
-/*===========================================================================*/
-
-/**
- * @brief Type of a structure representing an RNG driver.
- */
-typedef struct RNGDriver RNGDriver;
-
-/**
- * @brief Driver configuration structure.
- */
-typedef struct {
- /* End of the mandatory fields.*/
- /**
- * @brief Activate the digital error correction
- *
- * @details A digital corrector algorithm is employed to remove any
- * bias toward '1' or '0'. Disabling it offers a substantial
- * 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.
- */
- uint8_t digital_error_correction:1;
- /**
- * @brief Only power the RNG device when requeting random bytes
- *
- * @details Device will not be powered when started/stopped
- * but only when writint bytes.
- */
- uint8_t power_on_write:1;
-} RNGConfig;
-
-
-/**
- * @brief Structure representing an RNG driver.
- */
-struct RNGDriver {
- /**
- * @brief Driver state.
- */
- rngstate_t state;
- /**
- * @brief Current configuration data.
- */
- const RNGConfig *config;
-#if RNG_USE_MUTUAL_EXCLUSION || defined(__DOXYGEN__)
- /**
- * @brief Mutex protecting the peripheral.
- */
- mutex_t mutex;
-#endif /* RNG_USE_MUTUAL_EXCLUSION */
- /* End of the mandatory fields.*/
- /**
- * @brief Pointer to the RNGx registers block.
- */
- NRF_RNG_Type *rng;
- /**
- * @brief IRQ number
- */
- uint32_t irq;
-};
-
-/*===========================================================================*/
-/* Driver macros. */
-/*===========================================================================*/
-
-/*===========================================================================*/
-/* External declarations. */
-/*===========================================================================*/
-
-#if NRF5_RNG_USE_RNG1 && !defined(__DOXYGEN__)
-extern RNGDriver RNGD1;
-#endif /* NRF5_RNG_USE_RNG1 */
-
-#ifdef __cplusplus
-extern "C" {
-#endif
- void rng_lld_init(void);
- void rng_lld_start(RNGDriver *rngp);
- void rng_lld_stop(RNGDriver *rngp);
- msg_t rng_lld_write(RNGDriver *rngp, uint8_t *buf, size_t n,
- systime_t timeout);
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* HAL_USE_RNG */
-
-#endif /* HAL_RNG_LLD_H */
-
-/** @} */
diff --git a/os/hal/ports/NRF5/NRF51822/platform.mk b/os/hal/ports/NRF5/NRF51822/platform.mk
index ce42437..eff2f20 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