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 fmc.c
AnnaBridge 174:b96e65c34a4d 3 * @version V1.00
AnnaBridge 174:b96e65c34a4d 4 * $Revision: 8 $
AnnaBridge 174:b96e65c34a4d 5 * $Date: 15/06/12 3:17p $
AnnaBridge 174:b96e65c34a4d 6 * @brief NANO100 series FMC driver source file
AnnaBridge 174:b96e65c34a4d 7 *
AnnaBridge 174:b96e65c34a4d 8 * @note
AnnaBridge 174:b96e65c34a4d 9 * Copyright (C) 2015 Nuvoton Technology Corp. All rights reserved.
AnnaBridge 174:b96e65c34a4d 10 *****************************************************************************/
AnnaBridge 174:b96e65c34a4d 11
AnnaBridge 174:b96e65c34a4d 12 //* Includes ------------------------------------------------------------------*/
AnnaBridge 174:b96e65c34a4d 13 #include <stdio.h>
AnnaBridge 174:b96e65c34a4d 14
AnnaBridge 174:b96e65c34a4d 15 #include "Nano100Series.h"
AnnaBridge 174:b96e65c34a4d 16
AnnaBridge 174:b96e65c34a4d 17
AnnaBridge 174:b96e65c34a4d 18 /** @addtogroup NANO100_Device_Driver NANO100 Device Driver
AnnaBridge 174:b96e65c34a4d 19 @{
AnnaBridge 174:b96e65c34a4d 20 */
AnnaBridge 174:b96e65c34a4d 21
AnnaBridge 174:b96e65c34a4d 22 /** @addtogroup NANO100_FMC_Driver FMC Driver
AnnaBridge 174:b96e65c34a4d 23 @{
AnnaBridge 174:b96e65c34a4d 24 */
AnnaBridge 174:b96e65c34a4d 25
AnnaBridge 174:b96e65c34a4d 26
AnnaBridge 174:b96e65c34a4d 27 /** @addtogroup NANO100_FMC_EXPORTED_FUNCTIONS FMC Exported Functions
AnnaBridge 174:b96e65c34a4d 28 @{
AnnaBridge 174:b96e65c34a4d 29 */
AnnaBridge 174:b96e65c34a4d 30
AnnaBridge 174:b96e65c34a4d 31
AnnaBridge 174:b96e65c34a4d 32 /**
AnnaBridge 174:b96e65c34a4d 33 * @brief Disable FMC ISP function.
AnnaBridge 174:b96e65c34a4d 34 * @return None
AnnaBridge 174:b96e65c34a4d 35 */
AnnaBridge 174:b96e65c34a4d 36 void FMC_Close(void)
AnnaBridge 174:b96e65c34a4d 37 {
AnnaBridge 174:b96e65c34a4d 38 FMC->ISPCON &= ~FMC_ISPCON_ISPEN_Msk;
AnnaBridge 174:b96e65c34a4d 39 }
AnnaBridge 174:b96e65c34a4d 40
AnnaBridge 174:b96e65c34a4d 41
AnnaBridge 174:b96e65c34a4d 42 /**
AnnaBridge 174:b96e65c34a4d 43 * @brief Execute ISP command to erase a flash page. The page size is 512 bytes.
AnnaBridge 174:b96e65c34a4d 44 * @param[in] u32PageAddr Address of the flash page to be erased.
AnnaBridge 174:b96e65c34a4d 45 * It must be a 512-byte aligned address.
AnnaBridge 174:b96e65c34a4d 46 * @return ISP page erase success or not.
AnnaBridge 174:b96e65c34a4d 47 * @retval 0 Success
AnnaBridge 174:b96e65c34a4d 48 * @retval -1 Erase failed
AnnaBridge 174:b96e65c34a4d 49 */
AnnaBridge 174:b96e65c34a4d 50 int32_t FMC_Erase(uint32_t u32PageAddr)
AnnaBridge 174:b96e65c34a4d 51 {
AnnaBridge 174:b96e65c34a4d 52 FMC->ISPCMD = FMC_ISPCMD_PAGE_ERASE;
AnnaBridge 174:b96e65c34a4d 53 FMC->ISPADR = u32PageAddr;
AnnaBridge 174:b96e65c34a4d 54 FMC->ISPTRG = FMC_ISPTRG_ISPGO_Msk;
AnnaBridge 174:b96e65c34a4d 55
AnnaBridge 174:b96e65c34a4d 56 while (FMC->ISPTRG & FMC_ISPTRG_ISPGO_Msk) ;
AnnaBridge 174:b96e65c34a4d 57
AnnaBridge 174:b96e65c34a4d 58 if (FMC->ISPCON & FMC_ISPCON_ISPFF_Msk) {
AnnaBridge 174:b96e65c34a4d 59 FMC->ISPCON |= FMC_ISPCON_ISPFF_Msk;
AnnaBridge 174:b96e65c34a4d 60 return -1;
AnnaBridge 174:b96e65c34a4d 61 }
AnnaBridge 174:b96e65c34a4d 62 return 0;
AnnaBridge 174:b96e65c34a4d 63 }
AnnaBridge 174:b96e65c34a4d 64
AnnaBridge 174:b96e65c34a4d 65
AnnaBridge 174:b96e65c34a4d 66 /**
AnnaBridge 174:b96e65c34a4d 67 * @brief Get the current boot source.
AnnaBridge 174:b96e65c34a4d 68 * @return The current boot source.
AnnaBridge 174:b96e65c34a4d 69 * @retval 0 Is boot from APROM.
AnnaBridge 174:b96e65c34a4d 70 * @retval 1 Is boot from LDROM.
AnnaBridge 174:b96e65c34a4d 71 */
AnnaBridge 174:b96e65c34a4d 72 int32_t FMC_GetBootSource (void)
AnnaBridge 174:b96e65c34a4d 73 {
AnnaBridge 174:b96e65c34a4d 74 if (FMC->ISPCON & FMC_ISPCON_BS_Msk)
AnnaBridge 174:b96e65c34a4d 75 return 1;
AnnaBridge 174:b96e65c34a4d 76 else
AnnaBridge 174:b96e65c34a4d 77 return 0;
AnnaBridge 174:b96e65c34a4d 78 }
AnnaBridge 174:b96e65c34a4d 79
AnnaBridge 174:b96e65c34a4d 80
AnnaBridge 174:b96e65c34a4d 81 /**
AnnaBridge 174:b96e65c34a4d 82 * @brief Enable FMC ISP function
AnnaBridge 174:b96e65c34a4d 83 * @return None
AnnaBridge 174:b96e65c34a4d 84 */
AnnaBridge 174:b96e65c34a4d 85 void FMC_Open(void)
AnnaBridge 174:b96e65c34a4d 86 {
AnnaBridge 174:b96e65c34a4d 87 FMC->ISPCON |= FMC_ISPCON_ISPEN_Msk;
AnnaBridge 174:b96e65c34a4d 88 }
AnnaBridge 174:b96e65c34a4d 89
AnnaBridge 174:b96e65c34a4d 90
AnnaBridge 174:b96e65c34a4d 91 /**
AnnaBridge 174:b96e65c34a4d 92 * @brief Execute ISP command to read a word from flash.
AnnaBridge 174:b96e65c34a4d 93 * @param[in] u32Addr Address of the flash location to be read.
AnnaBridge 174:b96e65c34a4d 94 * It must be a word aligned address.
AnnaBridge 174:b96e65c34a4d 95 * @return The word data read from specified flash address.
AnnaBridge 174:b96e65c34a4d 96 */
AnnaBridge 174:b96e65c34a4d 97 uint32_t FMC_Read(uint32_t u32Addr)
AnnaBridge 174:b96e65c34a4d 98 {
AnnaBridge 174:b96e65c34a4d 99 FMC->ISPCMD = FMC_ISPCMD_READ;
AnnaBridge 174:b96e65c34a4d 100 FMC->ISPADR = u32Addr;
AnnaBridge 174:b96e65c34a4d 101 FMC->ISPTRG = FMC_ISPTRG_ISPGO_Msk;
AnnaBridge 174:b96e65c34a4d 102
AnnaBridge 174:b96e65c34a4d 103 while (FMC->ISPTRG & FMC_ISPTRG_ISPGO_Msk) ;
AnnaBridge 174:b96e65c34a4d 104
AnnaBridge 174:b96e65c34a4d 105 return FMC->ISPDAT;
AnnaBridge 174:b96e65c34a4d 106 }
AnnaBridge 174:b96e65c34a4d 107
AnnaBridge 174:b96e65c34a4d 108
AnnaBridge 174:b96e65c34a4d 109 /**
AnnaBridge 174:b96e65c34a4d 110 * @brief Read company ID.
AnnaBridge 174:b96e65c34a4d 111 * @return The company ID.
AnnaBridge 174:b96e65c34a4d 112 */
AnnaBridge 174:b96e65c34a4d 113 uint32_t FMC_ReadCID(void)
AnnaBridge 174:b96e65c34a4d 114 {
AnnaBridge 174:b96e65c34a4d 115 FMC->ISPCMD = FMC_ISPCMD_READ_CID;
AnnaBridge 174:b96e65c34a4d 116 FMC->ISPADR = 0x0;
AnnaBridge 174:b96e65c34a4d 117 FMC->ISPTRG = FMC_ISPTRG_ISPGO_Msk;
AnnaBridge 174:b96e65c34a4d 118 while (FMC->ISPTRG & FMC_ISPTRG_ISPGO_Msk) ;
AnnaBridge 174:b96e65c34a4d 119 return FMC->ISPDAT;
AnnaBridge 174:b96e65c34a4d 120 }
AnnaBridge 174:b96e65c34a4d 121
AnnaBridge 174:b96e65c34a4d 122
AnnaBridge 174:b96e65c34a4d 123 /**
AnnaBridge 174:b96e65c34a4d 124 * @brief Read product ID.
AnnaBridge 174:b96e65c34a4d 125 * @return The product ID.
AnnaBridge 174:b96e65c34a4d 126 */
AnnaBridge 174:b96e65c34a4d 127 uint32_t FMC_ReadPID(void)
AnnaBridge 174:b96e65c34a4d 128 {
AnnaBridge 174:b96e65c34a4d 129 FMC->ISPCMD = FMC_ISPCMD_READ_PID;
AnnaBridge 174:b96e65c34a4d 130 FMC->ISPADR = 0x04;
AnnaBridge 174:b96e65c34a4d 131 FMC->ISPTRG = FMC_ISPTRG_ISPGO_Msk;
AnnaBridge 174:b96e65c34a4d 132 while (FMC->ISPTRG & FMC_ISPTRG_ISPGO_Msk) ;
AnnaBridge 174:b96e65c34a4d 133 return FMC->ISPDAT;
AnnaBridge 174:b96e65c34a4d 134 }
AnnaBridge 174:b96e65c34a4d 135
AnnaBridge 174:b96e65c34a4d 136
AnnaBridge 174:b96e65c34a4d 137 /**
AnnaBridge 174:b96e65c34a4d 138 * @brief This function reads one of the four UCID.
AnnaBridge 174:b96e65c34a4d 139 * @param[in] u32Index Index of the UCID to read. u32Index must be 0, 1, 2, or 3.
AnnaBridge 174:b96e65c34a4d 140 * @return The UCID.
AnnaBridge 174:b96e65c34a4d 141 */
AnnaBridge 174:b96e65c34a4d 142 uint32_t FMC_ReadUCID(uint32_t u32Index)
AnnaBridge 174:b96e65c34a4d 143 {
AnnaBridge 174:b96e65c34a4d 144 FMC->ISPCMD = FMC_ISPCMD_READ_UID;
AnnaBridge 174:b96e65c34a4d 145 FMC->ISPADR = (0x04 * u32Index) + 0x10;
AnnaBridge 174:b96e65c34a4d 146 FMC->ISPTRG = FMC_ISPTRG_ISPGO_Msk;
AnnaBridge 174:b96e65c34a4d 147
AnnaBridge 174:b96e65c34a4d 148 while (FMC->ISPTRG & FMC_ISPTRG_ISPGO_Msk) ;
AnnaBridge 174:b96e65c34a4d 149
AnnaBridge 174:b96e65c34a4d 150 return FMC->ISPDAT;
AnnaBridge 174:b96e65c34a4d 151 }
AnnaBridge 174:b96e65c34a4d 152
AnnaBridge 174:b96e65c34a4d 153
AnnaBridge 174:b96e65c34a4d 154 /**
AnnaBridge 174:b96e65c34a4d 155 * @brief This function reads one of the three UID.
AnnaBridge 174:b96e65c34a4d 156 * @param[in] u32Index Index of the UID to read. u32Index must be 0, 1, or 2.
AnnaBridge 174:b96e65c34a4d 157 * @return The UID.
AnnaBridge 174:b96e65c34a4d 158 */
AnnaBridge 174:b96e65c34a4d 159 uint32_t FMC_ReadUID(uint32_t u32Index)
AnnaBridge 174:b96e65c34a4d 160 {
AnnaBridge 174:b96e65c34a4d 161 FMC->ISPCMD = FMC_ISPCMD_READ_UID;
AnnaBridge 174:b96e65c34a4d 162 FMC->ISPADR = 0x04 * u32Index;
AnnaBridge 174:b96e65c34a4d 163 FMC->ISPTRG = FMC_ISPTRG_ISPGO_Msk;
AnnaBridge 174:b96e65c34a4d 164
AnnaBridge 174:b96e65c34a4d 165 while (FMC->ISPTRG & FMC_ISPTRG_ISPGO_Msk) ;
AnnaBridge 174:b96e65c34a4d 166
AnnaBridge 174:b96e65c34a4d 167 return FMC->ISPDAT;
AnnaBridge 174:b96e65c34a4d 168 }
AnnaBridge 174:b96e65c34a4d 169
AnnaBridge 174:b96e65c34a4d 170
AnnaBridge 174:b96e65c34a4d 171 /**
AnnaBridge 174:b96e65c34a4d 172 * @brief Get the base address of Data Flash if enabled.
AnnaBridge 174:b96e65c34a4d 173 * @return Base address of Data Flash
AnnaBridge 174:b96e65c34a4d 174 */
AnnaBridge 174:b96e65c34a4d 175 uint32_t FMC_ReadDataFlashBaseAddr(void)
AnnaBridge 174:b96e65c34a4d 176 {
AnnaBridge 174:b96e65c34a4d 177 return FMC->DFBADR;
AnnaBridge 174:b96e65c34a4d 178 }
AnnaBridge 174:b96e65c34a4d 179
AnnaBridge 174:b96e65c34a4d 180
AnnaBridge 174:b96e65c34a4d 181 /**
AnnaBridge 174:b96e65c34a4d 182 * @brief This function will force re-map assigned flash page to CPU address 0x0.
AnnaBridge 174:b96e65c34a4d 183 * @param[in] u32PageAddr Address of the page to be mapped to CPU address 0x0.
AnnaBridge 174:b96e65c34a4d 184 * @return None
AnnaBridge 174:b96e65c34a4d 185 */
AnnaBridge 174:b96e65c34a4d 186 void FMC_SetVectorPageAddr(uint32_t u32PageAddr)
AnnaBridge 174:b96e65c34a4d 187 {
AnnaBridge 174:b96e65c34a4d 188 FMC->ISPCMD = FMC_ISPCMD_VECMAP;
AnnaBridge 174:b96e65c34a4d 189 FMC->ISPADR = u32PageAddr;
AnnaBridge 174:b96e65c34a4d 190 FMC->ISPTRG = FMC_ISPTRG_ISPGO_Msk;
AnnaBridge 174:b96e65c34a4d 191 while (FMC->ISPTRG & FMC_ISPTRG_ISPGO_Msk) ;
AnnaBridge 174:b96e65c34a4d 192 }
AnnaBridge 174:b96e65c34a4d 193
AnnaBridge 174:b96e65c34a4d 194
AnnaBridge 174:b96e65c34a4d 195 /**
AnnaBridge 174:b96e65c34a4d 196 * @brief Obtain the current vector page address setting.
AnnaBridge 174:b96e65c34a4d 197 * @return The vector page address.
AnnaBridge 174:b96e65c34a4d 198 */
AnnaBridge 174:b96e65c34a4d 199 uint32_t FMC_GetVectorPageAddr(void)
AnnaBridge 174:b96e65c34a4d 200 {
AnnaBridge 174:b96e65c34a4d 201 return (FMC->ISPSTA & 0x0FFFFF00ul);
AnnaBridge 174:b96e65c34a4d 202 }
AnnaBridge 174:b96e65c34a4d 203
AnnaBridge 174:b96e65c34a4d 204
AnnaBridge 174:b96e65c34a4d 205 /**
AnnaBridge 174:b96e65c34a4d 206 * @brief Execute ISP command to program a word to flash.
AnnaBridge 174:b96e65c34a4d 207 * @param[in] u32Addr Address of the flash location to be programmed.
AnnaBridge 174:b96e65c34a4d 208 * It must be a word aligned address.
AnnaBridge 174:b96e65c34a4d 209 * @param[in] u32Data The word data to be programmed.
AnnaBridge 174:b96e65c34a4d 210 * @return None
AnnaBridge 174:b96e65c34a4d 211 */
AnnaBridge 174:b96e65c34a4d 212 void FMC_Write(uint32_t u32Addr, uint32_t u32Data)
AnnaBridge 174:b96e65c34a4d 213 {
AnnaBridge 174:b96e65c34a4d 214 FMC->ISPCMD = FMC_ISPCMD_PROGRAM;
AnnaBridge 174:b96e65c34a4d 215 FMC->ISPADR = u32Addr;
AnnaBridge 174:b96e65c34a4d 216 FMC->ISPDAT = u32Data;
AnnaBridge 174:b96e65c34a4d 217 FMC->ISPTRG = FMC_ISPTRG_ISPGO_Msk;
AnnaBridge 174:b96e65c34a4d 218 while (FMC->ISPTRG & FMC_ISPTRG_ISPGO_Msk) ;
AnnaBridge 174:b96e65c34a4d 219 }
AnnaBridge 174:b96e65c34a4d 220
AnnaBridge 174:b96e65c34a4d 221
AnnaBridge 174:b96e65c34a4d 222 /**
AnnaBridge 174:b96e65c34a4d 223 * @brief Execute ISP command to read User Configuration.
AnnaBridge 174:b96e65c34a4d 224 * @param[out] u32Config A two-word array.
AnnaBridge 174:b96e65c34a4d 225 * u32Config[0] holds CONFIG0, while u32Config[1] holds CONFIG1.
AnnaBridge 174:b96e65c34a4d 226 * @param[in] u32Count Avaliable word count in u32Config.
AnnaBridge 174:b96e65c34a4d 227 * @return Success or not.
AnnaBridge 174:b96e65c34a4d 228 * @retval 0 Success.
AnnaBridge 174:b96e65c34a4d 229 * @retval -1 Invalid parameter.
AnnaBridge 174:b96e65c34a4d 230 */
AnnaBridge 174:b96e65c34a4d 231 int32_t FMC_ReadConfig(uint32_t *u32Config, uint32_t u32Count)
AnnaBridge 174:b96e65c34a4d 232 {
AnnaBridge 174:b96e65c34a4d 233 u32Config[0] = FMC_Read(FMC_CONFIG_BASE);
AnnaBridge 174:b96e65c34a4d 234 if (u32Count < 2)
AnnaBridge 174:b96e65c34a4d 235 return -1;
AnnaBridge 174:b96e65c34a4d 236 u32Config[1] = FMC_Read(FMC_CONFIG_BASE+4);
AnnaBridge 174:b96e65c34a4d 237 return 0;
AnnaBridge 174:b96e65c34a4d 238 }
AnnaBridge 174:b96e65c34a4d 239
AnnaBridge 174:b96e65c34a4d 240
AnnaBridge 174:b96e65c34a4d 241 /**
AnnaBridge 174:b96e65c34a4d 242 * @brief Execute ISP command to write User Configuration.
AnnaBridge 174:b96e65c34a4d 243 * @param[in] u32Config A two-word array.
AnnaBridge 174:b96e65c34a4d 244 * u32Config[0] holds CONFIG0, while u32Config[1] holds CONFIG1.
AnnaBridge 174:b96e65c34a4d 245 * @param[in] u32Count Avaliable word count in u32Config.
AnnaBridge 174:b96e65c34a4d 246 * @return Success or not.
AnnaBridge 174:b96e65c34a4d 247 * @retval 0 Success.
AnnaBridge 174:b96e65c34a4d 248 * @retval -1 Invalid parameter.
AnnaBridge 174:b96e65c34a4d 249 */
AnnaBridge 174:b96e65c34a4d 250 int32_t FMC_WriteConfig(uint32_t *u32Config, uint32_t u32Count)
AnnaBridge 174:b96e65c34a4d 251 {
AnnaBridge 174:b96e65c34a4d 252 FMC_ENABLE_CFG_UPDATE();
AnnaBridge 174:b96e65c34a4d 253 FMC_Erase(FMC_CONFIG_BASE);
AnnaBridge 174:b96e65c34a4d 254 FMC_Write(FMC_CONFIG_BASE, u32Config[0]);
AnnaBridge 174:b96e65c34a4d 255 FMC_Write(FMC_CONFIG_BASE+4, u32Config[1]);
AnnaBridge 174:b96e65c34a4d 256 FMC_DISABLE_CFG_UPDATE();
AnnaBridge 174:b96e65c34a4d 257 return 0;
AnnaBridge 174:b96e65c34a4d 258 }
AnnaBridge 174:b96e65c34a4d 259
AnnaBridge 174:b96e65c34a4d 260
AnnaBridge 174:b96e65c34a4d 261 /*@}*/ /* end of group NANO100_FMC_EXPORTED_FUNCTIONS */
AnnaBridge 174:b96e65c34a4d 262
AnnaBridge 174:b96e65c34a4d 263 /*@}*/ /* end of group NANO100_FMC_Driver */
AnnaBridge 174:b96e65c34a4d 264
AnnaBridge 174:b96e65c34a4d 265 /*@}*/ /* end of group NANO100_Device_Driver */
AnnaBridge 174:b96e65c34a4d 266
AnnaBridge 174:b96e65c34a4d 267 /*** (C) COPYRIGHT 2014 Nuvoton Technology Corp. ***/
AnnaBridge 174:b96e65c34a4d 268
AnnaBridge 174:b96e65c34a4d 269