tao_z
2022-06-01 73bf3cdb517b55f662ed5fa513cdaaf55c1fd0c8
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
/**
  ******************************************************************************
  * @file     xl_fmc.h
  * @author   software group
  * @brief    This file contains all the functions prototypes for the fmc 
  *           firmware library.
  ******************************************************************************
  * @attention
    *
  * 2019 by Chipways Communications,Inc. All Rights Reserved.
  * This software is supplied under the terms of a license
  * agreement or non-disclosure agreement with Chipways.
  * Passing on and copying of this document,and communication
  * of its contents is not permitted without prior written
  * authorization.
  *
  * <h2><center>&copy; COPYRIGHT 2019 Chipways</center></h2>
  ******************************************************************************
  */
#ifndef __XL_FLASH_H__
#define __XL_FLASH_H__
 
#ifdef __cplusplus
extern "C" {
#endif
/* Includes ---------------------------------------------------------------*/
#include <XL6600.h>
/* Register define ------------------------------------------------------------*/
/* FSTAT Bit Fields */
#define FMC_FSTAT_SEC_MASK                       0x00800000u
#define FMC_FSTAT_SEC_SHIFT                      23
 
#define FMC_FSTAT_MGSTAT_MASK                    0x03000000u
#define FMC_FSTAT_MGSTAT_SHIFT                   24
 
#define FMC_FSTAT_MGBUSY_MASK                    0x08000000u
#define FMC_FSTAT_MGBUSY_SHIFT                   27
 
#define FMC_FSTAT_FPVIOL_MASK                    0x10000000u
#define FMC_FSTAT_FPVIOL_SHIFT                   28
 
#define FMC_FSTAT_ACCERR_MASK                    0x20000000u
#define FMC_FSTAT_ACCERR_SHIFT                   29
 
#define FMC_FSTAT_CCIF_MASK                      0x80000000u
#define FMC_FSTAT_CCIF_SHIFT                     31
 
/* FCCOBF0 Bit Fields */
#define FMC_FCCOBF0_FADDR_MASK                   0x00FFFFFFu
#define FMC_FCCOBF0_FADDR_SHIFT                  0u
 
#define FMC_FCCOBF0_FCMD_MASK                        0xFF000000u
#define FMC_FCCOBF0_FCMD_SHIFT                       24u
 
/* FCCOBF1 Bit Fields */
#define FMC_FCCOBF1_DATA0_MASK                        0xFFFFFFFFu
#define FMC_FCCOBF1_DATA0_SHIFT                       0
 
/* FCCOBF2 Bit Fields */ 
#define FMC_FCCOBF2_DATA1_MASK                        0xFFFFFFFFu
#define FMC_FCCOBF2_DATA1_SHIFT                       0
 
/* FCNFG Bit Fields */
#define FMC_FCNFG_ECC_DISABLE_AREA_MASK          0x0000000Fu
#define FMC_FCNFG_ECC_DISABLE_AREA_SHIFT         0
 
#define FMC_FCNFG_CCIE_MASK                             0x80000000u
#define FMC_FCNFG_CCIE_SHIFT                            31
 
/* FRLD Bit Fields */
#define FMC_FRLD_FRLD_MASK                               0x699655AAu
#define FMC_FRLD_FRLD_SHIFT                              0
 
/* FCPC0 Bit Fields */
#define FMC_FCPC0_CLK1M_MASK                             0x0001FC00u
#define FMC_FCPC0_CLK1M_SHIFT                            10u
 
#define FMC_FCPC0_RWC_MASK                                 0x001E0000u
#define FMC_FCPC0_RWC_SHIFT                                17u
 
#define FMC_FCPC0_CEN_MASK                                 0x00200000u
#define FMC_FCPC0_CEN_SHIFT                                21
 
#define FMC_FCPC0_DPSTB_MASK                             0x00400000u
#define FMC_FCPC0_DPSTB_SHIFT                            22
 
#define FMC_FCPC0_CLK1MLCK_MASK                          0x40000000u
#define FMC_FCPC0_CLK1MLCK_SHIFT                   30
 
#define FMC_FCPC0_HSMD_MASK                              0x80000000u
#define FMC_FCPC0_HSMD_SHIFT                       31
 
/* FOSP Bit Fields */
#define FMC_FOSP_FPLS_MASK                       0x00000300u
#define FMC_FOSP_FPLS_SHIFT                      8u
 
#define FMC_FOSP_FPLDIS_MASK                     0x00000400u
#define FMC_FOSP_FPLDIS_SHIFT                    10u
 
#define FMC_FOSP_FPHS_MASK                       0x00001800u
#define FMC_FOSP_FPHS_SHIFT                      11u
 
#define FMC_FOSP_FPHDIS_MASK                     0x00002000u
#define FMC_FOSP_FPHDIS_SHIFT                    13u
 
#define FMC_FOSP_RNV6_MASK                       0x00004000u
#define FMC_FOSP_RNV6_SHIFT                      14
 
#define FMC_FOSP_FPOPEN_MASK                     0x00008000u
#define FMC_FOSP_FPOPEN_SHIFT                    15u
 
#define FMC_FOSP_FSEC_MASK                                 0x00030000u
#define FMC_FOSP_FSEC_SHIFT                                16
 
#define FMC_FOSP_FOPT_MASK                                 0xFF000000u
#define FMC_FOSP_FOPT_SHIFT                                24
 
/* KEYHIGH Bit Fields */
#define FMC_FOSP_BACKDOOR_EN_MASK                                 0x80000000u
#define FMC_FOSP_BACKDOOR_EN_SHIFT                                31
 
/** FMC - Register Layout Typedef */
 
typedef struct
{
    __IO    uint32_t FSTAT;                          /*!< Flash״̬¼Ä´æÆ÷, offset: 0x0 */
    __IO    uint32_t FCCOBF0;                        /*!< FlashÃüÁî¼Ä´æÆ÷0, offset: 0x4 */
    __IO    uint32_t FCCOBF1;                        /*!< FlashÃüÁî¼Ä´æÆ÷1, offset: 0x8 */
    __IO    uint32_t FCCOBF2;                        /*!< FlashÃüÁî¼Ä´æÆ÷2, offset: 0xC */
    __IO    uint32_t FCNFG;                          /*!< FlashÅäÖüĴæÆ÷, offset: 0x10 */
    __IO    uint32_t FRLD;                           /*!< FlashÅäÖÃ×Ö¶ÎÖØÐ¼ÓÔØ¼Ä´æÆ÷, offset: 0x14 */
    __IO    uint32_t RESERVED1[2];
    __IO    uint32_t FCPC0;                          /*!< Flash¿ØÖÆÆ÷²ÎÊý¼Ä´æÆ÷, offset: 0x20 */
    __IO    uint32_t RESERVED2[5];//3    
    __IO    uint32_t FOSP;                           /*!< Flash°²È«Ñ¡Ôñ¼Ä´æÆ÷, offset: 0x30 */
    __IO    uint32_t RESERVED3;//3                        
    __IO    uint32_t KEYLOW;                                                  /*!< FlashºóÃÅÃØÔ¿µÍ¼Ä´æÆ÷, offset: 0x40 */
    __IO    uint32_t RESERVED4;
    __IO    uint32_t KEYHIGH;                                                 /*!< FlashºóÃÅÃØÔ¿¸ß¼Ä´æÆ÷, offset: 0x48 */
}FMC_Type;
 
extern FMC_Type* FMC;
 
/** @addtogroup XL6600_StdPeriph_Driver
  * @{
  */
 
/** @addtogroup FLASH 
  * @{
  */
 
/* Exported types ------------------------------------------------------------*/ 
 
/** 
    * @brief FLASH±£»¤ÅäÖýṹÌ嶨Òå
    */
typedef struct
{    
    FunctionalState  FLASH_POPEN;         /*!< FLASH²Ù×÷±£»¤Ê¹ÄÜ */  
    uint8_t  FLASH_FPHDIS;                /*!< Flash±£»¤½Ï¸ßµØÖ··¶Î§½ûÓà*/
    uint8_t  FLASH_FPLDIS;                /*!< Flash±£»¤½ÏµÍµØÖ··¶Î§½ûÓà*/
    uint8_t FLASH_FPHS;                   /*!<  Flash±£»¤½Ï¸ßµØÖ·´óС */
    uint8_t FLASH_FPLS;                   /*!<  Flash±£»¤½ÏµÍµØÖ·´óС */
    
} FLASH_ProtectTypeDef, *FLASH_ProtectConfigPtr;
 
/* Exported constants --------------------------------------------------------*/
/** @defgroup FLAHS_Exported_Constants FLASHÄ£¿éʹÓòÎÊý¶¨Òå
  * @{
  */
 
/**
  *    @defgroup Flash_Exported_Types Flash³õʼ»¯×´Ì¬
  * @{
  */
 
#define FLASH_InitStatus_Failed                       ((uint8_t)0x00)   /*!< FLASH³õʼ»¯Ê§°Ü */
#define FLASH_InitStatus_Success                      ((uint8_t)0x01)   /*!< FLASH³õʼ»¯³É¹¦ */                                                                            
/**
* @}
*/
 
/** 
    * @defgroup Flash_Protect_Commad_List Flash±£»¤ÃüÁî
  * @{
  */
#define FLASH_PROTECT_MASK                             0x0000FF00u                      
 
#define FLASH_FPHS_1KB                              ((uint8_t)0x00)           /*!< FLASH±£»¤¸ßµØÖ··¶Î§0x7C00-0x7FFF */
#define FLASH_FPHS_2KB                              ((uint8_t)0x01)           /*!< FLASH±£»¤¸ßµØÖ··¶Î§0x7800-0x7FFF */
#define FLASH_FPHS_4KB                              ((uint8_t)0x02)           /*!< FLASH±£»¤¸ßµØÖ··¶Î§0x7000-0x7FFF */
#define FLASH_FPHS_8KB                              ((uint8_t)0x03)           /*!< FLASH±£»¤¸ßµØÖ··¶Î§0x6000-0x7FFF */
 
                                                                                     
#define FLASH_FPLS_2KB                                          ((uint8_t)0x00)                  /*!< FLASH±£»¤µÍµØÖ··¶Î§0x0000-x07FF */    
#define FLASH_FPLS_4KB                                          ((uint8_t)0x00)                  /*!< FLASH±£»¤µÍµØÖ··¶Î§0x0000-x0FFF */    
#define FLASH_FPLS_8KB                                          ((uint8_t)0x00)                  /*!< FLASH±£»¤µÍµØÖ··¶Î§0x0000-x1FFF */
#define FLASH_FPLS_16KB                                          ((uint8_t)0x00)                  /*!< FLASH±£»¤µÍµØÖ··¶Î§0x0000-x3FFF */    
/**
  * @}
  */
    
/** 
  * @defgroup Flash_ECC/Erase_Error  Flash ECC´íÎ󣬲Á³ýУÑé´íÎó
  * @{
  */
#define FLASH_FSTAT_MGSTAT0_MASK                       0x01000000u                    /*!< FLASHÉÁ´æÃüÁî´íÎó±êÖ¾0 */
#define FLASH_FSTAT_MGSTAT1_MASK                       0x03000000u           /*!< FLASHÉÁ´æÃüÁî´íÎó±êÖ¾1 */
/**
  * @}
  */
 
/** 
  * @defgroup Flash_Start_Address/Sector_Size FlashÆðʼµØÖ·ºÍÉÈÇøµÄ´óС
  * @{
  */    
#define FLASH_SECTOR_SIZE                                     1024                              /*!< FLASHÉÈÇø´óС */
#define FLASH_START_ADDRESS                                   0                                    /*!< FLASHÆðʼµØÖ· */
/**
  * @}
  */
 
/** 
  * @defgroup Flash_Error_Type Flash´íÎó״̬¶¨Òå
  * @{
  */
#define FLASH_ERR_BASE                                          0x3000                                 
#define FLASH_ERR_SUCCESS                                     0u                                          /*!< ÎÞ´íÎó */
#define FLASH_ERR_INVALID_PARAM                             (FLASH_ERR_BASE+1)          /*!<  ÎÞЧ²ÎÊý´íÎó */
#define FLASH_ERR_ACCESS                                     (FLASH_ERR_BASE+8)                /*!< flash·ÃÎÊ´íÎó±êÖ¾ */
#define FLASH_ERR_PROTECTION                               (FLASH_ERR_BASE+0x10)          /*!< flash±£»¤Î¥·´±êÖ¾ */
#define FLASH_ERR_ECC                                         (FLASH_ERR_BASE+0x11)            /*!< flash eccУÑé´íÎó */
#define FLASH_ERR_ERASEVERIFY                                 (FLASH_ERR_BASE+0x12)            /*!< flash²Á³ýÑéÖ¤´íÎó */
#define FLASH_ERR_INIT_CCIF                                   (FLASH_ERR_BASE+0x14)            /*!< ¼ÓÔØÃüÁîδÍê³É */
#define FLASH_ERR_INIT_CLKIM                                 (FLASH_ERR_BASE+0x18)            /*!< CLK1M´íÎó */
/**
  * @}
  */
    
/** 
  * @defgroup Flash_Commad_List FlashÃüÁîÁбí
  * @{
  */
#define FLASH_CMD_ERASE_CHIP                                  0x01            /*!< ²Á³ýÕû¿éFLASH */    
#define FLASH_CMD_ERASE_SECTOR                              0x02            /*!< ²Á³ýÉÈÇø */    
#define FLASH_CMD_PROGRAM                                            0x03            /*!< FLASH±à³ÌÃüÁî */
#define FLASH_CMD_POWER_ON_RESET                          0x04            /*!< FLASHÉϵ縴λ */
#define FLASH_CMD_READ                                            0x05            /*!< FLASH¶ÁÃüÁî */
#define FLASH_CMD_ERASE_VERIFY_SECTOR                    0x06            /*!< ÉÈÇø²Á³ýУÑé */
#define FLASH_CMD_ERASE_VERIFY_CHIP                        0x07            /*!< Ð¾Æ¬²Á³ýУÑé */
/**
  * @}
  */
    
/** 
  * @defgroup Flash_Disable_ECC_Area Flash½ûÓÃECCÇøÓò
  * @{
  */
#define FLASH_ECC_DISABLE_AREA_0KB                              0x00            /*!< ECC½ûÓÃ0KBµØÖ·¿Õ¼ä */    
#define FLASH_ECC_DISABLE_AREA_1KB                              0x01            /*!< ECC½ûÓÃ1KBµØÖ·¿Õ¼ä */
#define FLASH_ECC_DISABLE_AREA_2KB                              0x02            /*!< ECC½ûÓÃ2KBµØÖ·¿Õ¼ä */
#define FLASH_ECC_DISABLE_AREA_4KB                              0x03            /*!< ECC½ûÓÃ4KBµØÖ·¿Õ¼ä */
#define FLASH_ECC_DISABLE_AREA_8KB                              0x04            /*!< ECC½ûÓÃ8KBµØÖ·¿Õ¼ä */
#define FLASH_ECC_DISABLE_AREA_16KB                              0x05            /*!< ECC½ûÓÃ16KBµØÖ·¿Õ¼ä */
#define FLASH_ECC_DISABLE_AREA_32KB                              0x06            /*!< ECC½ûÓÃ32KBµØÖ·¿Õ¼ä */
#define FLASH_ECC_DISABLE_AREA_64KB                              0x07            /*!< ECC½ûÓÃ64KBµØÖ·¿Õ¼ä */
/**
  * @}
  */
    
/**
  * @brief Flash_Wead_Wait_Cycle Flash¶ÁµÈ´ýʱ¼äÖÜÆÚ
  * @{
  */    
typedef enum 
{     
    FLASH_READWAIT_NO              =0,            /*!< Î޵ȴý */
  FLASH_READWAIT_1CYCLE          ,              /*!< ¶ÁµÈ´ý1¸öÖÜÆÚ */
  FLASH_READWAIT_2CYCLE          ,              /*!< ¶ÁµÈ´ý2¸öÖÜÆÚ */    
  FLASH_READWAIT_3CYCLE          ,              /*!< ¶ÁµÈ´ý3¸öÖÜÆÚ */
    FLASH_READWAIT_4CYCLE          ,              /*!< ¶ÁµÈ´ý4¸öÖÜÆÚ */
    FLASH_READWAIT_5CYCLE          ,              /*!< ¶ÁµÈ´ý5¸öÖÜÆÚ */    
  FLASH_READWAIT_6CYCLE          ,              /*!< ¶ÁµÈ´ý6¸öÖÜÆÚ */
    FLASH_READWAIT_7CYCLE          ,              /*!< ¶ÁµÈ´ý7¸öÖÜÆÚ */
    FLASH_READWAIT_8CYCLE          ,              /*!< ¶ÁµÈ´ý8¸öÖÜÆÚ */    
  FLASH_READWAIT_9CYCLE          ,              /*!< ¶ÁµÈ´ý9¸öÖÜÆÚ */
    FLASH_READWAIT_10CYCLE         ,              /*!< ¶ÁµÈ´ý10¸öÖÜÆÚ */
}FLASH_ReadWaitCycleDef;    
/**
  * @}
  */
 
 
 
/**
  * @}
  */
#if defined(__GNUC__)
#undef _Init_Flash_Ram
#define _Init_Flash_Ram __attribute__((__section__(".flash_ram")))
#else
#undef _Init_Flash_Ram
#define _Init_Flash_Ram
#endif
 
/* Exported macro ------------------------------------------------------------*/
/* Exported functions --------------------------------------------------------*/ 
uint16_t FLASH_Init(uint8_t BusClockMhz) _Init_Flash_Ram;
void FLASH_ProtecConfig(const FLASH_ProtectTypeDef *FLASH_ProtectType) _Init_Flash_Ram;
void FLASH_CCIEnableCmd( FunctionalState NewState) _Init_Flash_Ram;
void FLASH_CacheCmd( FunctionalState NewState) _Init_Flash_Ram;
void FLASH_SleepInStopCmd( FunctionalState NewState) _Init_Flash_Ram;
void FLASH_LockClk1MCmd( FunctionalState NewState) _Init_Flash_Ram;
void FLASH_BuffEnableCmd( FunctionalState NewState) _Init_Flash_Ram;
void FLASH_SetReadWait(FLASH_ReadWaitCycleDef ReadWaitCycle) _Init_Flash_Ram;
uint8_t FLASH_GetCmdFinshFlag(void) _Init_Flash_Ram;
uint8_t FLASH_GetControllerBusyFlag(void) _Init_Flash_Ram;
void FLASH_LaunchCMD(void) _Init_Flash_Ram;
void FLASH_ClearErrFlag(uint32_t flag) _Init_Flash_Ram;
uint16_t FLASH_CheckErrStatus(void) _Init_Flash_Ram;
uint16_t FLASH_Program2LongWord( uint32_t TargetAddress, uint32_t DwData0, uint32_t DwData1) _Init_Flash_Ram;
uint64_t FLASH_ReadLongWord(const uint32_t *TargetAddress) _Init_Flash_Ram;
void FLASH_ReadLongWordCmd(uint32_t TargetAddress) _Init_Flash_Ram;
void FLASH_EraseChip(void) _Init_Flash_Ram;
uint16_t FLASH_EraseSector( uint32_t TargetAddress) _Init_Flash_Ram;
void FLASH_PowerOnReset(void) _Init_Flash_Ram;
uint16_t FLASH_EraseVerifySector( uint32_t TargetAddress) _Init_Flash_Ram;
void FLASH_EraseVerifyChip(void) _Init_Flash_Ram;
void FLASH_ConfigReload(void) _Init_Flash_Ram;
uint8_t FLASH_GetFlashSecurity(void) _Init_Flash_Ram;
uint8_t FLASH_GetFlashProtection(void) _Init_Flash_Ram;
uint8_t FLASH_GetFlashOption(void) _Init_Flash_Ram;
void FLASH_DisableECCArea(uint8_t ecc_area) _Init_Flash_Ram;
void FLASH_BackdoorUnlockFlash(uint32_t KeyHigh, uint32_t Keylow) _Init_Flash_Ram;
#ifdef __cplusplus
}
#endif
 
#endif    /*__XL_FLASH_H__ */
/**
  * @}
  */
 
/**
  * @}
  */