13#define __RO const volatile
20#define DPORT0 ((uint32_t)0x3ff00000)
21#define MM_IO ((uint32_t)0x60000000)
24#define UART0_BASE (MM_IO + 0x000)
25#define SPI1_BASE (MM_IO + 0x100)
26#define SPI0_BASE (MM_IO + 0x200)
27#define GPIO_BASE (MM_IO + 0x300)
28#define FRC_BASE (MM_IO + 0x600)
29#define RTC_BASE (MM_IO + 0x700)
30#define IOMUX_BASE (MM_IO + 0x800)
31#define WDT_BASE (MM_IO + 0x900)
32#define UART1_BASE (MM_IO + 0xf00)
37template <
typename T,
int Offset,
int Bits>
42 static const T max = (T(1) << Bits) - T(1);
45 inline operator T()
const {
46 return (value >> Offset) & max;
50template <
typename T,
int Offset,
int Bits>
55 static const T max = (T(1) << Bits) - T(1);
56 static const T mask = max << Offset;
60 value = (value & ~mask) | ((v & max) << Offset);
65template <
typename T,
int Offset,
int Bits>
70 static const T max = (T(1) << Bits) - T(1);
71 static const T mask = max << Offset;
74 inline operator T()
const {
75 return (value >> Offset) & max;
78 value = (value & ~mask) | ((v & max) << Offset);
83#define BEGIN_BITFIELD_TYPE(typeName, T) \
87 typeName& operator=(T v) { value = v; return *this; } \
88 operator T&() { return value; } \
89 operator T() const { return value; } \
90 typedef T StorageType;
92#define ADD_BITFIELD_MEMBER_RO(memberName, offset, bits) \
93 BitFieldMember_RO<StorageType, offset, bits> memberName;
95#define ADD_BITFIELD_MEMBER_WO(memberName, offset, bits) \
96 BitFieldMember_WO<StorageType, offset, bits> memberName;
98#define ADD_BITFIELD_MEMBER_RW(memberName, offset, bits) \
99 BitFieldMember_RW<StorageType, offset, bits> memberName;
101#define END_BITFIELD_TYPE() \
110 BEGIN_BITFIELD_TYPE(cmd_t, uint32_t)
111 ADD_BITFIELD_MEMBER_RW(USR, 18, 1)
112 ADD_BITFIELD_MEMBER_RW(HPM, 19, 1)
113 ADD_BITFIELD_MEMBER_RW(RES, 20, 1)
114 ADD_BITFIELD_MEMBER_RW(DP, 21, 1)
115 ADD_BITFIELD_MEMBER_RW(CE, 22, 1)
116 ADD_BITFIELD_MEMBER_RW(BE, 23, 1)
117 ADD_BITFIELD_MEMBER_RW(SE, 24, 1)
118 ADD_BITFIELD_MEMBER_RW(PP, 25, 1)
119 ADD_BITFIELD_MEMBER_RW(WRSR, 26, 1)
120 ADD_BITFIELD_MEMBER_RW(RDSR, 27, 1)
121 ADD_BITFIELD_MEMBER_RW(RDID, 28, 1)
122 ADD_BITFIELD_MEMBER_RW(WRDI, 29, 1)
123 ADD_BITFIELD_MEMBER_RW(WREN, 30, 1)
124 ADD_BITFIELD_MEMBER_RW(READ, 31, 1)
127 BEGIN_BITFIELD_TYPE(ctrl_t, uint32_t)
128 ADD_BITFIELD_MEMBER_RW(FASTRD, 13, 1)
129 ADD_BITFIELD_MEMBER_RW(DOUT, 14, 1)
130 ADD_BITFIELD_MEMBER_RW(RESANDRES, 15, 1)
131 ADD_BITFIELD_MEMBER_RW(SSTAAI, 16, 1)
132 ADD_BITFIELD_MEMBER_RW(AHB, 17, 1)
133 ADD_BITFIELD_MEMBER_RW(HOLD, 18, 1)
134 ADD_BITFIELD_MEMBER_RW(SHARE, 19, 1)
135 ADD_BITFIELD_MEMBER_RW(QOUT, 20, 1)
136 ADD_BITFIELD_MEMBER_RW(WPR, 21, 1)
137 ADD_BITFIELD_MEMBER_RW(TWOBSE, 22, 1)
138 ADD_BITFIELD_MEMBER_RW(DIO, 23, 1)
139 ADD_BITFIELD_MEMBER_RW(QIO, 24, 1)
140 ADD_BITFIELD_MEMBER_RW(RD_BO, 25, 1)
141 ADD_BITFIELD_MEMBER_RW(WR_BO, 26, 1)
144 BEGIN_BITFIELD_TYPE(ctrl1_t, uint32_t)
145 ADD_BITFIELD_MEMBER_RW(BTL, 0,16)
146 ADD_BITFIELD_MEMBER_RW(TRES, 16,12)
147 ADD_BITFIELD_MEMBER_RW(TCSH, 28, 4)
150 BEGIN_BITFIELD_TYPE(status_t, uint32_t)
151 ADD_BITFIELD_MEMBER_RW(BUSY, 0, 1)
152 ADD_BITFIELD_MEMBER_RW(WRE, 1, 1)
153 ADD_BITFIELD_MEMBER_RW(BP0, 2, 1)
154 ADD_BITFIELD_MEMBER_RW(BP1, 3, 1)
155 ADD_BITFIELD_MEMBER_RW(BP2, 4, 1)
156 ADD_BITFIELD_MEMBER_RW(TBP, 5, 1)
157 ADD_BITFIELD_MEMBER_RW(SP, 7, 1)
158 ADD_BITFIELD_MEMBER_RW(WB, 16, 8)
159 ADD_BITFIELD_MEMBER_RW(EXT, 24, 8)
162 BEGIN_BITFIELD_TYPE(ctrl2_t, uint32_t)
163 ADD_BITFIELD_MEMBER_RW(ST, 0, 4)
164 ADD_BITFIELD_MEMBER_RW(HT, 4, 4)
165 ADD_BITFIELD_MEMBER_RW(CKOLM, 8, 4)
166 ADD_BITFIELD_MEMBER_RW(CKOHM, 12, 4)
167 ADD_BITFIELD_MEMBER_RW(MISODM, 16, 2)
168 ADD_BITFIELD_MEMBER_RW(MISODN, 18, 3)
169 ADD_BITFIELD_MEMBER_RW(MOSIDM, 21, 2)
170 ADD_BITFIELD_MEMBER_RW(MOSIDN, 23, 3)
171 ADD_BITFIELD_MEMBER_RW(CSDM, 26, 2)
172 ADD_BITFIELD_MEMBER_RW(CSDN, 28, 4)
175 BEGIN_BITFIELD_TYPE(clock_t, uint32_t)
176 ADD_BITFIELD_MEMBER_RW(CNT_L, 0, 6)
177 ADD_BITFIELD_MEMBER_RW(CNT_H, 6, 6)
178 ADD_BITFIELD_MEMBER_RW(CNT_N, 12, 6)
179 ADD_BITFIELD_MEMBER_RW(DIVPRE, 18,13)
180 ADD_BITFIELD_MEMBER_RW(EQU_SYSCLK, 31, 1)
183 BEGIN_BITFIELD_TYPE(user_t, uint32_t)
184 ADD_BITFIELD_MEMBER_RW(DUPLEX, 0, 1)
185 ADD_BITFIELD_MEMBER_RW(AHBUCMD4B, 1, 1)
186 ADD_BITFIELD_MEMBER_RW(AHBUCMD, 3, 1)
187 ADD_BITFIELD_MEMBER_RW(CSHOLD, 4, 1)
188 ADD_BITFIELD_MEMBER_RW(CSSETUP, 5, 1)
189 ADD_BITFIELD_MEMBER_RW(SSE, 6, 1)
190 ADD_BITFIELD_MEMBER_RW(SME, 7, 1)
191 ADD_BITFIELD_MEMBER_RW(AHBEM, 8, 2)
192 ADD_BITFIELD_MEMBER_RW(RDBYO, 10, 1)
193 ADD_BITFIELD_MEMBER_RW(WRBYO, 11, 1)
194 ADD_BITFIELD_MEMBER_RW(FWDUAL, 12, 1)
195 ADD_BITFIELD_MEMBER_RW(FWQUAD, 13, 1)
196 ADD_BITFIELD_MEMBER_RW(FWDIO, 14, 1)
197 ADD_BITFIELD_MEMBER_RW(FWQIO, 15, 1)
198 ADD_BITFIELD_MEMBER_RW(SIO, 16, 1)
199 ADD_BITFIELD_MEMBER_RW(HOLDPOL, 17, 1)
200 ADD_BITFIELD_MEMBER_RW(MOSIHOLD, 18, 1)
201 ADD_BITFIELD_MEMBER_RW(MISOHOLD, 19, 1)
202 ADD_BITFIELD_MEMBER_RW(DUMMYHOLD, 20, 1)
203 ADD_BITFIELD_MEMBER_RW(ADDRHOLD, 21, 1)
204 ADD_BITFIELD_MEMBER_RW(CMDHOLD, 22, 1)
205 ADD_BITFIELD_MEMBER_RW(PREPHOLD, 23, 1)
206 ADD_BITFIELD_MEMBER_RW(MISOH, 24, 1)
207 ADD_BITFIELD_MEMBER_RW(MOSIH, 25, 1)
208 ADD_BITFIELD_MEMBER_RW(DUMMYIDLE, 26, 1)
209 ADD_BITFIELD_MEMBER_RW(MOSI, 27, 1)
210 ADD_BITFIELD_MEMBER_RW(MISO, 28, 1)
211 ADD_BITFIELD_MEMBER_RW(DUMMY, 29, 1)
212 ADD_BITFIELD_MEMBER_RW(ADDR, 30, 1)
213 ADD_BITFIELD_MEMBER_RW(COMMAND, 31, 1)
216 BEGIN_BITFIELD_TYPE(user1_t, uint32_t)
217 ADD_BITFIELD_MEMBER_RW(DUMMY_CYC, 0, 8)
218 ADD_BITFIELD_MEMBER_RW(MISO_LEN, 8, 9)
219 ADD_BITFIELD_MEMBER_RW(MOSI_LEN, 17, 9)
220 ADD_BITFIELD_MEMBER_RW(ADDR_LEN, 26, 6)
223 BEGIN_BITFIELD_TYPE(user2_t, uint32_t)
224 ADD_BITFIELD_MEMBER_RW(CMD_VAL, 0,16)
225 ADD_BITFIELD_MEMBER_RW(CMD_LEN, 28, 4)
228 BEGIN_BITFIELD_TYPE(pin_t, uint32_t)
229 ADD_BITFIELD_MEMBER_RW(CS0_DIS, 0, 1)
230 ADD_BITFIELD_MEMBER_RW(CS1_DIS, 1, 1)
231 ADD_BITFIELD_MEMBER_RW(CS2_DIS, 2, 1)
234 BEGIN_BITFIELD_TYPE(slave_t, uint32_t)
235 ADD_BITFIELD_MEMBER_RW(RD_BUF_DONE, 0, 1)
236 ADD_BITFIELD_MEMBER_RW(WR_BUF_DONE, 1, 1)
237 ADD_BITFIELD_MEMBER_RW(RD_STA_DONE, 2, 1)
238 ADD_BITFIELD_MEMBER_RW(WR_STA_DONE, 3, 1)
239 ADD_BITFIELD_MEMBER_RW(TRANS_DONE, 4, 1)
240 ADD_BITFIELD_MEMBER_RW(RD_BUF_IE, 5, 1)
241 ADD_BITFIELD_MEMBER_RW(WR_BUF_IE, 6, 1)
242 ADD_BITFIELD_MEMBER_RW(RD_STA_IE, 7, 1)
243 ADD_BITFIELD_MEMBER_RW(WR_STA_IE, 8, 1)
244 ADD_BITFIELD_MEMBER_RW(TRANS_IE, 9, 1)
245 ADD_BITFIELD_MEMBER_RW(CS_IM, 10, 2)
246 ADD_BITFIELD_MEMBER_RW(SLV_LST_CMD, 17, 3)
247 ADD_BITFIELD_MEMBER_RW(SLV_LST_ST, 20, 3)
248 ADD_BITFIELD_MEMBER_RO(TRANS_CNT, 23, 4)
249 ADD_BITFIELD_MEMBER_RW(CMD_DEFINE, 27, 1)
250 ADD_BITFIELD_MEMBER_RW(WRRD_STA_EN, 28, 1)
251 ADD_BITFIELD_MEMBER_RW(WRRD_BUF_EN, 29, 1)
252 ADD_BITFIELD_MEMBER_RW(SLV_MODE, 30, 1)
253 ADD_BITFIELD_MEMBER_RW(SYNC_RESET, 31, 1)
256 BEGIN_BITFIELD_TYPE(slave1_t, uint32_t)
257 ADD_BITFIELD_MEMBER_RW(RDB_DUM_EN, 0, 1)
258 ADD_BITFIELD_MEMBER_RW(WRB_DUM_EN, 1, 1)
259 ADD_BITFIELD_MEMBER_RW(RDS_DUM_EN, 2, 1)
260 ADD_BITFIELD_MEMBER_RW(WRS_DUM_EN, 3, 1)
261 ADD_BITFIELD_MEMBER_RW(WR_ADR_LEN, 4, 6)
262 ADD_BITFIELD_MEMBER_RW(RD_ADR_LEN, 10, 6)
263 ADD_BITFIELD_MEMBER_RW(BUF_LEN, 16, 9)
264 ADD_BITFIELD_MEMBER_RW(SLV_STAT_RD, 25, 9)
265 ADD_BITFIELD_MEMBER_RW(SLV_STAT_FST,26, 9)
266 ADD_BITFIELD_MEMBER_RW(STATUS_LEN, 27, 5)
269 BEGIN_BITFIELD_TYPE(slave2_t, uint32_t)
270 ADD_BITFIELD_MEMBER_RW(RDSTA_D_LEN, 0, 8)
271 ADD_BITFIELD_MEMBER_RW(WRSTA_D_LEN, 8, 8)
272 ADD_BITFIELD_MEMBER_RW(RDBUF_D_LEN, 18, 8)
273 ADD_BITFIELD_MEMBER_RW(WRBUF_D_LEN, 24, 8)
276 BEGIN_BITFIELD_TYPE(slave3_t, uint32_t)
277 ADD_BITFIELD_MEMBER_RW(RDBUF_C_VAL, 0, 8)
278 ADD_BITFIELD_MEMBER_RW(WRBUF_C_VAL, 8, 8)
279 ADD_BITFIELD_MEMBER_RW(RDSTA_C_VAL, 18, 8)
280 ADD_BITFIELD_MEMBER_RW(WRSTA_C_VAL, 24, 8)
283 BEGIN_BITFIELD_TYPE(ext0_t, uint32_t)
284 ADD_BITFIELD_MEMBER_RW(T_PP_TIME, 0,12)
285 ADD_BITFIELD_MEMBER_RW(T_PP_SHIFT, 16, 4)
286 ADD_BITFIELD_MEMBER_RW(T_PP_ENA, 31, 1)
289 BEGIN_BITFIELD_TYPE(ext1_t, uint32_t)
290 ADD_BITFIELD_MEMBER_RW(T_ERA_TIME, 0,12)
291 ADD_BITFIELD_MEMBER_RW(T_ERA_SHIFT, 16, 4)
292 ADD_BITFIELD_MEMBER_RW(T_ERA_ENA, 31, 1)
295 BEGIN_BITFIELD_TYPE(ext2_t, uint32_t)
296 ADD_BITFIELD_MEMBER_RW(SPI_ST, 0, 3)
299 BEGIN_BITFIELD_TYPE(ext3_t, uint32_t)
300 ADD_BITFIELD_MEMBER_RW(INT_HOLD_ENA, 0, 2)
314 __RW uint32_t WR_STATUS;
321 __RO uint32_t dummy[28];
332#define SPI0 (*(ESP_SPI::Type *) SPI0_BASE)
333#define SPI1 (*(ESP_SPI::Type *) SPI1_BASE)
341 BEGIN_BITFIELD_TYPE(out_t, uint32_t)
342 ADD_BITFIELD_MEMBER_RW(DATA, 0, 16)
343 ADD_BITFIELD_MEMBER_RW(BT_SEL, 16, 16)
346 BEGIN_BITFIELD_TYPE(enable_t, uint32_t)
347 ADD_BITFIELD_MEMBER_RW(DATA, 0, 16)
348 ADD_BITFIELD_MEMBER_RW(SDIO_SEL,16, 6)
351 BEGIN_BITFIELD_TYPE(in_t, uint32_t)
352 ADD_BITFIELD_MEMBER_RO(DATA, 0, 16)
353 ADD_BITFIELD_MEMBER_RO(STRAPPING, 16, 16)
356 BEGIN_BITFIELD_TYPE(pin_t, uint32_t)
357 ADD_BITFIELD_MEMBER_RW(SOURCE, 0, 1)
358 ADD_BITFIELD_MEMBER_RW(DRIVER, 2, 1)
359 ADD_BITFIELD_MEMBER_RW(INT_TYPE, 7, 3)
360 ADD_BITFIELD_MEMBER_RW(WAKEUP_ENABLE, 10, 1)
364 const uint32_t SOURCE_GPIO = 0;
365 const uint32_t SOURCE_SIGMA_DELTA = 1;
367 const uint32_t DRIVER_PUSH_PULL = 0;
368 const uint32_t DRIVER_OPEN_DRAIN = 1;
370 const uint32_t INT_DISABLE = 0;
371 const uint32_t INT_RAISING_EDGE = 1;
372 const uint32_t INT_FALLING_EDGE = 2;
373 const uint32_t INT_BOTH_EDGES = 3;
374 const uint32_t INT_LEVEL_LOW = 4;
375 const uint32_t INT_LEVEL_HIGH = 5;
377 BEGIN_BITFIELD_TYPE(sigmadelta_t, uint32_t)
378 ADD_BITFIELD_MEMBER_RW(TARGET, 0, 8)
379 ADD_BITFIELD_MEMBER_RW(PRESCALE, 8, 8)
380 ADD_BITFIELD_MEMBER_RW(ENABLE, 16, 1)
383 BEGIN_BITFIELD_TYPE(rtc_sync_t, uint32_t)
384 ADD_BITFIELD_MEMBER_RW(PERIOD_NUM, 0, 10)
385 ADD_BITFIELD_MEMBER_RW(CALIB_START, 31, 1)
388 BEGIN_BITFIELD_TYPE(rtc_value_t, uint32_t)
389 ADD_BITFIELD_MEMBER_RW(CALIB_VALUE, 0, 20)
390 ADD_BITFIELD_MEMBER_RW(CALIB_RDY_REAL, 30, 1)
391 ADD_BITFIELD_MEMBER_RW(CALIB_RDY, 31, 1)
396 __WO uint32_t OUT_DATA_W1TS;
397 __WO uint32_t OUT_DATA_W1TC;
399 __WO uint32_t ENABLE_W1TS;
400 __WO uint32_t ENABLE_W1TC;
402 __RW uint32_t STATUS;
403 __WO uint32_t STATUS_W1TS;
404 __WO uint32_t STATUS_W1TC;
406 sigmadelta_t SIGMA_DELTA;
407 rtc_sync_t RTC_CALIB_SYNC;
408 rtc_value_t RTC_CALIB_VALUE;
413#define ESP_GPIO (*(_GPIO_::Type *) GPIO_BASE)
422 BEGIN_BITFIELD_TYPE(frctrl_t, uint32_t)
423 ADD_BITFIELD_MEMBER_RW(INT_TYPE, 0, 1)
424 ADD_BITFIELD_MEMBER_RW(DIVIDER, 2, 2)
425 ADD_BITFIELD_MEMBER_RW(RELOAD, 6, 1)
426 ADD_BITFIELD_MEMBER_RW(ENABLE, 7, 1)
427 ADD_BITFIELD_MEMBER_RO(INT_STATUS, 8, 1)
431 const uint32_t INT_TYPE_EDGE = 0;
432 const uint32_t INT_TYPE_LEVEL = 1;
434 const uint32_t DIVIDER_1 = 0;
435 const uint32_t DIVIDER_16 = 1;
436 const uint32_t DIVIDER_256 = 2;
438 const uint32_t INT_CLR = 0;
447 struct Type2 :
public Type1 {
455#define ESP_FRC1 (*(_FRC_::Type1 *) (FRC_BASE + 0x0000))
456#define ESP_FRC2 (*(_FRC_::Type2 *) (FRC_BASE + 0x0020))
460 BEGIN_BITFIELD_TYPE(conf_t, uint32_t)
461 ADD_BITFIELD_MEMBER_RW(SPI0CLK_EQU_SYSCLK, 8, 1)
462 ADD_BITFIELD_MEMBER_RW(SPI1CLK_EQU_SYSCLK, 9, 1)
465 BEGIN_BITFIELD_TYPE(mux_t, uint32_t)
466 ADD_BITFIELD_MEMBER_RW(OE, 0, 1)
467 ADD_BITFIELD_MEMBER_RW(SLEEP_OE, 1, 1)
468 ADD_BITFIELD_MEMBER_RW(SLEEP_PULLDOWN, 2, 1)
469 ADD_BITFIELD_MEMBER_RW(SLEEP_PULLUP, 3, 1)
470 ADD_BITFIELD_MEMBER_RW(PULLDOWN, 6, 1)
471 ADD_BITFIELD_MEMBER_RW(PULLUP, 7, 1)
472 ADD_BITFIELD_MEMBER_RW(FUNC, 19, 4)
475 const static uint32_t GPIO_TO_IOMUX[] = { 12,5,13,4,14,15,6,7,8,9,10,11,0,1,2,3 };
481 mux_t & operator() (
int gpio) {
482 return ENTRY[ GPIO_TO_IOMUX[gpio] ];
489#define ESP_IOMUX (*(_IOMUX_::Type *) IOMUX_BASE)