i2c_struct.h 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407
  1. // Copyright 2020 Espressif Systems (Shanghai) PTE LTD
  2. //
  3. // Licensed under the Apache License, Version 2.0 (the "License");
  4. // you may not use this file except in compliance with the License.
  5. // You may obtain a copy of the License at
  6. //
  7. // http://www.apache.org/licenses/LICENSE-2.0
  8. //
  9. // Unless required by applicable law or agreed to in writing, software
  10. // distributed under the License is distributed on an "AS IS" BASIS,
  11. // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  12. // See the License for the specific language governing permissions and
  13. // limitations under the License.
  14. #ifndef _SOC_I2C_STRUCT_H_
  15. #define _SOC_I2C_STRUCT_H_
  16. #ifdef __cplusplus
  17. extern "C" {
  18. #endif
  19. #include "soc.h"
  20. typedef volatile struct i2c_dev_s {
  21. union {
  22. struct {
  23. uint32_t period : 9;
  24. uint32_t reserved9 : 23;
  25. };
  26. uint32_t val;
  27. } scl_low_period;
  28. union {
  29. struct {
  30. uint32_t sda_force_out : 1;
  31. uint32_t scl_force_out : 1;
  32. uint32_t sample_scl_level : 1;
  33. uint32_t rx_full_ack_level : 1;
  34. uint32_t ms_mode : 1;
  35. uint32_t trans_start : 1;
  36. uint32_t tx_lsb_first : 1;
  37. uint32_t rx_lsb_first : 1;
  38. uint32_t clk_en : 1;
  39. uint32_t arbitration_en : 1;
  40. uint32_t fsm_rst : 1;
  41. uint32_t conf_upgate : 1;
  42. uint32_t slv_tx_auto_start_en : 1;
  43. uint32_t addr_10bit_rw_check_en : 1;
  44. uint32_t addr_broadcasting_en : 1;
  45. uint32_t reserved15 : 17;
  46. };
  47. uint32_t val;
  48. } ctr;
  49. union {
  50. struct {
  51. uint32_t resp_rec : 1;
  52. uint32_t slave_rw : 1;
  53. uint32_t reserved2 : 1;
  54. uint32_t arb_lost : 1;
  55. uint32_t bus_busy : 1;
  56. uint32_t slave_addressed : 1;
  57. uint32_t reserved6 : 1;
  58. uint32_t reserved7 : 1;
  59. uint32_t rx_fifo_cnt : 6;
  60. uint32_t stretch_cause : 2;
  61. uint32_t reserved16 : 2;
  62. uint32_t tx_fifo_cnt : 6;
  63. uint32_t scl_main_state_last : 3;
  64. uint32_t reserved27 : 1;
  65. uint32_t scl_state_last : 3;
  66. uint32_t reserved31 : 1;
  67. };
  68. uint32_t val;
  69. } sr;
  70. union {
  71. struct {
  72. uint32_t time_out_value : 5;
  73. uint32_t time_out_en : 1;
  74. uint32_t reserved6 : 26;
  75. };
  76. uint32_t val;
  77. } timeout;
  78. union {
  79. struct {
  80. uint32_t addr : 15;
  81. uint32_t reserved15 : 16;
  82. uint32_t en_10bit : 1;
  83. };
  84. uint32_t val;
  85. } slave_addr;
  86. union {
  87. struct {
  88. uint32_t rx_fifo_raddr : 5;
  89. uint32_t rx_fifo_waddr : 5;
  90. uint32_t tx_fifo_raddr : 5;
  91. uint32_t tx_fifo_waddr : 5;
  92. uint32_t reserved20 : 1;
  93. uint32_t reserved21 : 1;
  94. uint32_t slave_rw_point : 8;
  95. uint32_t reserved30 : 2;
  96. };
  97. uint32_t val;
  98. } fifo_st;
  99. union {
  100. struct {
  101. uint32_t rx_fifo_wm_thrhd : 5;
  102. uint32_t tx_fifo_wm_thrhd : 5;
  103. uint32_t nonfifo_en : 1;
  104. uint32_t fifo_addr_cfg_en : 1;
  105. uint32_t rx_fifo_rst : 1;
  106. uint32_t tx_fifo_rst : 1;
  107. uint32_t fifo_prt_en : 1;
  108. uint32_t reserved15 : 5;
  109. uint32_t reserved20 : 6;
  110. uint32_t reserved26 : 1;
  111. uint32_t reserved27 : 5;
  112. };
  113. uint32_t val;
  114. } fifo_conf;
  115. union {
  116. struct {
  117. uint32_t data : 8;
  118. uint32_t reserved8 : 24;
  119. };
  120. uint32_t val;
  121. } fifo_data;
  122. union {
  123. struct {
  124. uint32_t rx_fifo_wm : 1;
  125. uint32_t tx_fifo_wm : 1;
  126. uint32_t rx_fifo_ovf : 1;
  127. uint32_t end_detect : 1;
  128. uint32_t byte_trans_done : 1;
  129. uint32_t arbitration_lost : 1;
  130. uint32_t mst_tx_fifo_udf : 1;
  131. uint32_t trans_complete : 1;
  132. uint32_t time_out : 1;
  133. uint32_t trans_start : 1;
  134. uint32_t nack : 1;
  135. uint32_t tx_fifo_ovf : 1;
  136. uint32_t rx_fifo_udf : 1;
  137. uint32_t scl_st_to : 1;
  138. uint32_t scl_main_st_to : 1;
  139. uint32_t det_start : 1;
  140. uint32_t slave_stretch : 1;
  141. uint32_t general_call : 1;
  142. uint32_t reserved18 : 14;
  143. };
  144. uint32_t val;
  145. } int_raw;
  146. union {
  147. struct {
  148. uint32_t rx_fifo_wm : 1;
  149. uint32_t tx_fifo_wm : 1;
  150. uint32_t rx_fifo_ovf : 1;
  151. uint32_t end_detect : 1;
  152. uint32_t byte_trans_done : 1;
  153. uint32_t arbitration_lost : 1;
  154. uint32_t mst_tx_fifo_udf : 1;
  155. uint32_t trans_complete : 1;
  156. uint32_t time_out : 1;
  157. uint32_t trans_start : 1;
  158. uint32_t nack : 1;
  159. uint32_t tx_fifo_ovf : 1;
  160. uint32_t rx_fifo_udf : 1;
  161. uint32_t scl_st_to : 1;
  162. uint32_t scl_main_st_to : 1;
  163. uint32_t det_start : 1;
  164. uint32_t slave_stretch : 1;
  165. uint32_t general_call : 1;
  166. uint32_t reserved18 : 14;
  167. };
  168. uint32_t val;
  169. } int_clr;
  170. union {
  171. struct {
  172. uint32_t rx_fifo_wm : 1;
  173. uint32_t tx_fifo_wm : 1;
  174. uint32_t rx_fifo_ovf : 1;
  175. uint32_t end_detect : 1;
  176. uint32_t byte_trans_done : 1;
  177. uint32_t arbitration_lost : 1;
  178. uint32_t mst_tx_fifo_udf : 1;
  179. uint32_t trans_complete : 1;
  180. uint32_t time_out : 1;
  181. uint32_t trans_start : 1;
  182. uint32_t nack : 1;
  183. uint32_t tx_fifo_ovf : 1;
  184. uint32_t rx_fifo_udf : 1;
  185. uint32_t scl_st_to : 1;
  186. uint32_t scl_main_st_to : 1;
  187. uint32_t det_start : 1;
  188. uint32_t slave_stretch : 1;
  189. uint32_t general_call : 1;
  190. uint32_t reserved18 : 14;
  191. };
  192. uint32_t val;
  193. } int_ena;
  194. union {
  195. struct {
  196. uint32_t rx_fifo_wm : 1;
  197. uint32_t tx_fifo_wm : 1;
  198. uint32_t rx_fifo_ovf : 1;
  199. uint32_t end_detect : 1;
  200. uint32_t byte_trans_done : 1;
  201. uint32_t arbitration_lost : 1;
  202. uint32_t mst_tx_fifo_udf : 1;
  203. uint32_t trans_complete : 1;
  204. uint32_t time_out : 1;
  205. uint32_t trans_start : 1;
  206. uint32_t nack : 1;
  207. uint32_t tx_fifo_ovf : 1;
  208. uint32_t rx_fifo_udf : 1;
  209. uint32_t scl_st_to : 1;
  210. uint32_t scl_main_st_to : 1;
  211. uint32_t det_start : 1;
  212. uint32_t slave_stretch : 1;
  213. uint32_t general_call : 1;
  214. uint32_t reserved18 : 14;
  215. };
  216. uint32_t val;
  217. } int_status;
  218. union {
  219. struct {
  220. uint32_t time : 9;
  221. uint32_t reserved9 : 23;
  222. };
  223. uint32_t val;
  224. } sda_hold;
  225. union {
  226. struct {
  227. uint32_t time : 9;
  228. uint32_t reserved9 : 23;
  229. };
  230. uint32_t val;
  231. } sda_sample;
  232. union {
  233. struct {
  234. uint32_t period : 9;
  235. uint32_t scl_wait_high_period : 7;
  236. uint32_t reserved16 : 16;
  237. };
  238. uint32_t val;
  239. } scl_high_period;
  240. uint32_t reserved_3c;
  241. union {
  242. struct {
  243. uint32_t time : 9;
  244. uint32_t reserved9 : 23;
  245. };
  246. uint32_t val;
  247. } scl_start_hold;
  248. union {
  249. struct {
  250. uint32_t time : 9;
  251. uint32_t reserved9 : 23;
  252. };
  253. uint32_t val;
  254. } scl_rstart_setup;
  255. union {
  256. struct {
  257. uint32_t time : 9;
  258. uint32_t reserved9 : 23;
  259. };
  260. uint32_t val;
  261. } scl_stop_hold;
  262. union {
  263. struct {
  264. uint32_t time : 9;
  265. uint32_t reserved9 : 23;
  266. };
  267. uint32_t val;
  268. } scl_stop_setup;
  269. union {
  270. struct {
  271. uint32_t scl_thres : 4;
  272. uint32_t sda_thres : 4;
  273. uint32_t scl_en : 1;
  274. uint32_t sda_en : 1;
  275. uint32_t reserved10 : 22;
  276. };
  277. uint32_t val;
  278. } filter_cfg;
  279. union {
  280. struct {
  281. uint32_t sclk_div_num : 8;
  282. uint32_t sclk_div_a : 6;
  283. uint32_t sclk_div_b : 6;
  284. uint32_t sclk_sel : 1;
  285. uint32_t sclk_active : 1;
  286. uint32_t reserved22 : 10;
  287. };
  288. uint32_t val;
  289. } clk_conf;
  290. union {
  291. struct {
  292. uint32_t command0 : 14;
  293. uint32_t reserved14 : 17;
  294. uint32_t command0_done : 1;
  295. };
  296. uint32_t val;
  297. } command[8];
  298. union {
  299. struct {
  300. uint32_t scl_st_to : 5; /*no more than 23*/
  301. uint32_t reserved5 : 27;
  302. };
  303. uint32_t val;
  304. } scl_st_time_out;
  305. union {
  306. struct {
  307. uint32_t scl_main_st_to : 5; /*no more than 23*/
  308. uint32_t reserved5 : 27;
  309. };
  310. uint32_t val;
  311. } scl_main_st_time_out;
  312. union {
  313. struct {
  314. uint32_t scl_rst_slv_en : 1;
  315. uint32_t scl_rst_slv_num : 5;
  316. uint32_t scl_pd_en : 1;
  317. uint32_t sda_pd_en : 1;
  318. uint32_t reserved8 : 24;
  319. };
  320. uint32_t val;
  321. } scl_sp_conf;
  322. union {
  323. struct {
  324. uint32_t stretch_protect_num : 10;
  325. uint32_t slave_scl_stretch_en : 1;
  326. uint32_t slave_scl_stretch_clr : 1;
  327. uint32_t slave_byte_ack_ctl_en : 1;
  328. uint32_t slave_byte_ack_level : 1;
  329. uint32_t reserved14 : 18;
  330. };
  331. uint32_t val;
  332. } scl_stretch_conf;
  333. uint32_t reserved_88;
  334. uint32_t reserved_8c;
  335. uint32_t reserved_90;
  336. uint32_t reserved_94;
  337. uint32_t reserved_98;
  338. uint32_t reserved_9c;
  339. uint32_t reserved_a0;
  340. uint32_t reserved_a4;
  341. uint32_t reserved_a8;
  342. uint32_t reserved_ac;
  343. uint32_t reserved_b0;
  344. uint32_t reserved_b4;
  345. uint32_t reserved_b8;
  346. uint32_t reserved_bc;
  347. uint32_t reserved_c0;
  348. uint32_t reserved_c4;
  349. uint32_t reserved_c8;
  350. uint32_t reserved_cc;
  351. uint32_t reserved_d0;
  352. uint32_t reserved_d4;
  353. uint32_t reserved_d8;
  354. uint32_t reserved_dc;
  355. uint32_t reserved_e0;
  356. uint32_t reserved_e4;
  357. uint32_t reserved_e8;
  358. uint32_t reserved_ec;
  359. uint32_t reserved_f0;
  360. uint32_t reserved_f4;
  361. uint32_t date;
  362. uint32_t reserved_fc;
  363. uint32_t txfifo_start_addr;
  364. uint32_t reserved_104;
  365. uint32_t reserved_108;
  366. uint32_t reserved_10c;
  367. uint32_t reserved_110;
  368. uint32_t reserved_114;
  369. uint32_t reserved_118;
  370. uint32_t reserved_11c;
  371. uint32_t reserved_120;
  372. uint32_t reserved_124;
  373. uint32_t reserved_128;
  374. uint32_t reserved_12c;
  375. uint32_t reserved_130;
  376. uint32_t reserved_134;
  377. uint32_t reserved_138;
  378. uint32_t reserved_13c;
  379. uint32_t reserved_140;
  380. uint32_t reserved_144;
  381. uint32_t reserved_148;
  382. uint32_t reserved_14c;
  383. uint32_t reserved_150;
  384. uint32_t reserved_154;
  385. uint32_t reserved_158;
  386. uint32_t reserved_15c;
  387. uint32_t reserved_160;
  388. uint32_t reserved_164;
  389. uint32_t reserved_168;
  390. uint32_t reserved_16c;
  391. uint32_t reserved_170;
  392. uint32_t reserved_174;
  393. uint32_t reserved_178;
  394. uint32_t reserved_17c;
  395. uint32_t rxfifo_start_addr;
  396. } i2c_dev_t;
  397. extern i2c_dev_t I2C0;
  398. #ifdef __cplusplus
  399. }
  400. #endif
  401. #endif /*_SOC_I2C_STRUCT_H_ */