M4521_BSP V3.02.000
The Board Support Package for M4521
fmc.h
Go to the documentation of this file.
1/**************************************************************************/
12#ifndef __FMC_H__
13#define __FMC_H__
14
15#include "M4521.h"
16
17#ifdef __cplusplus
18extern "C"
19{
20#endif
21
22
35/*---------------------------------------------------------------------------------------------------------*/
36/* Global constant definitions */
37/*---------------------------------------------------------------------------------------------------------*/
38#define ISBEN 0
39
40/*---------------------------------------------------------------------------------------------------------*/
41/* Define Base Address */
42/*---------------------------------------------------------------------------------------------------------*/
43#define FMC_APROM_BASE 0x00000000UL
44#define FMC_LDROM_BASE 0x00100000UL
45#define FMC_SPROM_BASE 0x00200000UL
46#define FMC_CONFIG_BASE 0x00300000UL
48#define FMC_CONFIG0_ADDR (FMC_CONFIG_BASE)
49#define FMC_CONFIG1_ADDR (FMC_CONFIG_BASE + 4)
52#define FMC_FLASH_PAGE_SIZE 0x800
53#define FMC_LDROM_SIZE 0x1000
55/*---------------------------------------------------------------------------------------------------------*/
56/* ISPCTL constant definitions */
57/*---------------------------------------------------------------------------------------------------------*/
58#define FMC_ISPCTL_BS_LDROM 0x2
59#define FMC_ISPCTL_BS_APROM 0x0
61/*---------------------------------------------------------------------------------------------------------*/
62/* ISPCMD constant definitions */
63/*---------------------------------------------------------------------------------------------------------*/
64#define FMC_ISPCMD_READ 0x00
65#define FMC_ISPCMD_PROGRAM 0x21
66#define FMC_ISPCMD_WRITE_8 0x61
67#define FMC_ISPCMD_PAGE_ERASE 0x22
68#define FMC_ISPCMD_READ_CID 0x0B
69#define FMC_ISPCMD_READ_UID 0x04
70#define FMC_ISPCMD_READ_DID 0x0C
71#define FMC_ISPCMD_VECMAP 0x2E
72#define FMC_ISPCMD_CHECKSUM 0x0D
73#define FMC_ISPCMD_CAL_CHECKSUM 0x2D
74#define FMC_ISPCMD_MULTI_PROG 0x27
76/*---------------------------------------------------------------------------------------------------------*/
77/* FTCTL constant definitions */
78/*---------------------------------------------------------------------------------------------------------*/
79#define FMC_FTCTL_OPTIMIZE_DISABLE 0x00
80#define FMC_FTCTL_OPTIMIZE_12MHZ 0x01
81#define FMC_FTCTL_OPTIMIZE_36MHZ 0x02
82#define FMC_FTCTL_OPTIMIZE_60MHZ 0x04
83#define FMC_FTCTL_OPTIMIZE_72MHZ 0x05
85#define FMC_TIMEOUT_READ ((SystemCoreClock/10)*2)
86#define FMC_TIMEOUT_WRITE ((SystemCoreClock/10)*2)
87#define FMC_TIMEOUT_ERASE ((SystemCoreClock/10)*4)
88#define FMC_TIMEOUT_CHKSUM (SystemCoreClock*2) /* end of group FMC_EXPORTED_CONSTANTS */
91
92/*---------------------------------------------------------------------------------------------------------*/
93/* Global variables */
94/*---------------------------------------------------------------------------------------------------------*/
95extern int32_t g_FMC_i32ErrCode;
96
101/*---------------------------------------------------------------------------------------------------------*/
102/* FMC Macro Definitions */
103/*---------------------------------------------------------------------------------------------------------*/
110#define FMC_ENABLE_ISP() (FMC->ISPCTL |= FMC_ISPCTL_ISPEN_Msk)
118#define FMC_DISABLE_ISP() (FMC->ISPCTL &= ~FMC_ISPCTL_ISPEN_Msk)
127#define FMC_ENABLE_LD_UPDATE() (FMC->ISPCTL |= FMC_ISPCTL_LDUEN_Msk)
135#define FMC_DISABLE_LD_UPDATE() (FMC->ISPCTL &= ~FMC_ISPCTL_LDUEN_Msk)
144#define FMC_ENABLE_CFG_UPDATE() (FMC->ISPCTL |= FMC_ISPCTL_CFGUEN_Msk)
152#define FMC_DISABLE_CFG_UPDATE() (FMC->ISPCTL &= ~FMC_ISPCTL_CFGUEN_Msk)
162#define FMC_ENABLE_AP_UPDATE() (FMC->ISPCTL |= FMC_ISPCTL_APUEN_Msk)
170#define FMC_DISABLE_AP_UPDATE() (FMC->ISPCTL &= ~FMC_ISPCTL_APUEN_Msk)
179#define FMC_SELECT_NEXT_BOOT(x) (FMC->ISPCTL = (FMC->ISPCTL & ~FMC_ISPCTL_BS_Msk) | ((x) << FMC_ISPCTL_BS_Pos))
187#define FMC_GET_BOOT_STATUS() ((FMC->ISPCTL & FMC_ISPCTL_BS_Msk)?1:0)
202static __INLINE int32_t FMC_SetVectorPageAddr(uint32_t u32PageAddr)
203{
204 uint32_t tout = FMC_TIMEOUT_WRITE;
205
207 FMC->ISPCMD = FMC_ISPCMD_VECMAP; /* Set ISP Command Code */
208 FMC->ISPADDR = u32PageAddr; /* The address of specified page which will be map to address 0x0. It must be page alignment. */
209 FMC->ISPTRG = 0x1; /* Trigger to start ISP procedure */
210#if ISBEN
211 __ISB();
212#endif /* To make sure ISP/CPU be Synchronized */
213 while (tout-- > 0)
214 {
215 if (!FMC->ISPTRG) /* Waiting for ISP Done */
216 return 0;
217 }
218 g_FMC_i32ErrCode = -1;
219 return -1;
220}
221
232static __INLINE uint32_t FMC_GetVECMAP(void)
233{
234 return (FMC->ISPSTS & FMC_ISPSTS_VECMAP_Msk);
235}
236
237void FMC_Open(void);
238void FMC_Close(void);
239void FMC_EnableAPUpdate(void);
240void FMC_DisableAPUpdate(void);
241void FMC_EnableConfigUpdate(void);
242void FMC_DisableConfigUpdate(void);
243void FMC_EnableLDUpdate(void);
244void FMC_DisableLDUpdate(void);
245uint32_t FMC_Read(uint32_t u32Addr);
246uint32_t FMC_ReadUID(uint8_t u8Index);
247uint32_t FMC_ReadCID(void);
248uint32_t FMC_ReadPID(void);
249uint32_t FMC_ReadUCID(uint32_t u32Index);
250int32_t FMC_Write(uint32_t u32Addr, uint32_t u32Data);
251int32_t FMC_Write8(uint32_t u32Addr, uint32_t u32Data0, uint32_t u32Data1);
252int32_t FMC_Write256(uint32_t u32Addr, uint32_t *pu32Buf);
253int32_t FMC_Erase(uint32_t u32Addr);
254int32_t FMC_ReadConfig(uint32_t *u32Config, uint32_t u32Count);
255int32_t FMC_WriteConfig(uint32_t *u32Config, uint32_t u32Count);
256void FMC_SetBootSource(int32_t i32BootSrc);
257int32_t FMC_GetBootSource(void);
258uint32_t FMC_ReadDataFlashBaseAddr(void);
259uint32_t FMC_GetCheckSum(uint32_t u32Addr, int32_t i32Size);
260void FMC_EnableFreqOptimizeMode(uint32_t u32Mode);
261void FMC_DisableFreqOptimizeMode(void); /* end of group FMC_EXPORTED_FUNCTIONS */
263 /* end of group FMC_Driver */
265 /* end of group Standard_Driver */
267
268#ifdef __cplusplus
269}
270#endif
271
272
273#endif
274
#define FMC_ISPSTS_VECMAP_Msk
Definition: M4521.h:2422
int32_t g_FMC_i32ErrCode
Definition: fmc.c:28
#define FMC_ISPCMD_VECMAP
Definition: fmc.h:71
#define FMC_TIMEOUT_WRITE
Definition: fmc.h:86
void FMC_DisableLDUpdate(void)
Disable LDROM update function.
Definition: fmc.c:93
void FMC_Close(void)
Disable ISP Functions.
Definition: fmc.c:54
int32_t FMC_Write256(uint32_t u32Addr, uint32_t *pu32Buf)
Program Multi-Word data into specified address of flash.
Definition: fmc.c:418
void FMC_EnableLDUpdate(void)
Enable LDROM update function.
Definition: fmc.c:129
int32_t FMC_ReadConfig(uint32_t *u32Config, uint32_t u32Count)
Read the User Configuration words.
Definition: fmc.c:554
uint32_t FMC_ReadCID(void)
Read company ID.
Definition: fmc.c:240
int32_t FMC_Erase(uint32_t u32Addr)
Flash page erase.
Definition: fmc.c:516
void FMC_DisableFreqOptimizeMode(void)
Disable Flash Access Frequency Optimization Mode.
Definition: fmc.c:664
static __INLINE int32_t FMC_SetVectorPageAddr(uint32_t u32PageAddr)
Set vector mapping address.
Definition: fmc.h:202
void FMC_EnableAPUpdate(void)
Enable APROM update function.
Definition: fmc.c:105
int32_t FMC_Write8(uint32_t u32Addr, uint32_t u32Data0, uint32_t u32Data1)
Program 64-bit data into specified address of flash.
Definition: fmc.c:377
static __INLINE uint32_t FMC_GetVECMAP(void)
Get current vector mapping address.
Definition: fmc.h:232
uint32_t FMC_ReadDataFlashBaseAddr(void)
Get the base address of Data Flash if enabled.
Definition: fmc.c:170
void FMC_EnableFreqOptimizeMode(uint32_t u32Mode)
Enable Flash Access Frequency Optimization Mode.
Definition: fmc.c:651
void FMC_SetBootSource(int32_t i32BootSrc)
Set boot source from LDROM or APROM after next software reset.
Definition: fmc.c:40
int32_t FMC_Write(uint32_t u32Addr, uint32_t u32Data)
Program 32-bit data into specified address of flash.
Definition: fmc.c:336
void FMC_DisableAPUpdate(void)
Disable APROM update function.
Definition: fmc.c:67
uint32_t FMC_Read(uint32_t u32Addr)
Read 32-bit Data from specified address of flash.
Definition: fmc.c:184
uint32_t FMC_ReadPID(void)
Read product ID.
Definition: fmc.c:273
int32_t FMC_GetBootSource(void)
Get the current boot source.
Definition: fmc.c:143
int32_t FMC_WriteConfig(uint32_t *u32Config, uint32_t u32Count)
Write User Configuration.
Definition: fmc.c:577
void FMC_DisableConfigUpdate(void)
Disable User Configuration update function.
Definition: fmc.c:80
void FMC_Open(void)
Enable FMC ISP function.
Definition: fmc.c:159
uint32_t FMC_GetCheckSum(uint32_t u32Addr, int32_t i32Size)
Get Flash Checksum.
Definition: fmc.c:602
void FMC_EnableConfigUpdate(void)
Enable User Configuration update function.
Definition: fmc.c:117
uint32_t FMC_ReadUCID(uint32_t u32Index)
To read UCID.
Definition: fmc.c:302
uint32_t FMC_ReadUID(uint8_t u8Index)
Read Unique ID.
Definition: fmc.c:210
#define FMC
Definition: M4521.h:13832