added SAMA TRNG driver

git-svn-id: svn://svn.code.sf.net/p/chibios/svn/trunk@11003 35acf78f-673a-0410-8e92-d51de3d6d3f4
This commit is contained in:
areviu 2017-11-14 20:06:06 +00:00
parent 006e9f17a4
commit 060f9c5954
3 changed files with 94 additions and 0 deletions

View File

@ -0,0 +1,5 @@
PLATFORMSRC +=$(CHIBIOS)/os/hal/ports/SAMA/LLD/TRNGv1/sama_trng_lld.c
PLATFORMINC +=$(CHIBIOS)/os/hal/ports/SAMA/LLD/TRNGv1

View File

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

View File

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