added prescaler for 16 bit pwm in LPC1347 target

Fork of mbed-dev by mbed official

Committer:
<>
Date:
Fri Sep 02 15:07:44 2016 +0100
Revision:
144:ef7eb2e8f9f7
This updates the lib to the mbed lib v125

Who changed what in which revision?

UserRevisionLine numberNew contents of line
<> 144:ef7eb2e8f9f7 1 /*
<> 144:ef7eb2e8f9f7 2 * Hardware entropy collector for NUC472's RNGA
<> 144:ef7eb2e8f9f7 3 *
<> 144:ef7eb2e8f9f7 4 * Copyright (C) 2006-2015, ARM Limited, All Rights Reserved
<> 144:ef7eb2e8f9f7 5 * SPDX-License-Identifier: Apache-2.0
<> 144:ef7eb2e8f9f7 6 *
<> 144:ef7eb2e8f9f7 7 * Licensed under the Apache License, Version 2.0 (the "License"); you may
<> 144:ef7eb2e8f9f7 8 * not use this file except in compliance with the License.
<> 144:ef7eb2e8f9f7 9 * You may obtain a copy of the License at
<> 144:ef7eb2e8f9f7 10 *
<> 144:ef7eb2e8f9f7 11 * http://www.apache.org/licenses/LICENSE-2.0
<> 144:ef7eb2e8f9f7 12 *
<> 144:ef7eb2e8f9f7 13 * Unless required by applicable law or agreed to in writing, software
<> 144:ef7eb2e8f9f7 14 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
<> 144:ef7eb2e8f9f7 15 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
<> 144:ef7eb2e8f9f7 16 * See the License for the specific language governing permissions and
<> 144:ef7eb2e8f9f7 17 * limitations under the License.
<> 144:ef7eb2e8f9f7 18 *
<> 144:ef7eb2e8f9f7 19 */
<> 144:ef7eb2e8f9f7 20
<> 144:ef7eb2e8f9f7 21
<> 144:ef7eb2e8f9f7 22 #include <stdlib.h>
<> 144:ef7eb2e8f9f7 23 #include <string.h>
<> 144:ef7eb2e8f9f7 24 #include "cmsis.h"
<> 144:ef7eb2e8f9f7 25 #include "NUC472_442.h"
<> 144:ef7eb2e8f9f7 26 #include "us_ticker_api.h"
<> 144:ef7eb2e8f9f7 27
<> 144:ef7eb2e8f9f7 28 /*
<> 144:ef7eb2e8f9f7 29 * Get Random number generator.
<> 144:ef7eb2e8f9f7 30 */
<> 144:ef7eb2e8f9f7 31 static volatile int g_PRNG_done;
<> 144:ef7eb2e8f9f7 32
<> 144:ef7eb2e8f9f7 33 void CRYPTO_IRQHandler()
<> 144:ef7eb2e8f9f7 34 {
<> 144:ef7eb2e8f9f7 35 if (PRNG_GET_INT_FLAG()) {
<> 144:ef7eb2e8f9f7 36 g_PRNG_done = 1;
<> 144:ef7eb2e8f9f7 37 PRNG_CLR_INT_FLAG();
<> 144:ef7eb2e8f9f7 38 }
<> 144:ef7eb2e8f9f7 39 }
<> 144:ef7eb2e8f9f7 40
<> 144:ef7eb2e8f9f7 41 static void rng_get(unsigned char *pConversionData)
<> 144:ef7eb2e8f9f7 42 {
<> 144:ef7eb2e8f9f7 43 uint32_t *p32ConversionData;
<> 144:ef7eb2e8f9f7 44
<> 144:ef7eb2e8f9f7 45 p32ConversionData = (uint32_t *)pConversionData;
<> 144:ef7eb2e8f9f7 46
<> 144:ef7eb2e8f9f7 47 /* Unlock protected registers */
<> 144:ef7eb2e8f9f7 48 SYS_UnlockReg();
<> 144:ef7eb2e8f9f7 49 /* Enable IP clock */
<> 144:ef7eb2e8f9f7 50 CLK_EnableModuleClock(CRPT_MODULE);
<> 144:ef7eb2e8f9f7 51
<> 144:ef7eb2e8f9f7 52 /* Lock protected registers */
<> 144:ef7eb2e8f9f7 53 SYS_LockReg();
<> 144:ef7eb2e8f9f7 54
<> 144:ef7eb2e8f9f7 55 NVIC_EnableIRQ(CRPT_IRQn);
<> 144:ef7eb2e8f9f7 56 PRNG_ENABLE_INT();
<> 144:ef7eb2e8f9f7 57
<> 144:ef7eb2e8f9f7 58 // PRNG_Open(PRNG_KEY_SIZE_64, 0, 0);
<> 144:ef7eb2e8f9f7 59 PRNG_Open(PRNG_KEY_SIZE_256, 1, us_ticker_read());
<> 144:ef7eb2e8f9f7 60 PRNG_Start();
<> 144:ef7eb2e8f9f7 61 while (!g_PRNG_done);
<> 144:ef7eb2e8f9f7 62
<> 144:ef7eb2e8f9f7 63
<> 144:ef7eb2e8f9f7 64 PRNG_Read(p32ConversionData);
<> 144:ef7eb2e8f9f7 65
<> 144:ef7eb2e8f9f7 66 // printf(" 0x%08x 0x%08x 0x%08x 0x%08x\n\r", *p32ConversionData, *(p32ConversionData+1), *(p32ConversionData+2), *(p32ConversionData+3));
<> 144:ef7eb2e8f9f7 67 // printf(" 0x%08x 0x%08x 0x%08x 0x%08x\n\r", *(p32ConversionData+4), *(p32ConversionData+5), *(p32ConversionData+6), *(p32ConversionData+7));
<> 144:ef7eb2e8f9f7 68
<> 144:ef7eb2e8f9f7 69 PRNG_DISABLE_INT();
<> 144:ef7eb2e8f9f7 70 NVIC_DisableIRQ(CRPT_IRQn);
<> 144:ef7eb2e8f9f7 71 // CLK_DisableModuleClock(CRPT_MODULE);
<> 144:ef7eb2e8f9f7 72
<> 144:ef7eb2e8f9f7 73 }
<> 144:ef7eb2e8f9f7 74
<> 144:ef7eb2e8f9f7 75
<> 144:ef7eb2e8f9f7 76 /*
<> 144:ef7eb2e8f9f7 77 * Get len bytes of entropy from the hardware RNG.
<> 144:ef7eb2e8f9f7 78 */
<> 144:ef7eb2e8f9f7 79
<> 144:ef7eb2e8f9f7 80 int mbedtls_hardware_poll( void *data,
<> 144:ef7eb2e8f9f7 81 unsigned char *output, size_t len, size_t *olen )
<> 144:ef7eb2e8f9f7 82 {
<> 144:ef7eb2e8f9f7 83 #if 0
<> 144:ef7eb2e8f9f7 84 unsigned long timer = us_ticker_read();
<> 144:ef7eb2e8f9f7 85 ((void) data);
<> 144:ef7eb2e8f9f7 86 *olen = 0;
<> 144:ef7eb2e8f9f7 87
<> 144:ef7eb2e8f9f7 88 if( len < sizeof(unsigned long) )
<> 144:ef7eb2e8f9f7 89 return( 0 );
<> 144:ef7eb2e8f9f7 90
<> 144:ef7eb2e8f9f7 91 memcpy( output, &timer, sizeof(unsigned long) );
<> 144:ef7eb2e8f9f7 92 *olen = sizeof(unsigned long);
<> 144:ef7eb2e8f9f7 93 #else
<> 144:ef7eb2e8f9f7 94 *olen = 0;
<> 144:ef7eb2e8f9f7 95 if( len < 32 )
<> 144:ef7eb2e8f9f7 96 {
<> 144:ef7eb2e8f9f7 97 unsigned char tmpBuff[32];
<> 144:ef7eb2e8f9f7 98 rng_get(tmpBuff);
<> 144:ef7eb2e8f9f7 99 memcpy( output, &tmpBuff, len );
<> 144:ef7eb2e8f9f7 100 *olen = len;
<> 144:ef7eb2e8f9f7 101 return( 0 );
<> 144:ef7eb2e8f9f7 102 }
<> 144:ef7eb2e8f9f7 103 for( int i = 0; i < (len/32) ; i++)
<> 144:ef7eb2e8f9f7 104 {
<> 144:ef7eb2e8f9f7 105 rng_get(output);
<> 144:ef7eb2e8f9f7 106 *olen += 32;
<> 144:ef7eb2e8f9f7 107 // printf("Output result of len[%d][%d]: 0x%08x 0x%08x\n\r", len, *olen, *((int32_t *)output), *(((int32_t *)output)+1));
<> 144:ef7eb2e8f9f7 108 output += 32;
<> 144:ef7eb2e8f9f7 109 }
<> 144:ef7eb2e8f9f7 110 #endif
<> 144:ef7eb2e8f9f7 111
<> 144:ef7eb2e8f9f7 112 return( 0 );
<> 144:ef7eb2e8f9f7 113 }
<> 144:ef7eb2e8f9f7 114
<> 144:ef7eb2e8f9f7 115
<> 144:ef7eb2e8f9f7 116