1 /**
2  * SPDX-FileCopyrightText: 2022-2023 Espressif Systems (Shanghai) CO LTD
3  *
4  *  SPDX-License-Identifier: Apache-2.0
5  */
6 #pragma once
7 
8 #include <stdint.h>
9 #ifdef __cplusplus
10 extern "C" {
11 #endif
12 
13 /** Group: configure_register */
14 /** Type of clk_en register
15  *  need_des
16  */
17 typedef union {
18     struct {
19         uint32_t reserved_0:24;
20         /** rng_ck_en : R/W; bitpos: [24]; default: 1;
21          *  need_des
22          */
23         uint32_t rng_ck_en:1;
24         /** otp_dbg_ck_en : R/W; bitpos: [25]; default: 1;
25          *  need_des
26          */
27         uint32_t otp_dbg_ck_en:1;
28         /** lp_uart_ck_en : R/W; bitpos: [26]; default: 1;
29          *  need_des
30          */
31         uint32_t lp_uart_ck_en:1;
32         /** lp_io_ck_en : R/W; bitpos: [27]; default: 1;
33          *  need_des
34          */
35         uint32_t lp_io_ck_en:1;
36         /** lp_ext_i2c_ck_en : R/W; bitpos: [28]; default: 1;
37          *  need_des
38          */
39         uint32_t lp_ext_i2c_ck_en:1;
40         /** lp_ana_i2c_ck_en : R/W; bitpos: [29]; default: 1;
41          *  need_des
42          */
43         uint32_t lp_ana_i2c_ck_en:1;
44         /** efuse_ck_en : R/W; bitpos: [30]; default: 1;
45          *  need_des
46          */
47         uint32_t efuse_ck_en:1;
48         /** lp_cpu_ck_en : R/W; bitpos: [31]; default: 0;
49          *  need_des
50          */
51         uint32_t lp_cpu_ck_en:1;
52     };
53     uint32_t val;
54 } lpperi_clk_en_reg_t;
55 
56 /** Type of reset_en register
57  *  need_des
58  */
59 typedef union {
60     struct {
61         uint32_t reserved_0:23;
62         /** bus_reset_en : WT; bitpos: [23]; default: 0;
63          *  need_des
64          */
65         uint32_t bus_reset_en:1;
66         uint32_t reserved_24:1;
67         /** otp_dbg_reset_en : R/W; bitpos: [25]; default: 0;
68          *  need_des
69          */
70         uint32_t otp_dbg_reset_en:1;
71         /** lp_uart_reset_en : R/W; bitpos: [26]; default: 0;
72          *  need_des
73          */
74         uint32_t lp_uart_reset_en:1;
75         /** lp_io_reset_en : R/W; bitpos: [27]; default: 0;
76          *  need_des
77          */
78         uint32_t lp_io_reset_en:1;
79         /** lp_ext_i2c_reset_en : R/W; bitpos: [28]; default: 0;
80          *  need_des
81          */
82         uint32_t lp_ext_i2c_reset_en:1;
83         /** lp_ana_i2c_reset_en : R/W; bitpos: [29]; default: 0;
84          *  need_des
85          */
86         uint32_t lp_ana_i2c_reset_en:1;
87         /** efuse_reset_en : R/W; bitpos: [30]; default: 0;
88          *  need_des
89          */
90         uint32_t efuse_reset_en:1;
91         /** lp_cpu_reset_en : WT; bitpos: [31]; default: 0;
92          *  need_des
93          */
94         uint32_t lp_cpu_reset_en:1;
95     };
96     uint32_t val;
97 } lpperi_reset_en_reg_t;
98 
99 /** Type of rng_data register
100  *  need_des
101  */
102 typedef union {
103     struct {
104         /** rng_data : RO; bitpos: [31:0]; default: 0;
105          *  need_des
106          */
107         uint32_t rng_data:32;
108     };
109     uint32_t val;
110 } lpperi_rng_data_reg_t;
111 
112 /** Type of cpu register
113  *  need_des
114  */
115 typedef union {
116     struct {
117         uint32_t reserved_0:31;
118         /** lpcore_dbgm_unavaliable : R/W; bitpos: [31]; default: 1;
119          *  need_des
120          */
121         uint32_t lpcore_dbgm_unavaliable:1;
122     };
123     uint32_t val;
124 } lpperi_cpu_reg_t;
125 
126 /** Type of bus_timeout register
127  *  need_des
128  */
129 typedef union {
130     struct {
131         uint32_t reserved_0:14;
132         /** lp_peri_timeout_thres : R/W; bitpos: [29:14]; default: 65535;
133          *  need_des
134          */
135         uint32_t lp_peri_timeout_thres:16;
136         /** lp_peri_timeout_int_clear : WT; bitpos: [30]; default: 0;
137          *  need_des
138          */
139         uint32_t lp_peri_timeout_int_clear:1;
140         /** lp_peri_timeout_protect_en : R/W; bitpos: [31]; default: 1;
141          *  need_des
142          */
143         uint32_t lp_peri_timeout_protect_en:1;
144     };
145     uint32_t val;
146 } lpperi_bus_timeout_reg_t;
147 
148 /** Type of bus_timeout_addr register
149  *  need_des
150  */
151 typedef union {
152     struct {
153         /** lp_peri_timeout_addr : RO; bitpos: [31:0]; default: 0;
154          *  need_des
155          */
156         uint32_t lp_peri_timeout_addr:32;
157     };
158     uint32_t val;
159 } lpperi_bus_timeout_addr_reg_t;
160 
161 /** Type of bus_timeout_uid register
162  *  need_des
163  */
164 typedef union {
165     struct {
166         /** lp_peri_timeout_uid : RO; bitpos: [6:0]; default: 0;
167          *  need_des
168          */
169         uint32_t lp_peri_timeout_uid:7;
170         uint32_t reserved_7:25;
171     };
172     uint32_t val;
173 } lpperi_bus_timeout_uid_reg_t;
174 
175 /** Type of mem_ctrl register
176  *  need_des
177  */
178 typedef union {
179     struct {
180         /** uart_wakeup_flag_clr : WT; bitpos: [0]; default: 0;
181          *  need_des
182          */
183         uint32_t uart_wakeup_flag_clr:1;
184         /** uart_wakeup_flag : R/WTC/SS; bitpos: [1]; default: 0;
185          *  need_des
186          */
187         uint32_t uart_wakeup_flag:1;
188         uint32_t reserved_2:27;
189         /** uart_wakeup_en : R/W; bitpos: [29]; default: 0;
190          *  need_des
191          */
192         uint32_t uart_wakeup_en:1;
193         /** uart_mem_force_pd : R/W; bitpos: [30]; default: 0;
194          *  need_des
195          */
196         uint32_t uart_mem_force_pd:1;
197         /** uart_mem_force_pu : R/W; bitpos: [31]; default: 1;
198          *  need_des
199          */
200         uint32_t uart_mem_force_pu:1;
201     };
202     uint32_t val;
203 } lpperi_mem_ctrl_reg_t;
204 
205 /** Type of interrupt_source register
206  *  need_des
207  */
208 typedef union {
209     struct {
210         /** lp_interrupt_source : RO; bitpos: [5:0]; default: 0;
211          *  BIT5~BIT0: pmu_lp_int, modem_lp_int, lp_timer_lp_int, lp_uart_int, lp_i2c_int,
212          *  lp_io_int
213          */
214         uint32_t lp_interrupt_source:6;
215         uint32_t reserved_6:26;
216     };
217     uint32_t val;
218 } lpperi_interrupt_source_reg_t;
219 
220 
221 /** Group: Version register */
222 /** Type of date register
223  *  need_des
224  */
225 typedef union {
226     struct {
227         /** lpperi_date : R/W; bitpos: [30:0]; default: 35676464;
228          *  need_des
229          */
230         uint32_t lpperi_date:31;
231         /** clk_en : R/W; bitpos: [31]; default: 0;
232          *  need_des
233          */
234         uint32_t clk_en:1;
235     };
236     uint32_t val;
237 } lpperi_date_reg_t;
238 
239 
240 typedef struct lpperi_dev_t {
241     volatile lpperi_clk_en_reg_t clk_en;
242     volatile lpperi_reset_en_reg_t reset_en;
243     volatile lpperi_rng_data_reg_t rng_data;
244     volatile lpperi_cpu_reg_t cpu;
245     volatile lpperi_bus_timeout_reg_t bus_timeout;
246     volatile lpperi_bus_timeout_addr_reg_t bus_timeout_addr;
247     volatile lpperi_bus_timeout_uid_reg_t bus_timeout_uid;
248     volatile lpperi_mem_ctrl_reg_t mem_ctrl;
249     volatile lpperi_interrupt_source_reg_t interrupt_source;
250     uint32_t reserved_024[246];
251     volatile lpperi_date_reg_t date;
252 } lpperi_dev_t;
253 
254 extern lpperi_dev_t LPPERI;
255 
256 #ifndef __cplusplus
257 _Static_assert(sizeof(lpperi_dev_t) == 0x400, "Invalid size of lpperi_dev_t structure");
258 #endif
259 
260 #ifdef __cplusplus
261 }
262 #endif
263