hpm_ioc_regs.h 10.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358
  1. /*
  2. * Copyright (c) 2021-2023 HPMicro
  3. *
  4. * SPDX-License-Identifier: BSD-3-Clause
  5. *
  6. */
  7. #ifndef HPM_IOC_H
  8. #define HPM_IOC_H
  9. typedef struct {
  10. struct {
  11. __RW uint32_t FUNC_CTL; /* 0x0: ALT SELECT */
  12. __RW uint32_t PAD_CTL; /* 0x4: PAD SETTINGS */
  13. } PAD[492];
  14. } IOC_Type;
  15. /* Bitfield definition for register of struct array PAD: FUNC_CTL */
  16. /*
  17. * LOOP_BACK (RW)
  18. *
  19. * force input on
  20. * 0: disable
  21. * 1: enable
  22. */
  23. #define IOC_PAD_FUNC_CTL_LOOP_BACK_MASK (0x10000UL)
  24. #define IOC_PAD_FUNC_CTL_LOOP_BACK_SHIFT (16U)
  25. #define IOC_PAD_FUNC_CTL_LOOP_BACK_SET(x) (((uint32_t)(x) << IOC_PAD_FUNC_CTL_LOOP_BACK_SHIFT) & IOC_PAD_FUNC_CTL_LOOP_BACK_MASK)
  26. #define IOC_PAD_FUNC_CTL_LOOP_BACK_GET(x) (((uint32_t)(x) & IOC_PAD_FUNC_CTL_LOOP_BACK_MASK) >> IOC_PAD_FUNC_CTL_LOOP_BACK_SHIFT)
  27. /*
  28. * ANALOG (RW)
  29. *
  30. * select analog pin in pad
  31. * 0: disable
  32. * 1: enable
  33. */
  34. #define IOC_PAD_FUNC_CTL_ANALOG_MASK (0x100U)
  35. #define IOC_PAD_FUNC_CTL_ANALOG_SHIFT (8U)
  36. #define IOC_PAD_FUNC_CTL_ANALOG_SET(x) (((uint32_t)(x) << IOC_PAD_FUNC_CTL_ANALOG_SHIFT) & IOC_PAD_FUNC_CTL_ANALOG_MASK)
  37. #define IOC_PAD_FUNC_CTL_ANALOG_GET(x) (((uint32_t)(x) & IOC_PAD_FUNC_CTL_ANALOG_MASK) >> IOC_PAD_FUNC_CTL_ANALOG_SHIFT)
  38. /*
  39. * ALT_SELECT (RW)
  40. *
  41. * alt select
  42. * 0: ALT0
  43. * 1: ALT1
  44. * …
  45. * 31:ALT31
  46. */
  47. #define IOC_PAD_FUNC_CTL_ALT_SELECT_MASK (0x1FU)
  48. #define IOC_PAD_FUNC_CTL_ALT_SELECT_SHIFT (0U)
  49. #define IOC_PAD_FUNC_CTL_ALT_SELECT_SET(x) (((uint32_t)(x) << IOC_PAD_FUNC_CTL_ALT_SELECT_SHIFT) & IOC_PAD_FUNC_CTL_ALT_SELECT_MASK)
  50. #define IOC_PAD_FUNC_CTL_ALT_SELECT_GET(x) (((uint32_t)(x) & IOC_PAD_FUNC_CTL_ALT_SELECT_MASK) >> IOC_PAD_FUNC_CTL_ALT_SELECT_SHIFT)
  51. /* Bitfield definition for register of struct array PAD: PAD_CTL */
  52. /*
  53. * MS (RW)
  54. *
  55. * pin voltage select, only available in high-speed IO
  56. * 0: 3.3V
  57. * 1: 1.8V
  58. */
  59. #define IOC_PAD_PAD_CTL_MS_MASK (0x4000U)
  60. #define IOC_PAD_PAD_CTL_MS_SHIFT (14U)
  61. #define IOC_PAD_PAD_CTL_MS_SET(x) (((uint32_t)(x) << IOC_PAD_PAD_CTL_MS_SHIFT) & IOC_PAD_PAD_CTL_MS_MASK)
  62. #define IOC_PAD_PAD_CTL_MS_GET(x) (((uint32_t)(x) & IOC_PAD_PAD_CTL_MS_MASK) >> IOC_PAD_PAD_CTL_MS_SHIFT)
  63. /*
  64. * OD (RW)
  65. *
  66. * open drain
  67. * 0: open drain disable
  68. * 1: open drain enable
  69. */
  70. #define IOC_PAD_PAD_CTL_OD_MASK (0x2000U)
  71. #define IOC_PAD_PAD_CTL_OD_SHIFT (13U)
  72. #define IOC_PAD_PAD_CTL_OD_SET(x) (((uint32_t)(x) << IOC_PAD_PAD_CTL_OD_SHIFT) & IOC_PAD_PAD_CTL_OD_MASK)
  73. #define IOC_PAD_PAD_CTL_OD_GET(x) (((uint32_t)(x) & IOC_PAD_PAD_CTL_OD_MASK) >> IOC_PAD_PAD_CTL_OD_SHIFT)
  74. /*
  75. * SMT (RW)
  76. *
  77. * schmitt trigger enable, only avaiable in high-speed IO
  78. * 0: disable
  79. * 1: enable
  80. */
  81. #define IOC_PAD_PAD_CTL_SMT_MASK (0x1000U)
  82. #define IOC_PAD_PAD_CTL_SMT_SHIFT (12U)
  83. #define IOC_PAD_PAD_CTL_SMT_SET(x) (((uint32_t)(x) << IOC_PAD_PAD_CTL_SMT_SHIFT) & IOC_PAD_PAD_CTL_SMT_MASK)
  84. #define IOC_PAD_PAD_CTL_SMT_GET(x) (((uint32_t)(x) & IOC_PAD_PAD_CTL_SMT_MASK) >> IOC_PAD_PAD_CTL_SMT_SHIFT)
  85. /*
  86. * PS (RW)
  87. *
  88. * pull select
  89. * 0: pull down
  90. * 1: pull up
  91. */
  92. #define IOC_PAD_PAD_CTL_PS_MASK (0x800U)
  93. #define IOC_PAD_PAD_CTL_PS_SHIFT (11U)
  94. #define IOC_PAD_PAD_CTL_PS_SET(x) (((uint32_t)(x) << IOC_PAD_PAD_CTL_PS_SHIFT) & IOC_PAD_PAD_CTL_PS_MASK)
  95. #define IOC_PAD_PAD_CTL_PS_GET(x) (((uint32_t)(x) & IOC_PAD_PAD_CTL_PS_MASK) >> IOC_PAD_PAD_CTL_PS_SHIFT)
  96. /*
  97. * PE (RW)
  98. *
  99. * pull enable
  100. * 0: pull disable
  101. * 1: pull enable
  102. */
  103. #define IOC_PAD_PAD_CTL_PE_MASK (0x10U)
  104. #define IOC_PAD_PAD_CTL_PE_SHIFT (4U)
  105. #define IOC_PAD_PAD_CTL_PE_SET(x) (((uint32_t)(x) << IOC_PAD_PAD_CTL_PE_SHIFT) & IOC_PAD_PAD_CTL_PE_MASK)
  106. #define IOC_PAD_PAD_CTL_PE_GET(x) (((uint32_t)(x) & IOC_PAD_PAD_CTL_PE_MASK) >> IOC_PAD_PAD_CTL_PE_SHIFT)
  107. /*
  108. * DS (RW)
  109. *
  110. * drive strength
  111. * for high-speed IO 3.3V:
  112. * 000: 85.61Ohm
  113. * 001: 61.2 Ohm
  114. * 010: 42.88Ohm
  115. * 011: 35.76Ohm
  116. * 111: 30.67Ohm
  117. * for high-speed IO 1.8V:
  118. * 000: 84.07Ohm
  119. * 001: 60.14Ohm
  120. * 010: 42.15Ohm
  121. * 011: 35.19Ohm
  122. * 111: 30.2 Ohm
  123. * for general IO:
  124. * 00: 4mA
  125. * 01: 8mA
  126. * 11: 12mA
  127. */
  128. #define IOC_PAD_PAD_CTL_DS_MASK (0x7U)
  129. #define IOC_PAD_PAD_CTL_DS_SHIFT (0U)
  130. #define IOC_PAD_PAD_CTL_DS_SET(x) (((uint32_t)(x) << IOC_PAD_PAD_CTL_DS_SHIFT) & IOC_PAD_PAD_CTL_DS_MASK)
  131. #define IOC_PAD_PAD_CTL_DS_GET(x) (((uint32_t)(x) & IOC_PAD_PAD_CTL_DS_MASK) >> IOC_PAD_PAD_CTL_DS_SHIFT)
  132. /* PAD register group index macro definition */
  133. #define IOC_PAD_PA00 (0UL)
  134. #define IOC_PAD_PA01 (1UL)
  135. #define IOC_PAD_PA02 (2UL)
  136. #define IOC_PAD_PA03 (3UL)
  137. #define IOC_PAD_PA04 (4UL)
  138. #define IOC_PAD_PA05 (5UL)
  139. #define IOC_PAD_PA06 (6UL)
  140. #define IOC_PAD_PA07 (7UL)
  141. #define IOC_PAD_PA08 (8UL)
  142. #define IOC_PAD_PA09 (9UL)
  143. #define IOC_PAD_PA10 (10UL)
  144. #define IOC_PAD_PA11 (11UL)
  145. #define IOC_PAD_PA12 (12UL)
  146. #define IOC_PAD_PA13 (13UL)
  147. #define IOC_PAD_PA14 (14UL)
  148. #define IOC_PAD_PA15 (15UL)
  149. #define IOC_PAD_PA16 (16UL)
  150. #define IOC_PAD_PA17 (17UL)
  151. #define IOC_PAD_PA18 (18UL)
  152. #define IOC_PAD_PA19 (19UL)
  153. #define IOC_PAD_PA20 (20UL)
  154. #define IOC_PAD_PA21 (21UL)
  155. #define IOC_PAD_PA22 (22UL)
  156. #define IOC_PAD_PA23 (23UL)
  157. #define IOC_PAD_PA24 (24UL)
  158. #define IOC_PAD_PA25 (25UL)
  159. #define IOC_PAD_PA26 (26UL)
  160. #define IOC_PAD_PA27 (27UL)
  161. #define IOC_PAD_PA28 (28UL)
  162. #define IOC_PAD_PA29 (29UL)
  163. #define IOC_PAD_PA30 (30UL)
  164. #define IOC_PAD_PA31 (31UL)
  165. #define IOC_PAD_PB00 (32UL)
  166. #define IOC_PAD_PB01 (33UL)
  167. #define IOC_PAD_PB02 (34UL)
  168. #define IOC_PAD_PB03 (35UL)
  169. #define IOC_PAD_PB04 (36UL)
  170. #define IOC_PAD_PB05 (37UL)
  171. #define IOC_PAD_PB06 (38UL)
  172. #define IOC_PAD_PB07 (39UL)
  173. #define IOC_PAD_PB08 (40UL)
  174. #define IOC_PAD_PB09 (41UL)
  175. #define IOC_PAD_PB10 (42UL)
  176. #define IOC_PAD_PB11 (43UL)
  177. #define IOC_PAD_PB12 (44UL)
  178. #define IOC_PAD_PB13 (45UL)
  179. #define IOC_PAD_PB14 (46UL)
  180. #define IOC_PAD_PB15 (47UL)
  181. #define IOC_PAD_PB16 (48UL)
  182. #define IOC_PAD_PB17 (49UL)
  183. #define IOC_PAD_PB18 (50UL)
  184. #define IOC_PAD_PB19 (51UL)
  185. #define IOC_PAD_PB20 (52UL)
  186. #define IOC_PAD_PB21 (53UL)
  187. #define IOC_PAD_PB22 (54UL)
  188. #define IOC_PAD_PB23 (55UL)
  189. #define IOC_PAD_PB24 (56UL)
  190. #define IOC_PAD_PB25 (57UL)
  191. #define IOC_PAD_PB26 (58UL)
  192. #define IOC_PAD_PB27 (59UL)
  193. #define IOC_PAD_PB28 (60UL)
  194. #define IOC_PAD_PB29 (61UL)
  195. #define IOC_PAD_PB30 (62UL)
  196. #define IOC_PAD_PB31 (63UL)
  197. #define IOC_PAD_PC00 (64UL)
  198. #define IOC_PAD_PC01 (65UL)
  199. #define IOC_PAD_PC02 (66UL)
  200. #define IOC_PAD_PC03 (67UL)
  201. #define IOC_PAD_PC04 (68UL)
  202. #define IOC_PAD_PC05 (69UL)
  203. #define IOC_PAD_PC06 (70UL)
  204. #define IOC_PAD_PC07 (71UL)
  205. #define IOC_PAD_PC08 (72UL)
  206. #define IOC_PAD_PC09 (73UL)
  207. #define IOC_PAD_PC10 (74UL)
  208. #define IOC_PAD_PC11 (75UL)
  209. #define IOC_PAD_PC12 (76UL)
  210. #define IOC_PAD_PC13 (77UL)
  211. #define IOC_PAD_PC14 (78UL)
  212. #define IOC_PAD_PC15 (79UL)
  213. #define IOC_PAD_PC16 (80UL)
  214. #define IOC_PAD_PC17 (81UL)
  215. #define IOC_PAD_PC18 (82UL)
  216. #define IOC_PAD_PC19 (83UL)
  217. #define IOC_PAD_PC20 (84UL)
  218. #define IOC_PAD_PC21 (85UL)
  219. #define IOC_PAD_PC22 (86UL)
  220. #define IOC_PAD_PC23 (87UL)
  221. #define IOC_PAD_PC24 (88UL)
  222. #define IOC_PAD_PC25 (89UL)
  223. #define IOC_PAD_PC26 (90UL)
  224. #define IOC_PAD_PC27 (91UL)
  225. #define IOC_PAD_PC28 (92UL)
  226. #define IOC_PAD_PC29 (93UL)
  227. #define IOC_PAD_PC30 (94UL)
  228. #define IOC_PAD_PC31 (95UL)
  229. #define IOC_PAD_PD00 (96UL)
  230. #define IOC_PAD_PD01 (97UL)
  231. #define IOC_PAD_PD02 (98UL)
  232. #define IOC_PAD_PD03 (99UL)
  233. #define IOC_PAD_PD04 (100UL)
  234. #define IOC_PAD_PD05 (101UL)
  235. #define IOC_PAD_PD06 (102UL)
  236. #define IOC_PAD_PD07 (103UL)
  237. #define IOC_PAD_PD08 (104UL)
  238. #define IOC_PAD_PD09 (105UL)
  239. #define IOC_PAD_PD10 (106UL)
  240. #define IOC_PAD_PD11 (107UL)
  241. #define IOC_PAD_PD12 (108UL)
  242. #define IOC_PAD_PD13 (109UL)
  243. #define IOC_PAD_PD14 (110UL)
  244. #define IOC_PAD_PD15 (111UL)
  245. #define IOC_PAD_PD16 (112UL)
  246. #define IOC_PAD_PD17 (113UL)
  247. #define IOC_PAD_PD18 (114UL)
  248. #define IOC_PAD_PD19 (115UL)
  249. #define IOC_PAD_PD20 (116UL)
  250. #define IOC_PAD_PD21 (117UL)
  251. #define IOC_PAD_PD22 (118UL)
  252. #define IOC_PAD_PD23 (119UL)
  253. #define IOC_PAD_PD24 (120UL)
  254. #define IOC_PAD_PD25 (121UL)
  255. #define IOC_PAD_PD26 (122UL)
  256. #define IOC_PAD_PD27 (123UL)
  257. #define IOC_PAD_PD28 (124UL)
  258. #define IOC_PAD_PD29 (125UL)
  259. #define IOC_PAD_PD30 (126UL)
  260. #define IOC_PAD_PD31 (127UL)
  261. #define IOC_PAD_PE00 (128UL)
  262. #define IOC_PAD_PE01 (129UL)
  263. #define IOC_PAD_PE02 (130UL)
  264. #define IOC_PAD_PE03 (131UL)
  265. #define IOC_PAD_PE04 (132UL)
  266. #define IOC_PAD_PE05 (133UL)
  267. #define IOC_PAD_PE06 (134UL)
  268. #define IOC_PAD_PE07 (135UL)
  269. #define IOC_PAD_PE08 (136UL)
  270. #define IOC_PAD_PE09 (137UL)
  271. #define IOC_PAD_PE10 (138UL)
  272. #define IOC_PAD_PE11 (139UL)
  273. #define IOC_PAD_PE12 (140UL)
  274. #define IOC_PAD_PE13 (141UL)
  275. #define IOC_PAD_PE14 (142UL)
  276. #define IOC_PAD_PE15 (143UL)
  277. #define IOC_PAD_PE16 (144UL)
  278. #define IOC_PAD_PE17 (145UL)
  279. #define IOC_PAD_PE18 (146UL)
  280. #define IOC_PAD_PE19 (147UL)
  281. #define IOC_PAD_PE20 (148UL)
  282. #define IOC_PAD_PE21 (149UL)
  283. #define IOC_PAD_PE22 (150UL)
  284. #define IOC_PAD_PE23 (151UL)
  285. #define IOC_PAD_PE24 (152UL)
  286. #define IOC_PAD_PE25 (153UL)
  287. #define IOC_PAD_PE26 (154UL)
  288. #define IOC_PAD_PE27 (155UL)
  289. #define IOC_PAD_PE28 (156UL)
  290. #define IOC_PAD_PE29 (157UL)
  291. #define IOC_PAD_PE30 (158UL)
  292. #define IOC_PAD_PE31 (159UL)
  293. #define IOC_PAD_PF00 (160UL)
  294. #define IOC_PAD_PF01 (161UL)
  295. #define IOC_PAD_PF02 (162UL)
  296. #define IOC_PAD_PF03 (163UL)
  297. #define IOC_PAD_PF04 (164UL)
  298. #define IOC_PAD_PF05 (165UL)
  299. #define IOC_PAD_PF06 (166UL)
  300. #define IOC_PAD_PF07 (167UL)
  301. #define IOC_PAD_PF08 (168UL)
  302. #define IOC_PAD_PF09 (169UL)
  303. #define IOC_PAD_PF10 (170UL)
  304. #define IOC_PAD_PX00 (416UL)
  305. #define IOC_PAD_PX01 (417UL)
  306. #define IOC_PAD_PX02 (418UL)
  307. #define IOC_PAD_PX03 (419UL)
  308. #define IOC_PAD_PX04 (420UL)
  309. #define IOC_PAD_PX05 (421UL)
  310. #define IOC_PAD_PX06 (422UL)
  311. #define IOC_PAD_PX07 (423UL)
  312. #define IOC_PAD_PX08 (424UL)
  313. #define IOC_PAD_PX09 (425UL)
  314. #define IOC_PAD_PX10 (426UL)
  315. #define IOC_PAD_PX11 (427UL)
  316. #define IOC_PAD_PY00 (448UL)
  317. #define IOC_PAD_PY01 (449UL)
  318. #define IOC_PAD_PY02 (450UL)
  319. #define IOC_PAD_PY03 (451UL)
  320. #define IOC_PAD_PY04 (452UL)
  321. #define IOC_PAD_PY05 (453UL)
  322. #define IOC_PAD_PY06 (454UL)
  323. #define IOC_PAD_PY07 (455UL)
  324. #define IOC_PAD_PY08 (456UL)
  325. #define IOC_PAD_PY09 (457UL)
  326. #define IOC_PAD_PY10 (458UL)
  327. #define IOC_PAD_PY11 (459UL)
  328. #define IOC_PAD_PZ00 (480UL)
  329. #define IOC_PAD_PZ01 (481UL)
  330. #define IOC_PAD_PZ02 (482UL)
  331. #define IOC_PAD_PZ03 (483UL)
  332. #define IOC_PAD_PZ04 (484UL)
  333. #define IOC_PAD_PZ05 (485UL)
  334. #define IOC_PAD_PZ06 (486UL)
  335. #define IOC_PAD_PZ07 (487UL)
  336. #define IOC_PAD_PZ08 (488UL)
  337. #define IOC_PAD_PZ09 (489UL)
  338. #define IOC_PAD_PZ10 (490UL)
  339. #define IOC_PAD_PZ11 (491UL)
  340. #endif /* HPM_IOC_H */