From 060f9c5954480b82f7e82782e8abe5026d73a317 Mon Sep 17 00:00:00 2001 From: areviu Date: Tue, 14 Nov 2017 20:06:06 +0000 Subject: [PATCH] added SAMA TRNG driver git-svn-id: svn://svn.code.sf.net/p/chibios/svn/trunk@11003 35acf78f-673a-0410-8e92-d51de3d6d3f4 --- os/hal/ports/SAMA/LLD/TRNGv1/driver.mk | 5 ++ os/hal/ports/SAMA/LLD/TRNGv1/sama_trng_lld.c | 53 ++++++++++++++++++++ os/hal/ports/SAMA/LLD/TRNGv1/sama_trng_lld.h | 36 +++++++++++++ 3 files changed, 94 insertions(+) create mode 100644 os/hal/ports/SAMA/LLD/TRNGv1/driver.mk create mode 100644 os/hal/ports/SAMA/LLD/TRNGv1/sama_trng_lld.c create mode 100644 os/hal/ports/SAMA/LLD/TRNGv1/sama_trng_lld.h diff --git a/os/hal/ports/SAMA/LLD/TRNGv1/driver.mk b/os/hal/ports/SAMA/LLD/TRNGv1/driver.mk new file mode 100644 index 000000000..92d59e051 --- /dev/null +++ b/os/hal/ports/SAMA/LLD/TRNGv1/driver.mk @@ -0,0 +1,5 @@ +PLATFORMSRC +=$(CHIBIOS)/os/hal/ports/SAMA/LLD/TRNGv1/sama_trng_lld.c + + + +PLATFORMINC +=$(CHIBIOS)/os/hal/ports/SAMA/LLD/TRNGv1 \ No newline at end of file diff --git a/os/hal/ports/SAMA/LLD/TRNGv1/sama_trng_lld.c b/os/hal/ports/SAMA/LLD/TRNGv1/sama_trng_lld.c new file mode 100644 index 000000000..2c416b6ad --- /dev/null +++ b/os/hal/ports/SAMA/LLD/TRNGv1/sama_trng_lld.c @@ -0,0 +1,53 @@ +/* + ChibiOS - Copyright (C) 2006..2016 Giovanni Di Sirio + + 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. +*/ +#include "hal.h" +#include "sama_trng_lld.h" + + +void trng_lld_init(void) { + pmcEnableTRNG(); +} + +void trng_lld_start(void) { + + TRNG->TRNG_CR = TRNG_CR_ENABLE | TRNG_CR_KEY_PASSWD; + //enable interrupt + // TRNG->TRNG_IER = TRNG_IER_DATRDY; + + +} + +void trng_lld_getrandom(uint32_t * random) { + + //generate a random every 84 clock cycles. + while (!(TRNG->TRNG_ISR & TRNG_ISR_DATRDY)); + + *random = TRNG->TRNG_ODATA; + +} + +void trng_lld_stop(void) { + //disable interrupt + //TRNG->TRNG_IDR = TRNG_IDR_DATRDY; + TRNG->TRNG_CR = TRNG_CR_KEY_PASSWD; + pmcDisableTRNG(); +} + + + + + + diff --git a/os/hal/ports/SAMA/LLD/TRNGv1/sama_trng_lld.h b/os/hal/ports/SAMA/LLD/TRNGv1/sama_trng_lld.h new file mode 100644 index 000000000..83dd36174 --- /dev/null +++ b/os/hal/ports/SAMA/LLD/TRNGv1/sama_trng_lld.h @@ -0,0 +1,36 @@ +/* + ChibiOS - Copyright (C) 2006..2016 Giovanni Di Sirio + + 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. +*/ +#ifndef HAL_LLD_SAMA_TRNG_H_ +#define HAL_LLD_SAMA_TRNG_H_ + + + +#ifdef __cplusplus +extern "C" { +#endif + +extern void trng_lld_init(void); +extern void trng_lld_start(void); +extern void trng_lld_stop(void); +extern void trng_lld_getrandom(uint32_t * random); + +#ifdef __cplusplus +} +#endif + + + +#endif /* HAL_LLD_SAMA_TRNG_H_ */