Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Fork of mbed-dev by
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. ***/ |