1 /** 2 ****************************************************************************** 3 * @file lib_flash.h 4 * @author Application Team 5 * @version V1.1.0 6 * @date 2019-10-28 7 * @brief FLASH library. 8 ****************************************************************************** 9 * @attention 10 * 11 ****************************************************************************** 12 */ 13 #ifndef __LIB_FLASH_H 14 #define __LIB_FLASH_H 15 16 #ifdef __cplusplus 17 extern "C" { 18 #endif 19 20 #include "target.h" 21 22 #define FLASH_BLOCK_0 (0x00000001UL) 23 #define FLASH_BLOCK_1 (0x00000002UL) 24 #define FLASH_BLOCK_2 (0x00000004UL) 25 #define FLASH_BLOCK_3 (0x00000008UL) 26 #define FLASH_BLOCK_4 (0x00000010UL) 27 #define FLASH_BLOCK_5 (0x00000020UL) 28 #define FLASH_BLOCK_6 (0x00000040UL) 29 #define FLASH_BLOCK_7 (0x00000080UL) 30 #define FLASH_BLOCK_8 (0x00000100UL) 31 #define FLASH_BLOCK_9 (0x00000200UL) 32 #define FLASH_BLOCK_10 (0x00000400UL) 33 #define FLASH_BLOCK_11 (0x00000800UL) 34 #define FLASH_BLOCK_12 (0x00001000UL) 35 #define FLASH_BLOCK_13 (0x00002000UL) 36 #define FLASH_BLOCK_14 (0x00004000UL) 37 #define FLASH_BLOCK_15 (0x00008000UL) 38 #define FLASH_BLOCK_16 (0x00010000UL) 39 #define FLASH_BLOCK_17 (0x00020000UL) 40 #define FLASH_BLOCK_18 (0x00040000UL) 41 #define FLASH_BLOCK_19 (0x00080000UL) 42 #define FLASH_BLOCK_20 (0x00100000UL) 43 #define FLASH_BLOCK_21 (0x00200000UL) 44 #define FLASH_BLOCK_22 (0x00400000UL) 45 #define FLASH_BLOCK_23 (0x00800000UL) 46 #define FLASH_BLOCK_24 (0x01000000UL) 47 #define FLASH_BLOCK_25 (0x02000000UL) 48 #define FLASH_BLOCK_26 (0x04000000UL) 49 #define FLASH_BLOCK_27 (0x08000000UL) 50 #define FLASH_BLOCK_28 (0x10000000UL) 51 #define FLASH_BLOCK_29 (0x20000000UL) 52 #define FLASH_BLOCK_30 (0x40000000UL) 53 #define FLASH_BLOCK_31 (0x80000000UL) 54 #define FLASH_BLOCK_Msk (0xFFFFFFFFUL) 55 #define FLASH_BLOCK_ALL FLASH_BLOCK_Msk 56 #define IS_FLASH_RWBLOCK(__BLOCK__) ((((__BLOCK__) & FLASH_BLOCK_Msk) != 0UL) &&\ 57 (((__BLOCK__) & ~FLASH_BLOCK_Msk) == 0UL)) 58 59 #define IS_FLASH_BLOCK(__BLOCK__) (((__BLOCK__) == FLASH_BLOCK_0) ||\ 60 ((__BLOCK__) == FLASH_BLOCK_1) ||\ 61 ((__BLOCK__) == FLASH_BLOCK_2) ||\ 62 ((__BLOCK__) == FLASH_BLOCK_3) ||\ 63 ((__BLOCK__) == FLASH_BLOCK_4) ||\ 64 ((__BLOCK__) == FLASH_BLOCK_5) ||\ 65 ((__BLOCK__) == FLASH_BLOCK_6) ||\ 66 ((__BLOCK__) == FLASH_BLOCK_7) ||\ 67 ((__BLOCK__) == FLASH_BLOCK_8) ||\ 68 ((__BLOCK__) == FLASH_BLOCK_9) ||\ 69 ((__BLOCK__) == FLASH_BLOCK_10) ||\ 70 ((__BLOCK__) == FLASH_BLOCK_11) ||\ 71 ((__BLOCK__) == FLASH_BLOCK_12) ||\ 72 ((__BLOCK__) == FLASH_BLOCK_13) ||\ 73 ((__BLOCK__) == FLASH_BLOCK_14) ||\ 74 ((__BLOCK__) == FLASH_BLOCK_15) ||\ 75 ((__BLOCK__) == FLASH_BLOCK_16) ||\ 76 ((__BLOCK__) == FLASH_BLOCK_17) ||\ 77 ((__BLOCK__) == FLASH_BLOCK_18) ||\ 78 ((__BLOCK__) == FLASH_BLOCK_19) ||\ 79 ((__BLOCK__) == FLASH_BLOCK_20) ||\ 80 ((__BLOCK__) == FLASH_BLOCK_21) ||\ 81 ((__BLOCK__) == FLASH_BLOCK_22) ||\ 82 ((__BLOCK__) == FLASH_BLOCK_23) ||\ 83 ((__BLOCK__) == FLASH_BLOCK_24) ||\ 84 ((__BLOCK__) == FLASH_BLOCK_25) ||\ 85 ((__BLOCK__) == FLASH_BLOCK_26) ||\ 86 ((__BLOCK__) == FLASH_BLOCK_27) ||\ 87 ((__BLOCK__) == FLASH_BLOCK_28) ||\ 88 ((__BLOCK__) == FLASH_BLOCK_29) ||\ 89 ((__BLOCK__) == FLASH_BLOCK_30) ||\ 90 ((__BLOCK__) == FLASH_BLOCK_31)) 91 92 #define FLASH_READ (0) 93 #define FLASH_WRITE (1) 94 #define IS_FLASH_OPERATION(__OPERATION__) (((__OPERATION__) == FLASH_READ) ||\ 95 ((__OPERATION__) == FLASH_WRITE)) 96 97 /************** Bits definition for FLASH_CTRL register ******************/ 98 #define FLASH_CTRL_CSMODE_DISABLE (0x0U << FLASH_CTRL_CSMODE_Pos) /*!< 0x00000000 */ 99 #define FLASH_CTRL_CSMODE_ALWAYSON (0x1U << FLASH_CTRL_CSMODE_Pos) /*!< 0x00000001 */ 100 #define FLASH_CTRL_CSMODE_TIM2OV (0x2U << FLASH_CTRL_CSMODE_Pos) /*!< 0x00000002 */ 101 #define FLASH_CTRL_CSMODE_RTC (0x3U << FLASH_CTRL_CSMODE_Pos) /*!< 0x00000003 */ 102 103 //CSMode 104 #define FLASH_CSMODE_DISABLE FLASH_CTRL_CSMODE_DISABLE 105 #define FLASH_CSMODE_ALWAYSON FLASH_CTRL_CSMODE_ALWAYSON 106 #define FLASH_CSMODE_TMR2OF FLASH_CTRL_CSMODE_TIM2OV 107 #define FLASH_CSMODE_RTC FLASH_CTRL_CSMODE_RTC 108 #define IS_FLASH_CSMODE(__CSMODE__) (((__CSMODE__) == FLASH_CSMODE_DISABLE) ||\ 109 ((__CSMODE__) == FLASH_CSMODE_ALWAYSON) ||\ 110 ((__CSMODE__) == FLASH_CSMODE_TMR2OF) ||\ 111 ((__CSMODE__) == FLASH_CSMODE_RTC)) 112 113 //INT 114 #define FLASH_INT_CS FLASH_CTRL_CSINTEN 115 #define IS_FLASH_INT(__INT__) ((__INT__) == FLASH_INT_CS) 116 117 //WriteStatus 118 #define FLASH_WSTA_BUSY 0 119 #define FLASH_WRITE_FINISH 1 120 #define FLASH_WSTA_FINISH FLASH_WRITE_FINISH 121 122 #define IS_FLASH_ADDRESS(__ADDRESS__) ((__ADDRESS__) < 0x80000UL) 123 124 #define IS_FLASH_ADRRW(__ADDRW__) (((__ADDRW__) < 0x80000UL) &&\ 125 (((__ADDRW__) & 0x3U) == 0U)) 126 127 #define IS_FLASH_ADRRHW(__ADDRHW__) (((__ADDRHW__) < 0x80000UL) &&\ 128 (((__ADDRHW__) & 0x1U) == 0U)) 129 130 #define IS_FLASH_CHECKSUMADDR(__ADDRESS1__,__ADDRESS2__) (((__ADDRESS1__) < 0x80000) && ((__ADDRESS2__) < 0x80000) && ((__ADDRESS1__) < (__ADDRESS2__))) 131 132 /* Exported Functions ------------------------------------------------------- */ 133 134 void FLASH_Init(uint32_t CSMode); 135 void FLASH_INTConfig(uint32_t IntMask, uint32_t NewState); 136 void FLASH_CycleInit(void); 137 void FLASH_SectorErase(uint32_t SectorAddr); 138 void FLASH_ChipErase(void); 139 void FLASH_ProgramWord(uint32_t Addr, uint32_t *WordBuffer, uint32_t Length); 140 void FLASH_ProgramHWord(uint32_t Addr, uint16_t *HWordBuffer, uint32_t Length); 141 void FLASH_ProgramByte(uint32_t Addr, uint8_t *ByteBuffer, uint32_t Length); 142 void FLASH_SetReadProtection(uint32_t Block); 143 void FLASH_WriteProtection(uint32_t Block, uint32_t NewState); 144 void FLASH_ICEProtection(uint32_t NewState); 145 uint8_t FLASH_GetProtectionStatus(uint32_t Block, uint32_t Operation); 146 uint32_t FLASH_GetAllProtectionStatus(uint32_t Operation); 147 void FLASH_SetCheckSumRange(uint32_t AddrStart, uint32_t AddrEnd); 148 void FLASH_SetCheckSumCompValue(uint32_t Checksum); 149 uint32_t FLASH_GetCheckSum(void); 150 uint8_t FLASH_GetINTStatus(uint32_t IntMask); 151 void FLASH_ClearINTStatus(uint32_t IntMask); 152 153 #ifdef __cplusplus 154 } 155 #endif 156 157 #endif /* __LIB_FLASH_H */ 158 159 /*********************************** END OF FILE ******************************/ 160