39 FMC->ISPCTL &= ~FMC_ISPCTL_ISPEN_Msk;
58 FMC->ISPADDR = u32PageAddr;
118 FMC->ISPADDR = u32Addr;
143int32_t
FMC_Read_64(uint32_t u32Addr, uint32_t *u32Data0, uint32_t *u32Data1)
148 FMC->ISPADDR = u32Addr;
160 *u32Data0 =
FMC->MPDAT0;
161 *u32Data1 =
FMC->MPDAT1;
187 if (
FMC->ISPDAT != 0xDA)
238 FMC->ISPADDR = (0x04 * u32Index) + 0x10;
265 FMC->ISPADDR = 0x04 * u32Index;
302 FMC->ISPADDR = u32PageAddr;
321 return (
FMC->ISPSTS & 0x0FFFFF00ul);
342 FMC->ISPADDR = u32Addr;
343 FMC->ISPDAT = u32Data;
374int32_t
FMC_Write_64(uint32_t u32Addr, uint32_t u32Data0, uint32_t u32Data1)
379 FMC->ISPADDR = u32Addr;
380 FMC->MPDAT0 = u32Data0;
381 FMC->MPDAT1 = u32Data1;
407uint32_t
FMC_CRC8(uint32_t au32Data[],
int i32Count)
410 uint8_t i, u8Cnt, u8InData;
411 uint8_t au8CRC[4] = { 0xff, 0xff, 0xff, 0xff };
413 for (i32ByteIdx = 0; i32ByteIdx < 4; i32ByteIdx++)
415 for (u8Cnt = 0; u8Cnt < i32Count; u8Cnt++)
417 for (i = 0x80; i != 0; i /= 2)
419 if ((au8CRC[i32ByteIdx] & 0x80)!=0)
421 au8CRC[i32ByteIdx] *= 2;
422 au8CRC[i32ByteIdx] ^= 7;
425 au8CRC[i32ByteIdx] *= 2;
427 u8InData = (au32Data[u8Cnt] >> (i32ByteIdx * 8)) & 0xff;
429 if ((u8InData & i) != 0)
430 au8CRC[i32ByteIdx]^=0x7;
434 return (au8CRC[0] | au8CRC[1] << 8 | au8CRC[2] << 16 | au8CRC[3] << 24);
450 for (i = 0; i < u32Count; i++)
475 uint32_t i, u32CRC, u32Data;
485 for (i = 0; i < 4; i++)
491 for (i = 0; i < 4; i++)
495 if (u32Data != ((i < 3) ? u32Config[i] : u32CRC))
NUC472/NUC442 peripheral access layer header file. This file contains all the peripheral register's d...
#define FMC_ISPSTS_CFGCRCF_Msk
#define FMC_ISPCTL_ISPFF_Msk
#define FMC_ISPSTS_ISPFF_Msk
#define FMC_ISPCTL_BS_Msk
#define FMC_ISPCTL_ISPEN_Msk
#define FMC_ISPTRG_ISPGO_Msk
#define FMC_ISPCMD_READ_64
#define FMC_TIMEOUT_ERASE
#define FMC_ISPCMD_READ_CID
#define FMC_ISPCMD_READ_PID
#define FMC_ISPCMD_VECMAP
#define FMC_TIMEOUT_WRITE
#define FMC_ISPCMD_WRITE_64
#define FMC_ISPCMD_READ_UID
#define FMC_ISPCMD_PAGE_ERASE
void FMC_Close(void)
Disable FMC ISP function.
int32_t FMC_Write_64(uint32_t u32Addr, uint32_t u32Data0, uint32_t u32Data1)
Execute ISP 64-bits write command to program two words to flash.
int32_t FMC_ReadConfig(uint32_t *u32Config, uint32_t u32Count)
Read the User Configuration words.
uint32_t FMC_ReadCID(void)
Read company ID.
uint32_t FMC_GetVectorPageAddr(void)
Obtain the current vector page address setting.
uint32_t FMC_ReadUID(uint32_t u32Index)
This function reads one of the three UID.
int32_t FMC_Erase(uint32_t u32PageAddr)
Erase a page. The page size is 2048 bytes.
uint32_t FMC_ReadDataFlashBaseAddr(void)
Get the base address of Data Flash if enabled.
int32_t FMC_Write(uint32_t u32Addr, uint32_t u32Data)
Execute ISP command to program a word to flash.
uint32_t FMC_Read(uint32_t u32Addr)
Execute ISP command to read a word from flash.
uint32_t FMC_ReadPID(void)
Read product ID.
uint32_t FMC_CRC8(uint32_t au32Data[], int i32Count)
CRC8 Calculator.
int32_t FMC_GetBootSource(void)
Get the current boot source.
int32_t FMC_WriteConfig(uint32_t *u32Config, uint32_t u32Count)
Write User Configuration.
int32_t FMC_Read_64(uint32_t u32Addr, uint32_t *u32Data0, uint32_t *u32Data1)
Execute ISP 64-bits read command to read two words from flash.
int32_t FMC_SetVectorPageAddr(uint32_t u32PageAddr)
This function will force re-map assigned flash page to CPU address 0x0.
void FMC_Open(void)
Enable FMC ISP function.
uint32_t FMC_ReadUCID(uint32_t u32Index)
This function reads one of the four UCID.