123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109 |
- /* lpc_18xx_port.c
- *
- * Copyright (C) 2006-2022 wolfSSL Inc.
- *
- * This file is part of wolfSSL.
- *
- * wolfSSL is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * wolfSSL is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1335, USA
- */
- #include "board.h"
- #include "otp_18xx_43xx.h" /* For RNG */
- #include "timer_18xx_43xx.h"
- static uint32_t mTimeInit = 0;
- #define TIMER_SCALER 1000000
- static void init_time(void)
- {
- if(mTimeInit == 0) {
- uint32_t timerFreq;
- /* Set current time for RTC 2:00:00PM, 2012-10-05 */
- RTC_TIME_T FullTime;
- Chip_RTC_Init(LPC_RTC);
- FullTime.time[RTC_TIMETYPE_SECOND] = 0;
- FullTime.time[RTC_TIMETYPE_MINUTE] = 0;
- FullTime.time[RTC_TIMETYPE_HOUR] = 14;
- FullTime.time[RTC_TIMETYPE_DAYOFMONTH] = 5;
- FullTime.time[RTC_TIMETYPE_DAYOFWEEK] = 5;
- FullTime.time[RTC_TIMETYPE_DAYOFYEAR] = 279;
- FullTime.time[RTC_TIMETYPE_MONTH] = 10;
- FullTime.time[RTC_TIMETYPE_YEAR] = 2012;
- Chip_RTC_SetFullTime(LPC_RTC, &FullTime);
- /* Enable RTC (starts increase the tick counter and second counter register) */
- Chip_RTC_Enable(LPC_RTC, ENABLE);
- /* Enable timer 1 clock and reset it */
- Chip_TIMER_Init(LPC_TIMER2);
- Chip_RGU_TriggerReset(RGU_TIMER2_RST);
- while (Chip_RGU_InReset(RGU_TIMER2_RST)) {}
- /* Get timer peripheral clock rate */
- timerFreq = Chip_Clock_GetRate(CLK_MX_TIMER2);
- /* Timer setup */
- Chip_TIMER_Reset(LPC_TIMER2);
- Chip_TIMER_PrescaleSet(LPC_TIMER2, timerFreq/TIMER_SCALER);
- Chip_TIMER_Enable(LPC_TIMER2);
- mTimeInit = 1;
- }
- }
- double current_time()
- {
- //RTC_TIME_T FullTime;
- uint32_t timerMs;
- init_time();
- timerMs = Chip_TIMER_ReadCount(LPC_TIMER2);
- //Chip_RTC_GetFullTime(LPC_RTC, &FullTime);
- //(double)FullTime.time[RTC_TIMETYPE_SECOND]
- return (double)timerMs/TIMER_SCALER;
- }
- /* Memory location of the generated random numbers (for total of 128 bits) */
- static volatile uint32_t* mRandData = (uint32_t*)0x40045050;
- static uint32_t mRandInit = 0;
- static uint32_t mRandIndex = 0;
- uint32_t rand_gen(void)
- {
- uint32_t rand = 0;
- uint32_t status = LPC_OK;
- if(mRandIndex == 0) {
- if(mRandInit == 0) {
- Chip_OTP_Init();
- mRandInit = 1;
- }
- status = Chip_OTP_GenRand();
- }
- if(status == LPC_OK) {
- rand = mRandData[mRandIndex];
- }
- else {
- printf("GenRand Failed 0x%x\n", status);
- }
- if(++mRandIndex > 4) {
- mRandIndex = 0;
- }
- return rand;
- }
|