mbed library sources. Supersedes mbed-src.

Dependents:   Nucleo_Hello_Encoder BLE_iBeaconScan AM1805_DEMO DISCO-F429ZI_ExportTemplate1 ... more

Committer:
AnnaBridge
Date:
Mon Oct 02 15:33:19 2017 +0100
Revision:
174:b96e65c34a4d
This updates the lib to the mbed lib v 152

Who changed what in which revision?

UserRevisionLine numberNew contents of line
AnnaBridge 174:b96e65c34a4d 1 /******************************************************************************
AnnaBridge 174:b96e65c34a4d 2 * @file system_Nano100Series.c
AnnaBridge 174:b96e65c34a4d 3 * @version V1.00
AnnaBridge 174:b96e65c34a4d 4 * $Revision: 4 $
AnnaBridge 174:b96e65c34a4d 5 * $Date: 14/01/29 4:09p $
AnnaBridge 174:b96e65c34a4d 6 * @brief Nano100 series system clock init code and assert handler
AnnaBridge 174:b96e65c34a4d 7 *
AnnaBridge 174:b96e65c34a4d 8 * @note
AnnaBridge 174:b96e65c34a4d 9 * Copyright (C) 2014 Nuvoton Technology Corp. All rights reserved.
AnnaBridge 174:b96e65c34a4d 10 *****************************************************************************/
AnnaBridge 174:b96e65c34a4d 11
AnnaBridge 174:b96e65c34a4d 12 #include <stdint.h>
AnnaBridge 174:b96e65c34a4d 13 #include "Nano100Series.h"
AnnaBridge 174:b96e65c34a4d 14
AnnaBridge 174:b96e65c34a4d 15
AnnaBridge 174:b96e65c34a4d 16 /*----------------------------------------------------------------------------
AnnaBridge 174:b96e65c34a4d 17 Clock Variable definitions
AnnaBridge 174:b96e65c34a4d 18 *----------------------------------------------------------------------------*/
AnnaBridge 174:b96e65c34a4d 19 uint32_t SystemCoreClock = __HSI; /*!< System Clock Frequency (Core Clock) */
AnnaBridge 174:b96e65c34a4d 20 uint32_t CyclesPerUs = (__HSI / 1000000); /*!< Cycles per micro second */
AnnaBridge 174:b96e65c34a4d 21
AnnaBridge 174:b96e65c34a4d 22 /**
AnnaBridge 174:b96e65c34a4d 23 * @brief Calculate current PLL clock frequency.
AnnaBridge 174:b96e65c34a4d 24 * @param None.
AnnaBridge 174:b96e65c34a4d 25 * @return PLL clock frequency. The clock UNIT is in Hz.
AnnaBridge 174:b96e65c34a4d 26 */
AnnaBridge 174:b96e65c34a4d 27 uint32_t SysGet_PLLClockFreq(void)
AnnaBridge 174:b96e65c34a4d 28 {
AnnaBridge 174:b96e65c34a4d 29 uint32_t u32Freq =0, u32PLLSrc;
AnnaBridge 174:b96e65c34a4d 30 uint32_t u32NO, u32NR, u32IN_DV, u32PllReg;
AnnaBridge 174:b96e65c34a4d 31
AnnaBridge 174:b96e65c34a4d 32 u32PllReg = CLK->PLLCTL;
AnnaBridge 174:b96e65c34a4d 33
AnnaBridge 174:b96e65c34a4d 34 if (u32PllReg & CLK_PLLCTL_PD)
AnnaBridge 174:b96e65c34a4d 35 return 0; /* PLL is in power down mode */
AnnaBridge 174:b96e65c34a4d 36
AnnaBridge 174:b96e65c34a4d 37 if (u32PllReg & CLK_PLLCTL_PLL_SRC_Msk)
AnnaBridge 174:b96e65c34a4d 38 u32PLLSrc = __HIRC12M;
AnnaBridge 174:b96e65c34a4d 39 else
AnnaBridge 174:b96e65c34a4d 40 u32PLLSrc = __HXT;
AnnaBridge 174:b96e65c34a4d 41
AnnaBridge 174:b96e65c34a4d 42 u32NO = (u32PllReg & CLK_PLLCTL_OUT_DV) ? 2: 1;
AnnaBridge 174:b96e65c34a4d 43
AnnaBridge 174:b96e65c34a4d 44 u32IN_DV = (u32PllReg & CLK_PLLCTL_IN_DV_Msk) >> 8;
AnnaBridge 174:b96e65c34a4d 45 if (u32IN_DV == 0)
AnnaBridge 174:b96e65c34a4d 46 u32NR = 2;
AnnaBridge 174:b96e65c34a4d 47 else if (u32IN_DV == 1)
AnnaBridge 174:b96e65c34a4d 48 u32NR = 4;
AnnaBridge 174:b96e65c34a4d 49 else if (u32IN_DV == 2)
AnnaBridge 174:b96e65c34a4d 50 u32NR = 8;
AnnaBridge 174:b96e65c34a4d 51 else
AnnaBridge 174:b96e65c34a4d 52 u32NR = 16;
AnnaBridge 174:b96e65c34a4d 53
AnnaBridge 174:b96e65c34a4d 54 u32Freq = u32PLLSrc * ((u32PllReg & CLK_PLLCTL_FB_DV_Msk) +32) / u32NR / u32NO;
AnnaBridge 174:b96e65c34a4d 55
AnnaBridge 174:b96e65c34a4d 56 return u32Freq;
AnnaBridge 174:b96e65c34a4d 57 }
AnnaBridge 174:b96e65c34a4d 58
AnnaBridge 174:b96e65c34a4d 59
AnnaBridge 174:b96e65c34a4d 60 /**
AnnaBridge 174:b96e65c34a4d 61 * @brief Get current HCLK clock frequency.
AnnaBridge 174:b96e65c34a4d 62 * @param None.
AnnaBridge 174:b96e65c34a4d 63 * @return HCLK clock frequency. The clock UNIT is in Hz.
AnnaBridge 174:b96e65c34a4d 64 */
AnnaBridge 174:b96e65c34a4d 65 uint32_t SysGet_HCLKFreq(void)
AnnaBridge 174:b96e65c34a4d 66 {
AnnaBridge 174:b96e65c34a4d 67
AnnaBridge 174:b96e65c34a4d 68 uint32_t u32Freqout, u32AHBDivider, u32ClkSel;
AnnaBridge 174:b96e65c34a4d 69
AnnaBridge 174:b96e65c34a4d 70 u32ClkSel = CLK->CLKSEL0 & CLK_CLKSEL0_HCLK_S_Msk;
AnnaBridge 174:b96e65c34a4d 71
AnnaBridge 174:b96e65c34a4d 72 if (u32ClkSel == CLK_CLKSEL0_HCLK_S_HXT) { /* external HXT crystal clock */
AnnaBridge 174:b96e65c34a4d 73 u32Freqout = __HXT;
AnnaBridge 174:b96e65c34a4d 74 } else if(u32ClkSel == CLK_CLKSEL0_HCLK_S_LXT) { /* external LXT crystal clock */
AnnaBridge 174:b96e65c34a4d 75 u32Freqout = __LXT;
AnnaBridge 174:b96e65c34a4d 76 } else if(u32ClkSel == CLK_CLKSEL0_HCLK_S_PLL) { /* PLL clock */
AnnaBridge 174:b96e65c34a4d 77 u32Freqout = SysGet_PLLClockFreq();
AnnaBridge 174:b96e65c34a4d 78 } else if(u32ClkSel == CLK_CLKSEL0_HCLK_S_LIRC) { /* internal LIRC oscillator clock */
AnnaBridge 174:b96e65c34a4d 79 u32Freqout = __LIRC;
AnnaBridge 174:b96e65c34a4d 80 } else { /* internal HIRC oscillator clock */
AnnaBridge 174:b96e65c34a4d 81 u32Freqout = __HIRC12M;
AnnaBridge 174:b96e65c34a4d 82 }
AnnaBridge 174:b96e65c34a4d 83 u32AHBDivider = (CLK->CLKDIV0 & CLK_CLKDIV0_HCLK_N_Msk) + 1 ;
AnnaBridge 174:b96e65c34a4d 84
AnnaBridge 174:b96e65c34a4d 85 return (u32Freqout/u32AHBDivider);
AnnaBridge 174:b96e65c34a4d 86 }
AnnaBridge 174:b96e65c34a4d 87
AnnaBridge 174:b96e65c34a4d 88
AnnaBridge 174:b96e65c34a4d 89 /**
AnnaBridge 174:b96e65c34a4d 90 * @brief This function is used to update the variable SystemCoreClock
AnnaBridge 174:b96e65c34a4d 91 * and must be called whenever the core clock is changed.
AnnaBridge 174:b96e65c34a4d 92 * @param None.
AnnaBridge 174:b96e65c34a4d 93 * @retval None.
AnnaBridge 174:b96e65c34a4d 94 */
AnnaBridge 174:b96e65c34a4d 95
AnnaBridge 174:b96e65c34a4d 96 void SystemCoreClockUpdate (void)
AnnaBridge 174:b96e65c34a4d 97 {
AnnaBridge 174:b96e65c34a4d 98
AnnaBridge 174:b96e65c34a4d 99 SystemCoreClock = SysGet_HCLKFreq();
AnnaBridge 174:b96e65c34a4d 100 CyclesPerUs = (SystemCoreClock + 500000) / 1000000;
AnnaBridge 174:b96e65c34a4d 101 }
AnnaBridge 174:b96e65c34a4d 102
AnnaBridge 174:b96e65c34a4d 103 #if USE_ASSERT
AnnaBridge 174:b96e65c34a4d 104
AnnaBridge 174:b96e65c34a4d 105 /**
AnnaBridge 174:b96e65c34a4d 106 * @brief Assert Error Message
AnnaBridge 174:b96e65c34a4d 107 *
AnnaBridge 174:b96e65c34a4d 108 * @param[in] file the source file name
AnnaBridge 174:b96e65c34a4d 109 * @param[in] line line number
AnnaBridge 174:b96e65c34a4d 110 *
AnnaBridge 174:b96e65c34a4d 111 * @return None
AnnaBridge 174:b96e65c34a4d 112 *
AnnaBridge 174:b96e65c34a4d 113 * @details The function prints the source file name and line number where
AnnaBridge 174:b96e65c34a4d 114 * the ASSERT_PARAM() error occurs, and then stops in an infinite loop.
AnnaBridge 174:b96e65c34a4d 115 */
AnnaBridge 174:b96e65c34a4d 116 void AssertError(uint8_t * file, uint32_t line)
AnnaBridge 174:b96e65c34a4d 117 {
AnnaBridge 174:b96e65c34a4d 118
AnnaBridge 174:b96e65c34a4d 119 printf("[%s] line %d : wrong parameters.\r\n", file, line);
AnnaBridge 174:b96e65c34a4d 120
AnnaBridge 174:b96e65c34a4d 121 /* Infinite loop */
AnnaBridge 174:b96e65c34a4d 122 while(1) ;
AnnaBridge 174:b96e65c34a4d 123 }
AnnaBridge 174:b96e65c34a4d 124 #endif
AnnaBridge 174:b96e65c34a4d 125
AnnaBridge 174:b96e65c34a4d 126 /*** (C) COPYRIGHT 2014 Nuvoton Technology Corp. ***/