diff --git a/boards/pca10000/include/periph_conf.h b/boards/pca10000/include/periph_conf.h index 90aba936b2..25fb6ce0db 100644 --- a/boards/pca10000/include/periph_conf.h +++ b/boards/pca10000/include/periph_conf.h @@ -85,6 +85,13 @@ #define UART_0_PIN_CTS 10 /** @} */ +/** + * @name Random Number Generator configuration + * @{ + */ +#define RANDOM_NUMOF (1U) +/** @} */ + /** * @name GPIO configuration * @{ diff --git a/boards/pca10005/include/periph_conf.h b/boards/pca10005/include/periph_conf.h index 4327867302..1f1f9bad13 100644 --- a/boards/pca10005/include/periph_conf.h +++ b/boards/pca10005/include/periph_conf.h @@ -70,6 +70,13 @@ #define UART_0_PIN_TX 9 /** @} */ +/** + * @name Random Number Generator configuration + * @{ + */ +#define RANDOM_NUMOF (1U) +/** @} */ + /** * @name GPIO configuration diff --git a/cpu/nrf51822/periph/random.c b/cpu/nrf51822/periph/random.c new file mode 100644 index 0000000000..c3d9f41a0d --- /dev/null +++ b/cpu/nrf51822/periph/random.c @@ -0,0 +1,57 @@ +/* + * Copyright (C) 2014 Freie Universität Berlin + * + * This file is subject to the terms and conditions of the GNU Lesser General + * Public License v2.1. See the file LICENSE in the top level directory for more + * details. + */ + +/** + * @ingroup cpu_nrf51822 + * @{ + * + * @file + * @brief Driver for the NRF51822 random number generator + * + * @author Hauke Petersen + * + * @} + */ + +#include "cpu.h" +#include "periph_conf.h" +#include "periph/random.h" + +/* guard file in case no random device was specified */ +#if RANDOM_NUMOF + +void random_init(void) +{ + NRF_RNG->POWER = 1; + NRF_RNG->TASKS_START = 1; +} + +int random_read(char *buf, unsigned int num) +{ + unsigned int count = 0; + + while (count < num) { + while (NRF_RNG->EVENTS_VALRDY == 0); + NRF_RNG->EVENTS_VALRDY = 0; + buf[count++] = (char)NRF_RNG->VALUE; + } + + return count; +} + +void random_poweron(void) +{ + NRF_RNG->POWER = 1; +} + +void random_poweroff(void) +{ + NRF_RNG->POWER = 0; +} + +#endif /* RANDOM_NUMOF */