mbed library sources. Supersedes mbed-src.
Dependents: Nucleo_Hello_Encoder BLE_iBeaconScan AM1805_DEMO DISCO-F429ZI_ExportTemplate1 ... more
targets/TARGET_NUVOTON/TARGET_NANO100/device/system_Nano100Series.c@174:b96e65c34a4d, 2017-10-02 (annotated)
- 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?
User | Revision | Line number | New 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. ***/ |