/****************************************************************************** * Shanghai ChipON Micro-Electronic Co.,Ltd * ****************************************************************************** * $File Name$ : KF32A156_flash.h * * $Author$ : ChipON AE/FAE Group * * $Data$ : 2021-07-08 * * $AutoSAR Version : V2.0 * * $Description$ : This file contains the headers of the FLASH * ****************************************************************************** * Copyright (C) by Shanghai ChipON Micro-Electronic Co.,Ltd * * All rights reserved. * * * * This software is copyright protected and proprietary to * * Shanghai ChipON Micro-Electronic Co.,Ltd. * ****************************************************************************** * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ * * REVISON HISTORY * * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ * * Data Version Author Description * * ~~~~~~~~~~ ~~~~~~~~ ~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ * * * * * * * *****************************************************************************/ #ifndef KF32A156_FLASH_H_ #define KF32A156_FLASH_H_ #include "KF32A156.h" /* 锁定解锁状态 */ typedef enum { LOCK = 0, UNLOCK = !LOCK } LockStatus; #define CHECK_LOCK_STATUS(STATE) (((STATE) == LOCK) || ((STATE) == UNLOCK)) /** * 描述 FLASH CheckSum结果数据结构体 */ typedef union CheckSumStruct { uint32_t m_ResultWord[4]; /* CheckSum的128位结果,字访问。 */ uint32_t m_ResultShort[8]; /* CheckSum的128位结果,半字访问。 */ uint32_t m_ResultByte[16]; /* CheckSum的128位结果,字节访问。 */ }FLASH_CheckSumResult; /** * 描述 FLASH编程信息结构体 */ typedef struct { uint32_t m_Mode; /* 编程模式, 取值宏“FLASH 编程模式”中的一个。 */ uint32_t m_Zone; /* 编程区域, 取值宏“FLASH 编程区域”中的一个。 */ uint32_t m_Addr; /* 编程地址, 取值为0x0~0xFFFFF,硬件忽略低2位。 */ uint32_t m_WriteSize; /* 编程长度,单位:双字(64位) 取值为1~63。 */ uint32_t * m_Data; /* 编程数据指针, 指向待写数据。 */ }FLASH_ProgramTypeDef; /** * FLASH 编程模式 */ #define FLASH_PROGRAM_WORD ((uint32_t)0x15) #define FLASH_PROGRAM_HALF_PAGE ((uint32_t)0x05) #define CHECK_FLASH_PROGRAM_MODE(MODE) (((MODE) == FLASH_PROGRAM_WORD) \ || ((MODE) == FLASH_PROGRAM_HALF_PAGE)) /** * FLASH 编程区域 */ #define FLASH_PROGRAM_CODE ((uint32_t)0) #define FLASH_PROGRAM_CFG ((uint32_t)1) #define CHECK_FLASH_PROGRAM_ZONE(ZONE) (((ZONE) == FLASH_PROGRAM_CODE) \ || ((ZONE) == FLASH_PROGRAM_CFG)) /** * FLASH信息区选择 */ #define FLASH_NVM_CODE_ZONE ((uint32_t)0<> 6) == 0) /** * FLASH访问周期 */ #define CHECK_FLASH_PERIOD(NUM) (((uint32_t)(NUM) >> 4) == 0) /** * FLASH编程和行擦期间的地址 */ #define CHECK_FLASH_ADDR_20BITS(ADDR) (((uint32_t)(ADDR) >> 20) == 0) #define CHECK_FLASH_ADDR_13BITS(ADDR) (((uint32_t)(ADDR) >> 13) == 0) /** * FLASH命令选择 */ #define FLASH_PROGRAM_CMD_WORD ((uint32_t)0x15<