1 /*************************************************************************************
2 * Copyright (C) 2016, Huada Semiconductor Co.,Ltd All rights reserved.
3 *
4 * This software is owned and published by:
5 * Huada Semiconductor Co.,Ltd ("HDSC").
6 *
7 * BY DOWNLOADING, INSTALLING OR USING THIS SOFTWARE, YOU AGREE TO BE BOUND
8 * BY ALL THE TERMS AND CONDITIONS OF THIS AGREEMENT.
9 *
10 * This software contains source code for use with HDSC
11 * components. This software is licensed by HDSC to be adapted only
12 * for use in systems utilizing HDSC components. HDSC shall not be
13 * responsible for misuse or illegal use of this software for devices not
14 * supported herein. HDSC is providing this software "AS IS" and will
15 * not be responsible for issues arising from incorrect user implementation
16 * of the software.
17 *
18 * Disclaimer:
19 * HDSC MAKES NO WARRANTY, EXPRESS OR IMPLIED, ARISING BY LAW OR OTHERWISE,
20 * REGARDING THE SOFTWARE (INCLUDING ANY ACOOMPANYING WRITTEN MATERIALS),
21 * ITS PERFORMANCE OR SUITABILITY FOR YOUR INTENDED USE, INCLUDING,
22 * WITHOUT LIMITATION, THE IMPLIED WARRANTY OF MERCHANTABILITY, THE IMPLIED
23 * WARRANTY OF FITNESS FOR A PARTICULAR PURPOSE OR USE, AND THE IMPLIED
24 * WARRANTY OF NONINFRINGEMENT.
25 * HDSC SHALL HAVE NO LIABILITY (WHETHER IN CONTRACT, WARRANTY, TORT,
26 * NEGLIGENCE OR OTHERWISE) FOR ANY DAMAGES WHATSOEVER (INCLUDING, WITHOUT
27 * LIMITATION, DAMAGES FOR LOSS OF BUSINESS PROFITS, BUSINESS INTERRUPTION,
28 * LOSS OF BUSINESS INFORMATION, OR OTHER PECUNIARY LOSS) ARISING FROM USE OR
29 * INABILITY TO USE THE SOFTWARE, INCLUDING, WITHOUT LIMITATION, ANY DIRECT,
30 * INDIRECT, INCIDENTAL, SPECIAL OR CONSEQUENTIAL DAMAGES OR LOSS OF DATA,
31 * SAVINGS OR PROFITS,
32 * EVEN IF Disclaimer HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
33 * YOU ASSUME ALL RESPONSIBILITIES FOR SELECTION OF THE SOFTWARE TO ACHIEVE YOUR
34 * INTENDED RESULTS, AND FOR THE INSTALLATION OF, USE OF, AND RESULTS OBTAINED
35 * FROM, THE SOFTWARE.
36 *
37 * This software may be replicated in part or whole for the licensed use,
38 * with the restriction that this Disclaimer and Copyright notice must be
39 * included with each copy of this software, whether used in part or whole,
40 * at all times.
41 */
42 /******************************************************************************/
43 /** \file flash.h
44  **
45  ** FLASH 数据结构及API声明.
46  **
47  ** - 2017-05-02 LuX V1.0
48  **
49  ******************************************************************************/
50 
51 #ifndef __FLASH_H__
52 #define __FLASH_H__
53 
54 /******************************************************************************/
55 /* Include files                                                              */
56 /******************************************************************************/
57 #include "ddl.h"
58 
59 /* C binding of definitions if building with C++ compiler */
60 #ifdef __cplusplus
61 extern "C"
62 {
63 #endif
64 
65 /**
66  ******************************************************************************
67  ** \defgroup FlashGroup Flash Controller (Flash)
68  **
69  **
70  ******************************************************************************/
71 //@{
72 
73 /******************************************************************************
74  * Global type definitions
75  ******************************************************************************/
76 /**
77  ******************************************************************************
78   ** \brief Flash中断类型重定义
79  *****************************************************************************/
80 typedef enum en_flash_int_type
81 {
82     FlashPCInt    = 1u,          ///<擦写PC地址报警中断
83     FlashSlockInt = 0u,          ///<擦写保护报警中断
84 } en_flash_int_type_t;
85 
86 
87 /**
88  ******************************************************************************
89   ** \brief Flash读等待周期类型重定义
90  *****************************************************************************/
91 typedef enum en_flash_waitcycle
92 {
93     FlashWaitCycle0 = 0u,       ///< 读等待周期设置为0(当HCLK小于等于24MHz时)
94     FlashWaitCycle1 = 1u,       ///< 读等待周期设置为1(当HCLK大于24MHz时必须至少为1)
95     FlashWaitCycle2 = 2u,       ///< 读等待周期设置为2(当HCK大于48MHz时必须至少为2)
96 } en_flash_waitcycle_t;
97 
98 /**
99  ******************************************************************************
100   ** \brief Flash擦写保护范围重定义
101  *****************************************************************************/
102 typedef enum en_flash_sector_lock
103 {
104     FlashSector0_3     = 0x00000001u,           ///<Sector0_3
105     FlashSector4_7     = 0x00000002u,           ///<Sector4_7
106     FlashSector8_11    = 0x00000004u,           ///<Sector8_11
107     FlashSector12_15   = 0x00000008u,           ///<Sector12_15
108     FlashSector16_19   = 0x00000010u,           ///<Sector16_19
109     FlashSector20_23   = 0x00000020u,           ///<Sector20_23
110     FlashSector24_27   = 0x00000040u,           ///<Sector24_27
111     FlashSector28_31   = 0x00000080u,           ///<Sector28_31
112     FlashSector32_35   = 0x00000100u,           ///<Sector32_35
113     FlashSector36_39   = 0x00000200u,           ///<Sector36_39
114     FlashSector40_43   = 0x00000400u,           ///<Sector40_43
115     FlashSector44_47   = 0x00000800u,           ///<Sector44_47
116     FlashSector48_51   = 0x00001000u,           ///<Sector48_51
117     FlashSector52_55   = 0x00002000u,           ///<Sector52_55
118     FlashSector56_59   = 0x00004000u,           ///<Sector56_59
119     FlashSector60_63   = 0x00008000u,           ///<Sector60_63
120     FlashSector64_67   = 0x00010000u,           ///<Sector64_67
121     FlashSector68_71   = 0x00020000u,           ///<Sector68_71
122     FlashSector72_75   = 0x00040000u,           ///<Sector72_75
123     FlashSector76_79   = 0x00080000u,           ///<Sector76_79
124     FlashSector80_83   = 0x00100000u,           ///<Sector80_83
125     FlashSector84_87   = 0x00200000u,           ///<Sector84_87
126     FlashSector88_91   = 0x00400000u,           ///<Sector88_91
127     FlashSector92_95   = 0x00800000u,           ///<Sector92_95
128     FlashSector96_99   = 0x01000000u,           ///<Sector96_99
129     FlashSector100_103 = 0x02000000u,           ///<Sector100_103
130     FlashSector104_107 = 0x04000000u,           ///<Sector104_107
131     FlashSector108_111 = 0x08000000u,           ///<Sector108_111
132     FlashSector112_115 = 0x10000000u,           ///<Sector112_115
133     FlashSector116_119 = 0x20000000u,           ///<Sector116_119
134     FlashSector120_123 = 0x40000000u,           ///<Sector120_123
135     FlashSector124_127 = (int)0x80000000u,           ///<Sector124_127
136     FlashSectorAll     = (int)0xFFFFFFFFu,           ///<SectorAll
137 } en_flash_sector_lock_t;
138 
139 /**
140  ******************************************************************************
141  ** \brief Redefinition of FLASH register structure
142  ******************************************************************************/
143 
144 /******************************************************************************
145  * Global definitions
146  ******************************************************************************/
147 
148 /******************************************************************************
149  * Local type definitions ('typedef')
150  ******************************************************************************/
151 
152 /******************************************************************************
153  * Global variable definitions ('extern')
154  ******************************************************************************/
155 
156 /******************************************************************************
157  * Global function prototypes (definition in C source)
158  ******************************************************************************/
159 ///<Flash 初始化配置(中断函数、编程时间参数及休眠模式配置)
160 en_result_t Flash_Init(func_ptr_t pfnFlashCb, uint8_t u8FreqCfg, boolean_t bDpstbEn);
161 
162 ///<Flash 页/全片擦除
163 en_result_t Flash_SectorErase(uint32_t u32SectorAddr);
164 en_result_t Flash_ChipErase(void);
165 
166 ///<Flash 字节/半字/字写
167 en_result_t Flash_WriteByte(uint32_t u32Addr, uint8_t u8Data);
168 en_result_t Flash_WriteHalfWord(uint32_t u32Addr, uint16_t u16Data);
169 en_result_t Flash_WriteWord(uint32_t u32Addr, uint32_t u32Data);
170 
171 ///<Flash 编程保护加锁/解锁
172 en_result_t Flash_Lock(en_flash_sector_lock_t enFlashSector);
173 en_result_t Flash_Unlock(en_flash_sector_lock_t enFlashSector);
174 
175 ///<Flash 读等待周期设定
176 en_result_t Flash_WaitCycle(en_flash_waitcycle_t enWaitCycle);
177 
178 ///<中断相关函数
179 ///<中断使能/禁止
180 en_result_t Flash_EnableIrq(en_flash_int_type_t enFlashIntType);
181 en_result_t Flash_DisableIrq(en_flash_int_type_t enFlashIntType);
182 ///<中断标志获取
183 boolean_t Flash_GetIntFlag(en_flash_int_type_t enFlashIntType);
184 ///<中断标志清除
185 en_result_t Flash_ClearIntFlag(en_flash_int_type_t enFlashIntType);
186 
187 //@} // FlashGroup
188 
189 #ifdef __cplusplus
190 }
191 #endif
192 
193 #endif /* __FLASH_H__ */
194 /******************************************************************************/
195 /* EOF (not truncated)                                                        */
196 /******************************************************************************/
197