platform_sdk.h
Go to the documentation of this file.
1 /**
2  ******************************************************************************
3  *
4  * @file platform_sdk.h
5  *
6  ****************************************************************************************
7  * @attention
8  #####Copyright (c) 2019 GOODIX
9  All rights reserved.
10 
11  Redistribution and use in source and binary forms, with or without
12  modification, are permitted provided that the following conditions are met:
13  * Redistributions of source code must retain the above copyright
14  notice, this list of conditions and the following disclaimer.
15  * Redistributions in binary form must reproduce the above copyright
16  notice, this list of conditions and the following disclaimer in the
17  documentation and/or other materials provided with the distribution.
18  * Neither the name of GOODIX nor the names of its contributors may be used
19  to endorse or promote products derived from this software without
20  specific prior written permission.
21 
22  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
23  AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
24  IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
25  ARE DISCLAIMED. IN NO EVENT SHALL COPYRIGHT HOLDERS AND CONTRIBUTORS BE
26  LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
27  CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
28  SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
29  INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
30  CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
31  ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
32  POSSIBILITY OF SUCH DAMAGE.
33  *****************************************************************************************
34  */
35 
36 
37 /**
38  * @addtogroup SYSTEM
39  * @{
40  */
41  /**
42  @addtogroup Plat_SDK Platform SDK
43  @{
44  @brief Definitions and prototypes for the Platform SDK
45  */
46 
47 #ifndef _PLATFORM_SDK_H
48 #define _PLATFORM_SDK_H
49 
50 #include <stdint.h>
51 #include <stdbool.h>
52 #include <stdio.h>
53 #include "system_gr55xx.h"
54 #include "gr55xx_hal_def.h"
55 #include "gr55xx_hal.h"
56 
57 /**@brief Clock calibration macro. */
58 #define XO_CRYSTAL_FREQ 32000000 //XO 32MHz
59 #define CLK_CAL_STAT_BUSY 0x00
60 #define CLK_CAL_STAT_DONE 0x01
61 #define CLK_CAL_STAT_OVERFLOW 0x100
62 
63 
64 /**@addtogroup PlAT_SDK_ENUM Enumerations
65  * @{ */
66 
67 /**@brief system clock and run mode. */
68 typedef enum
69 {
70  XIP_64M = 0, /**< XIP 64M. */
71  XIP_48M, /**< XIP 48M. */
72  XIP_XO16M, /**< XIP XO 16M. */
73  XIP_24M, /**< XIP 24M. */
74  XIP_16M, /**< XIP 16M. */
75  XIP_32M, /**< XIP 32M. */
76  MIRROR_64M, /**< MIRROR 64M. */
77  MIRROR_48M, /**< MIRROR 48M. */
78  MIRROR_XO16M, /**< MIRROR X) 16M. */
79  MIRROR_24M, /**< MIRROR 24M. */
80  MIRROR_16M, /**< MIRROR 16M. */
81  MIRROR_32M, /**< MIRROR 32M. */
82 } table_idx_t;
83 
84 /**@brief sdk clock type. */
85 typedef enum
86 {
87  RNG_OSC_CLK = 0, /**< RNG OSC CLOCK. */
88  RTC_OSC_CLK, /**< RTC OSC CLOCK. */
89  RNG_OSC_CLK2, /**< RNG OSC CLOCK2. */
91 
92 
93 /**@brief memory power setting mode. */
94 typedef enum
95 {
96  MEM_POWER_FULL_MODE = 0, /**< Full mode. */
97  MEM_POWER_AUTO_MODE, /**< Auto mode. */
98 } mem_power_t;
99 /** @} */
100 
101 /** @addtogroup PLAT_SDK_FUNCTIONS Functions
102  * @{ */
103 
104 /**@brief clock calibration notify callback. */
105 typedef void (*clock_calib_notify_cb_t)(float SlowClockFreq);
106 
107 /**
108  ****************************************************************************************
109  * @brief platform sdk init function.
110  * @retval : void
111  ****************************************************************************************
112  */
113 void platform_sdk_init(void);
114 
115 /**
116  ****************************************************************************************
117  * @brief set the memory power state to full. This function is mainly used in some
118  * scenarios where all SRAMs need to be powered on
119  * @retval : void
120  ****************************************************************************************
121  */
123 
124 /**
125  ****************************************************************************************
126  * @brief Set the memory power management mode, which can be automatic mode or full power on mode.
127  * @param[in] mem_pwr_mode : MEM_POWER_FULL_MODE or MEM_POWER_AUTO_MODE.
128  * @retval : void
129  ****************************************************************************************
130  */
132 
133 /**
134  ****************************************************************************************
135  * @brief Control the memory power supply by specifying start address and length.
136  * @param[in] start_addr : the start address of memory that user want to config
137  * @param[in] size : the size of memory that user want to config
138  * @retval : void
139  ****************************************************************************************
140  */
141 void mem_pwr_mgmt_mode_set_from(uint32_t start_addr, uint32_t size);
142 
143 /**
144  ****************************************************************************************
145  * @brief memory check process
146  * @retval : void
147  ****************************************************************************************
148  */
149 void mem_pwr_mgmt_init(void);
150 
151 /**
152  ****************************************************************************************
153  * @brief Enable patch function.
154  * @param[in] table_idx : Start Index Number.
155  * @param[in] dur_offset : duration setting.
156  * @param[in] ext_offset : ext wakeup setting.
157  * @param[in] osc_offset : pre-wakeup setting.
158  * @retval : void
159  ****************************************************************************************
160  */
161 void system_lp_table_update_twval(table_idx_t table_idx, int16_t dur_offset, int16_t ext_offset, int16_t osc_offset);
162 
163 /**
164  ****************************************************************************************
165  * @brief Leakage Protection for Chip's IO, Only used in Bali A0.
166  * @retval : void
167  ****************************************************************************************
168  */
170 
171 /**
172  ****************************************************************************************
173  * @brief Platform low power clock init function.
174  * @param[in] sys_clock: System clock.
175  * @param[in] clock : External RTC setting or internal RNG/RNG2 setting.
176  * @param[in] accuracy : Low speed clock accuracy.
177  * @param[in] xo_offset : Clock calibration parameter.
178  * @retval : void
179  ****************************************************************************************
180  */
181 void platform_clock_init(mcu_clock_type_t sys_clock, sdk_clock_type_t clock, uint16_t accuracy, uint16_t xo_offset);
182 
183 /**
184  ****************************************************************************************
185  * @brief Platform rc calibration function.
186  * @retval : void
187  ****************************************************************************************
188  */
190 
191 /**
192  ****************************************************************************************
193  * @brief Power Management warm boot.
194  *
195  * @retval : void
196  ****************************************************************************************
197  */
199 
200 /**
201  ****************************************************************************************
202  * @brief Handle Clock calibration interrupt request.
203  * @retval : void
204  ****************************************************************************************
205  */
207 
208 /**
209  ****************************************************************************************
210  * @brief Platform init function.
211  * @retval : void
212  ****************************************************************************************
213  */
214 void platform_init(void);
215 
216 /**
217  ****************************************************************************************
218  * @brief PMU init function.
219  * @param[in] clock_type : clock type to be configured.
220  * @retval : void
221  ****************************************************************************************
222  */
223 void system_pmu_init(mcu_clock_type_t clock_type);
224 
225 /**
226  ****************************************************************************************
227  * @brief PMU deinit function.
228  * @retval : void
229  ****************************************************************************************
230  */
231 void system_pmu_deinit(void);
232 
233 /**
234  ****************************************************************************************
235  * @brief the first warm boot stage.
236  * @retval : void
237  ****************************************************************************************
238  */
239 void warm_boot_first(void);
240 
241  /**
242  ****************************************************************************************
243  * @brief the second warm boot stage..
244  * @retval : void
245  ****************************************************************************************
246  */
247 void warm_boot_second(void);
248 
249 /**
250  ****************************************************************************************
251  * @brief Warm boot process.
252  * @retval : void
253  ****************************************************************************************
254  */
255 void warm_boot(void);
256 
257 /**
258  ****************************************************************************************
259  * @brief PMU calibration handler.
260  * @param[in] p_arg : no args.
261  * @retval : void
262  ****************************************************************************************
263  */
264 void pmu_calibration_handler(void* p_arg);
265 
266 /**
267  ****************************************************************************************
268  * @brief Register the clock calibration completion notification interface.
269  * @param[in] calib_notify_cb : Calibration complete callback interface.
270  ****************************************************************************************
271  */
273 
274 /**
275  ****************************************************************************************
276  * @brief start calibration.
277  * @param[in] interval : the interval of calibration process.
278  * @retval : void
279  ****************************************************************************************
280  */
281 #ifdef ENV_USE_FREERTOS
283 #else
284 void system_pmu_calibration_start(uint32_t interval);
285 #endif
286 
287 /**
288  ****************************************************************************************
289  * @brief stop calibration.
290  * @retval : void
291  ****************************************************************************************
292  */
294 
295 /**
296  ****************************************************************************************
297  * @brief write flash QE
298  * @retval : hal status
299  ****************************************************************************************
300  */
302 
303 /** @} */
304 
305 #endif
306 
307 /** @} */
308 /** @} */
309 
mem_pwr_mgmt_full_power_set
void mem_pwr_mgmt_full_power_set(void)
set the memory power state to full. This function is mainly used in some scenarios where all SRAMs ne...
system_pmu_calibration_stop
void system_pmu_calibration_stop(void)
stop calibration.
XIP_16M
@ XIP_16M
Definition: platform_sdk.h:74
clock_calib_notify_cb_t
void(* clock_calib_notify_cb_t)(float SlowClockFreq)
clock calibration notify callback.
Definition: platform_sdk.h:105
platform_rc_calibration
void platform_rc_calibration(void)
Platform rc calibration function.
RNG_OSC_CLK
@ RNG_OSC_CLK
Definition: platform_sdk.h:87
MIRROR_32M
@ MIRROR_32M
Definition: platform_sdk.h:81
platform_clock_init
void platform_clock_init(mcu_clock_type_t sys_clock, sdk_clock_type_t clock, uint16_t accuracy, uint16_t xo_offset)
Platform low power clock init function.
mem_pwr_mgmt_mode_set_from
void mem_pwr_mgmt_mode_set_from(uint32_t start_addr, uint32_t size)
Control the memory power supply by specifying start address and length.
MIRROR_24M
@ MIRROR_24M
Definition: platform_sdk.h:79
MEM_POWER_AUTO_MODE
@ MEM_POWER_AUTO_MODE
Definition: platform_sdk.h:97
XIP_24M
@ XIP_24M
Definition: platform_sdk.h:73
mem_pwr_mgmt_init
void mem_pwr_mgmt_init(void)
memory check process
_ll_xqspi_hp_init_t
XQSPI High Performance mode init structures definition.
Definition: gr55xx_ll_xqspi.h:77
platform_sdk_init
void platform_sdk_init(void)
platform sdk init function.
mem_power_t
mem_power_t
memory power setting mode.
Definition: platform_sdk.h:95
XIP_32M
@ XIP_32M
Definition: platform_sdk.h:75
RNG_OSC_CLK2
@ RNG_OSC_CLK2
Definition: platform_sdk.h:89
system_pmu_calibration_start
void system_pmu_calibration_start(uint32_t interval)
start calibration.
mem_pwr_mgmt_mode_set
void mem_pwr_mgmt_mode_set(mem_power_t mem_pwr_mode)
Set the memory power management mode, which can be automatic mode or full power on mode.
MIRROR_64M
@ MIRROR_64M
Definition: platform_sdk.h:76
MIRROR_16M
@ MIRROR_16M
Definition: platform_sdk.h:80
table_idx_t
table_idx_t
system clock and run mode.
Definition: platform_sdk.h:69
platform_init
void platform_init(void)
Platform init function.
system_io_leakage_protect
void system_io_leakage_protect(void)
Leakage Protection for Chip's IO, Only used in Bali A0.
platform_flash_enable_quad
hal_status_t platform_flash_enable_quad(exflash_hp_init_t *hp_init)
write flash QE
system_pmu_init
void system_pmu_init(mcu_clock_type_t clock_type)
PMU init function.
warm_boot_second
void warm_boot_second(void)
the second warm boot stage..
RTC_OSC_CLK
@ RTC_OSC_CLK
Definition: platform_sdk.h:88
clock_calibration_irq_handler
void clock_calibration_irq_handler(void)
Handle Clock calibration interrupt request.
XIP_48M
@ XIP_48M
Definition: platform_sdk.h:71
hal_status_t
hal_status_t
HAL Status structures definition.
Definition: gr55xx_hal_def.h:70
MIRROR_48M
@ MIRROR_48M
Definition: platform_sdk.h:77
gr55xx_hal.h
This file contains all the functions prototypes for the HAL module driver.
clock_calib_notify_register
void clock_calib_notify_register(clock_calib_notify_cb_t calib_notify_cb)
Register the clock calibration completion notification interface.
MEM_POWER_FULL_MODE
@ MEM_POWER_FULL_MODE
Definition: platform_sdk.h:96
XIP_64M
@ XIP_64M
Definition: platform_sdk.h:70
warm_boot_first
void warm_boot_first(void)
the first warm boot stage.
pwr_mgmt_warm_boot
void pwr_mgmt_warm_boot(void)
Power Management warm boot.
warm_boot
void warm_boot(void)
Warm boot process.
system_pmu_deinit
void system_pmu_deinit(void)
PMU deinit function.
MIRROR_XO16M
@ MIRROR_XO16M
Definition: platform_sdk.h:78
xo_offset
uint16_t xo_offset
Definition: gr55xx_efuse_layout.h:5
system_lp_table_update_twval
void system_lp_table_update_twval(table_idx_t table_idx, int16_t dur_offset, int16_t ext_offset, int16_t osc_offset)
Enable patch function.
gr55xx_hal_def.h
This file contains HAL common definitions, enumeration, macros and structures definitions.
XIP_XO16M
@ XIP_XO16M
Definition: platform_sdk.h:72
pmu_calibration_handler
void pmu_calibration_handler(void *p_arg)
PMU calibration handler.
sdk_clock_type_t
sdk_clock_type_t
sdk clock type.
Definition: platform_sdk.h:86