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