hpm_qei_regs.h 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636
  1. /*
  2. * Copyright (c) 2021-2023 HPMicro
  3. *
  4. * SPDX-License-Identifier: BSD-3-Clause
  5. *
  6. */
  7. #ifndef HPM_QEI_H
  8. #define HPM_QEI_H
  9. typedef struct {
  10. __RW uint32_t CR; /* 0x0: Control register */
  11. __RW uint32_t PHCFG; /* 0x4: Phase configure register */
  12. __RW uint32_t WDGCFG; /* 0x8: Watchdog configure register */
  13. __RW uint32_t PHIDX; /* 0xC: Phase index register */
  14. __RW uint32_t TRGOEN; /* 0x10: Tigger output enable register */
  15. __RW uint32_t READEN; /* 0x14: Read event enable register */
  16. __RW uint32_t ZCMP; /* 0x18: Z comparator */
  17. __RW uint32_t PHCMP; /* 0x1C: Phase comparator */
  18. __RW uint32_t SPDCMP; /* 0x20: Speed comparator */
  19. __RW uint32_t DMAEN; /* 0x24: DMA request enable register */
  20. __RW uint32_t SR; /* 0x28: Status register */
  21. __RW uint32_t IRQEN; /* 0x2C: Interrupt request register */
  22. struct {
  23. __RW uint32_t Z; /* 0x30: Z counter */
  24. __R uint32_t PH; /* 0x34: Phase counter */
  25. __RW uint32_t SPD; /* 0x38: Speed counter */
  26. __R uint32_t TMR; /* 0x3C: Timer counter */
  27. } COUNT[4];
  28. __R uint32_t SPDHIS[4]; /* 0x70 - 0x7C: Speed history */
  29. } QEI_Type;
  30. /* Bitfield definition for register: CR */
  31. /*
  32. * READ (WO)
  33. *
  34. * 1- load phcnt, zcnt, spdcnt and tmrcnt into their read registers. Hardware auto-clear; read as 0
  35. */
  36. #define QEI_CR_READ_MASK (0x80000000UL)
  37. #define QEI_CR_READ_SHIFT (31U)
  38. #define QEI_CR_READ_SET(x) (((uint32_t)(x) << QEI_CR_READ_SHIFT) & QEI_CR_READ_MASK)
  39. #define QEI_CR_READ_GET(x) (((uint32_t)(x) & QEI_CR_READ_MASK) >> QEI_CR_READ_SHIFT)
  40. /*
  41. * HRSTSPD (RW)
  42. *
  43. * 1- reset spdcnt when H assert
  44. */
  45. #define QEI_CR_HRSTSPD_MASK (0x40000UL)
  46. #define QEI_CR_HRSTSPD_SHIFT (18U)
  47. #define QEI_CR_HRSTSPD_SET(x) (((uint32_t)(x) << QEI_CR_HRSTSPD_SHIFT) & QEI_CR_HRSTSPD_MASK)
  48. #define QEI_CR_HRSTSPD_GET(x) (((uint32_t)(x) & QEI_CR_HRSTSPD_MASK) >> QEI_CR_HRSTSPD_SHIFT)
  49. /*
  50. * HRSTPH (RW)
  51. *
  52. * 1- reset phcnt when H assert
  53. */
  54. #define QEI_CR_HRSTPH_MASK (0x20000UL)
  55. #define QEI_CR_HRSTPH_SHIFT (17U)
  56. #define QEI_CR_HRSTPH_SET(x) (((uint32_t)(x) << QEI_CR_HRSTPH_SHIFT) & QEI_CR_HRSTPH_MASK)
  57. #define QEI_CR_HRSTPH_GET(x) (((uint32_t)(x) & QEI_CR_HRSTPH_MASK) >> QEI_CR_HRSTPH_SHIFT)
  58. /*
  59. * HRSTZ (RW)
  60. *
  61. * 1- reset zcnt when H assert
  62. */
  63. #define QEI_CR_HRSTZ_MASK (0x10000UL)
  64. #define QEI_CR_HRSTZ_SHIFT (16U)
  65. #define QEI_CR_HRSTZ_SET(x) (((uint32_t)(x) << QEI_CR_HRSTZ_SHIFT) & QEI_CR_HRSTZ_MASK)
  66. #define QEI_CR_HRSTZ_GET(x) (((uint32_t)(x) & QEI_CR_HRSTZ_MASK) >> QEI_CR_HRSTZ_SHIFT)
  67. /*
  68. * PAUSESPD (RW)
  69. *
  70. * 1- pause spdcnt when PAUSE assert
  71. */
  72. #define QEI_CR_PAUSESPD_MASK (0x4000U)
  73. #define QEI_CR_PAUSESPD_SHIFT (14U)
  74. #define QEI_CR_PAUSESPD_SET(x) (((uint32_t)(x) << QEI_CR_PAUSESPD_SHIFT) & QEI_CR_PAUSESPD_MASK)
  75. #define QEI_CR_PAUSESPD_GET(x) (((uint32_t)(x) & QEI_CR_PAUSESPD_MASK) >> QEI_CR_PAUSESPD_SHIFT)
  76. /*
  77. * PAUSEPH (RW)
  78. *
  79. * 1- pause phcnt when PAUSE assert
  80. */
  81. #define QEI_CR_PAUSEPH_MASK (0x2000U)
  82. #define QEI_CR_PAUSEPH_SHIFT (13U)
  83. #define QEI_CR_PAUSEPH_SET(x) (((uint32_t)(x) << QEI_CR_PAUSEPH_SHIFT) & QEI_CR_PAUSEPH_MASK)
  84. #define QEI_CR_PAUSEPH_GET(x) (((uint32_t)(x) & QEI_CR_PAUSEPH_MASK) >> QEI_CR_PAUSEPH_SHIFT)
  85. /*
  86. * PAUSEZ (RW)
  87. *
  88. * 1- pause zcnt when PAUSE assert
  89. */
  90. #define QEI_CR_PAUSEZ_MASK (0x1000U)
  91. #define QEI_CR_PAUSEZ_SHIFT (12U)
  92. #define QEI_CR_PAUSEZ_SET(x) (((uint32_t)(x) << QEI_CR_PAUSEZ_SHIFT) & QEI_CR_PAUSEZ_MASK)
  93. #define QEI_CR_PAUSEZ_GET(x) (((uint32_t)(x) & QEI_CR_PAUSEZ_MASK) >> QEI_CR_PAUSEZ_SHIFT)
  94. /*
  95. * HRDIR1 (RW)
  96. *
  97. * 1- HOMEF will set at H rising edge when dir == 1 (negative rotation direction)
  98. */
  99. #define QEI_CR_HRDIR1_MASK (0x800U)
  100. #define QEI_CR_HRDIR1_SHIFT (11U)
  101. #define QEI_CR_HRDIR1_SET(x) (((uint32_t)(x) << QEI_CR_HRDIR1_SHIFT) & QEI_CR_HRDIR1_MASK)
  102. #define QEI_CR_HRDIR1_GET(x) (((uint32_t)(x) & QEI_CR_HRDIR1_MASK) >> QEI_CR_HRDIR1_SHIFT)
  103. /*
  104. * HRDIR0 (RW)
  105. *
  106. * 1- HOMEF will set at H rising edge when dir == 0 (positive rotation direction)
  107. */
  108. #define QEI_CR_HRDIR0_MASK (0x400U)
  109. #define QEI_CR_HRDIR0_SHIFT (10U)
  110. #define QEI_CR_HRDIR0_SET(x) (((uint32_t)(x) << QEI_CR_HRDIR0_SHIFT) & QEI_CR_HRDIR0_MASK)
  111. #define QEI_CR_HRDIR0_GET(x) (((uint32_t)(x) & QEI_CR_HRDIR0_MASK) >> QEI_CR_HRDIR0_SHIFT)
  112. /*
  113. * HFDIR1 (RW)
  114. *
  115. * 1- HOMEF will set at H falling edge when dir == 1 (negative rotation direction)
  116. */
  117. #define QEI_CR_HFDIR1_MASK (0x200U)
  118. #define QEI_CR_HFDIR1_SHIFT (9U)
  119. #define QEI_CR_HFDIR1_SET(x) (((uint32_t)(x) << QEI_CR_HFDIR1_SHIFT) & QEI_CR_HFDIR1_MASK)
  120. #define QEI_CR_HFDIR1_GET(x) (((uint32_t)(x) & QEI_CR_HFDIR1_MASK) >> QEI_CR_HFDIR1_SHIFT)
  121. /*
  122. * HFDIR0 (RW)
  123. *
  124. * 1- HOMEF will set at H falling edge when dir == 1 (positive rotation direction)
  125. */
  126. #define QEI_CR_HFDIR0_MASK (0x100U)
  127. #define QEI_CR_HFDIR0_SHIFT (8U)
  128. #define QEI_CR_HFDIR0_SET(x) (((uint32_t)(x) << QEI_CR_HFDIR0_SHIFT) & QEI_CR_HFDIR0_MASK)
  129. #define QEI_CR_HFDIR0_GET(x) (((uint32_t)(x) & QEI_CR_HFDIR0_MASK) >> QEI_CR_HFDIR0_SHIFT)
  130. /*
  131. * SNAPEN (RW)
  132. *
  133. * 1- load phcnt, zcnt, spdcnt and tmrcnt into their snap registers when snapi input assert
  134. */
  135. #define QEI_CR_SNAPEN_MASK (0x20U)
  136. #define QEI_CR_SNAPEN_SHIFT (5U)
  137. #define QEI_CR_SNAPEN_SET(x) (((uint32_t)(x) << QEI_CR_SNAPEN_SHIFT) & QEI_CR_SNAPEN_MASK)
  138. #define QEI_CR_SNAPEN_GET(x) (((uint32_t)(x) & QEI_CR_SNAPEN_MASK) >> QEI_CR_SNAPEN_SHIFT)
  139. /*
  140. * RSTCNT (RW)
  141. *
  142. * 1- reset zcnt, spdcnt and tmrcnt to 0. reset phcnt to phidx
  143. */
  144. #define QEI_CR_RSTCNT_MASK (0x10U)
  145. #define QEI_CR_RSTCNT_SHIFT (4U)
  146. #define QEI_CR_RSTCNT_SET(x) (((uint32_t)(x) << QEI_CR_RSTCNT_SHIFT) & QEI_CR_RSTCNT_MASK)
  147. #define QEI_CR_RSTCNT_GET(x) (((uint32_t)(x) & QEI_CR_RSTCNT_MASK) >> QEI_CR_RSTCNT_SHIFT)
  148. /*
  149. * ENCTYP (RW)
  150. *
  151. * 00-abz; 01-pd; 10-ud; 11-reserved
  152. */
  153. #define QEI_CR_ENCTYP_MASK (0x3U)
  154. #define QEI_CR_ENCTYP_SHIFT (0U)
  155. #define QEI_CR_ENCTYP_SET(x) (((uint32_t)(x) << QEI_CR_ENCTYP_SHIFT) & QEI_CR_ENCTYP_MASK)
  156. #define QEI_CR_ENCTYP_GET(x) (((uint32_t)(x) & QEI_CR_ENCTYP_MASK) >> QEI_CR_ENCTYP_SHIFT)
  157. /* Bitfield definition for register: PHCFG */
  158. /*
  159. * ZCNTCFG (RW)
  160. *
  161. * 1- zcnt will increment when phcnt upcount to phmax, decrement when phcnt downcount to 0
  162. * 0- zcnt will increment or decrement when Z input assert
  163. */
  164. #define QEI_PHCFG_ZCNTCFG_MASK (0x400000UL)
  165. #define QEI_PHCFG_ZCNTCFG_SHIFT (22U)
  166. #define QEI_PHCFG_ZCNTCFG_SET(x) (((uint32_t)(x) << QEI_PHCFG_ZCNTCFG_SHIFT) & QEI_PHCFG_ZCNTCFG_MASK)
  167. #define QEI_PHCFG_ZCNTCFG_GET(x) (((uint32_t)(x) & QEI_PHCFG_ZCNTCFG_MASK) >> QEI_PHCFG_ZCNTCFG_SHIFT)
  168. /*
  169. * PHCALIZ (RW)
  170. *
  171. * 1- phcnt will set to phidx when Z input assert
  172. */
  173. #define QEI_PHCFG_PHCALIZ_MASK (0x200000UL)
  174. #define QEI_PHCFG_PHCALIZ_SHIFT (21U)
  175. #define QEI_PHCFG_PHCALIZ_SET(x) (((uint32_t)(x) << QEI_PHCFG_PHCALIZ_SHIFT) & QEI_PHCFG_PHCALIZ_MASK)
  176. #define QEI_PHCFG_PHCALIZ_GET(x) (((uint32_t)(x) & QEI_PHCFG_PHCALIZ_MASK) >> QEI_PHCFG_PHCALIZ_SHIFT)
  177. /*
  178. * PHMAX (RW)
  179. *
  180. * maximum phcnt number, phcnt will rollover to 0 when it upcount to phmax
  181. */
  182. #define QEI_PHCFG_PHMAX_MASK (0x1FFFFFUL)
  183. #define QEI_PHCFG_PHMAX_SHIFT (0U)
  184. #define QEI_PHCFG_PHMAX_SET(x) (((uint32_t)(x) << QEI_PHCFG_PHMAX_SHIFT) & QEI_PHCFG_PHMAX_MASK)
  185. #define QEI_PHCFG_PHMAX_GET(x) (((uint32_t)(x) & QEI_PHCFG_PHMAX_MASK) >> QEI_PHCFG_PHMAX_SHIFT)
  186. /* Bitfield definition for register: WDGCFG */
  187. /*
  188. * WDGEN (RW)
  189. *
  190. * 1- enable wdog counter
  191. */
  192. #define QEI_WDGCFG_WDGEN_MASK (0x80000000UL)
  193. #define QEI_WDGCFG_WDGEN_SHIFT (31U)
  194. #define QEI_WDGCFG_WDGEN_SET(x) (((uint32_t)(x) << QEI_WDGCFG_WDGEN_SHIFT) & QEI_WDGCFG_WDGEN_MASK)
  195. #define QEI_WDGCFG_WDGEN_GET(x) (((uint32_t)(x) & QEI_WDGCFG_WDGEN_MASK) >> QEI_WDGCFG_WDGEN_SHIFT)
  196. /*
  197. * WDGTO (RW)
  198. *
  199. * watch dog timeout value
  200. */
  201. #define QEI_WDGCFG_WDGTO_MASK (0x7FFFFFFFUL)
  202. #define QEI_WDGCFG_WDGTO_SHIFT (0U)
  203. #define QEI_WDGCFG_WDGTO_SET(x) (((uint32_t)(x) << QEI_WDGCFG_WDGTO_SHIFT) & QEI_WDGCFG_WDGTO_MASK)
  204. #define QEI_WDGCFG_WDGTO_GET(x) (((uint32_t)(x) & QEI_WDGCFG_WDGTO_MASK) >> QEI_WDGCFG_WDGTO_SHIFT)
  205. /* Bitfield definition for register: PHIDX */
  206. /*
  207. * PHIDX (RW)
  208. *
  209. * phcnt reset value, phcnt will reset to phidx when phcaliz set to 1
  210. */
  211. #define QEI_PHIDX_PHIDX_MASK (0x1FFFFFUL)
  212. #define QEI_PHIDX_PHIDX_SHIFT (0U)
  213. #define QEI_PHIDX_PHIDX_SET(x) (((uint32_t)(x) << QEI_PHIDX_PHIDX_SHIFT) & QEI_PHIDX_PHIDX_MASK)
  214. #define QEI_PHIDX_PHIDX_GET(x) (((uint32_t)(x) & QEI_PHIDX_PHIDX_MASK) >> QEI_PHIDX_PHIDX_SHIFT)
  215. /* Bitfield definition for register: TRGOEN */
  216. /*
  217. * WDGFEN (RW)
  218. *
  219. * 1- enable trigger output when wdg flag set
  220. */
  221. #define QEI_TRGOEN_WDGFEN_MASK (0x80000000UL)
  222. #define QEI_TRGOEN_WDGFEN_SHIFT (31U)
  223. #define QEI_TRGOEN_WDGFEN_SET(x) (((uint32_t)(x) << QEI_TRGOEN_WDGFEN_SHIFT) & QEI_TRGOEN_WDGFEN_MASK)
  224. #define QEI_TRGOEN_WDGFEN_GET(x) (((uint32_t)(x) & QEI_TRGOEN_WDGFEN_MASK) >> QEI_TRGOEN_WDGFEN_SHIFT)
  225. /*
  226. * HOMEFEN (RW)
  227. *
  228. * 1- enable trigger output when homef flag set
  229. */
  230. #define QEI_TRGOEN_HOMEFEN_MASK (0x40000000UL)
  231. #define QEI_TRGOEN_HOMEFEN_SHIFT (30U)
  232. #define QEI_TRGOEN_HOMEFEN_SET(x) (((uint32_t)(x) << QEI_TRGOEN_HOMEFEN_SHIFT) & QEI_TRGOEN_HOMEFEN_MASK)
  233. #define QEI_TRGOEN_HOMEFEN_GET(x) (((uint32_t)(x) & QEI_TRGOEN_HOMEFEN_MASK) >> QEI_TRGOEN_HOMEFEN_SHIFT)
  234. /*
  235. * POSCMPFEN (RW)
  236. *
  237. * 1- enable trigger output when poscmpf flag set
  238. */
  239. #define QEI_TRGOEN_POSCMPFEN_MASK (0x20000000UL)
  240. #define QEI_TRGOEN_POSCMPFEN_SHIFT (29U)
  241. #define QEI_TRGOEN_POSCMPFEN_SET(x) (((uint32_t)(x) << QEI_TRGOEN_POSCMPFEN_SHIFT) & QEI_TRGOEN_POSCMPFEN_MASK)
  242. #define QEI_TRGOEN_POSCMPFEN_GET(x) (((uint32_t)(x) & QEI_TRGOEN_POSCMPFEN_MASK) >> QEI_TRGOEN_POSCMPFEN_SHIFT)
  243. /*
  244. * ZPHFEN (RW)
  245. *
  246. * 1- enable trigger output when zphf flag set
  247. */
  248. #define QEI_TRGOEN_ZPHFEN_MASK (0x10000000UL)
  249. #define QEI_TRGOEN_ZPHFEN_SHIFT (28U)
  250. #define QEI_TRGOEN_ZPHFEN_SET(x) (((uint32_t)(x) << QEI_TRGOEN_ZPHFEN_SHIFT) & QEI_TRGOEN_ZPHFEN_MASK)
  251. #define QEI_TRGOEN_ZPHFEN_GET(x) (((uint32_t)(x) & QEI_TRGOEN_ZPHFEN_MASK) >> QEI_TRGOEN_ZPHFEN_SHIFT)
  252. /* Bitfield definition for register: READEN */
  253. /*
  254. * WDGFEN (RW)
  255. *
  256. * 1- load counters to their read registers when wdg flag set
  257. */
  258. #define QEI_READEN_WDGFEN_MASK (0x80000000UL)
  259. #define QEI_READEN_WDGFEN_SHIFT (31U)
  260. #define QEI_READEN_WDGFEN_SET(x) (((uint32_t)(x) << QEI_READEN_WDGFEN_SHIFT) & QEI_READEN_WDGFEN_MASK)
  261. #define QEI_READEN_WDGFEN_GET(x) (((uint32_t)(x) & QEI_READEN_WDGFEN_MASK) >> QEI_READEN_WDGFEN_SHIFT)
  262. /*
  263. * HOMEFEN (RW)
  264. *
  265. * 1- load counters to their read registers when homef flag set
  266. */
  267. #define QEI_READEN_HOMEFEN_MASK (0x40000000UL)
  268. #define QEI_READEN_HOMEFEN_SHIFT (30U)
  269. #define QEI_READEN_HOMEFEN_SET(x) (((uint32_t)(x) << QEI_READEN_HOMEFEN_SHIFT) & QEI_READEN_HOMEFEN_MASK)
  270. #define QEI_READEN_HOMEFEN_GET(x) (((uint32_t)(x) & QEI_READEN_HOMEFEN_MASK) >> QEI_READEN_HOMEFEN_SHIFT)
  271. /*
  272. * POSCMPFEN (RW)
  273. *
  274. * 1- load counters to their read registers when poscmpf flag set
  275. */
  276. #define QEI_READEN_POSCMPFEN_MASK (0x20000000UL)
  277. #define QEI_READEN_POSCMPFEN_SHIFT (29U)
  278. #define QEI_READEN_POSCMPFEN_SET(x) (((uint32_t)(x) << QEI_READEN_POSCMPFEN_SHIFT) & QEI_READEN_POSCMPFEN_MASK)
  279. #define QEI_READEN_POSCMPFEN_GET(x) (((uint32_t)(x) & QEI_READEN_POSCMPFEN_MASK) >> QEI_READEN_POSCMPFEN_SHIFT)
  280. /*
  281. * ZPHFEN (RW)
  282. *
  283. * 1- load counters to their read registers when zphf flag set
  284. */
  285. #define QEI_READEN_ZPHFEN_MASK (0x10000000UL)
  286. #define QEI_READEN_ZPHFEN_SHIFT (28U)
  287. #define QEI_READEN_ZPHFEN_SET(x) (((uint32_t)(x) << QEI_READEN_ZPHFEN_SHIFT) & QEI_READEN_ZPHFEN_MASK)
  288. #define QEI_READEN_ZPHFEN_GET(x) (((uint32_t)(x) & QEI_READEN_ZPHFEN_MASK) >> QEI_READEN_ZPHFEN_SHIFT)
  289. /* Bitfield definition for register: ZCMP */
  290. /*
  291. * ZCMP (RW)
  292. *
  293. * zcnt postion compare value
  294. */
  295. #define QEI_ZCMP_ZCMP_MASK (0xFFFFFFFFUL)
  296. #define QEI_ZCMP_ZCMP_SHIFT (0U)
  297. #define QEI_ZCMP_ZCMP_SET(x) (((uint32_t)(x) << QEI_ZCMP_ZCMP_SHIFT) & QEI_ZCMP_ZCMP_MASK)
  298. #define QEI_ZCMP_ZCMP_GET(x) (((uint32_t)(x) & QEI_ZCMP_ZCMP_MASK) >> QEI_ZCMP_ZCMP_SHIFT)
  299. /* Bitfield definition for register: PHCMP */
  300. /*
  301. * ZCMPDIS (RW)
  302. *
  303. * 1- postion compare not include zcnt
  304. */
  305. #define QEI_PHCMP_ZCMPDIS_MASK (0x80000000UL)
  306. #define QEI_PHCMP_ZCMPDIS_SHIFT (31U)
  307. #define QEI_PHCMP_ZCMPDIS_SET(x) (((uint32_t)(x) << QEI_PHCMP_ZCMPDIS_SHIFT) & QEI_PHCMP_ZCMPDIS_MASK)
  308. #define QEI_PHCMP_ZCMPDIS_GET(x) (((uint32_t)(x) & QEI_PHCMP_ZCMPDIS_MASK) >> QEI_PHCMP_ZCMPDIS_SHIFT)
  309. /*
  310. * DIRCMPDIS (RW)
  311. *
  312. * 1- postion compare not include rotation direction
  313. */
  314. #define QEI_PHCMP_DIRCMPDIS_MASK (0x40000000UL)
  315. #define QEI_PHCMP_DIRCMPDIS_SHIFT (30U)
  316. #define QEI_PHCMP_DIRCMPDIS_SET(x) (((uint32_t)(x) << QEI_PHCMP_DIRCMPDIS_SHIFT) & QEI_PHCMP_DIRCMPDIS_MASK)
  317. #define QEI_PHCMP_DIRCMPDIS_GET(x) (((uint32_t)(x) & QEI_PHCMP_DIRCMPDIS_MASK) >> QEI_PHCMP_DIRCMPDIS_SHIFT)
  318. /*
  319. * DIRCMP (RW)
  320. *
  321. * 0- position compare need positive rotation
  322. * 1- position compare need negative rotation
  323. */
  324. #define QEI_PHCMP_DIRCMP_MASK (0x20000000UL)
  325. #define QEI_PHCMP_DIRCMP_SHIFT (29U)
  326. #define QEI_PHCMP_DIRCMP_SET(x) (((uint32_t)(x) << QEI_PHCMP_DIRCMP_SHIFT) & QEI_PHCMP_DIRCMP_MASK)
  327. #define QEI_PHCMP_DIRCMP_GET(x) (((uint32_t)(x) & QEI_PHCMP_DIRCMP_MASK) >> QEI_PHCMP_DIRCMP_SHIFT)
  328. /*
  329. * PHCMP (RW)
  330. *
  331. * phcnt position compare value
  332. */
  333. #define QEI_PHCMP_PHCMP_MASK (0x1FFFFFUL)
  334. #define QEI_PHCMP_PHCMP_SHIFT (0U)
  335. #define QEI_PHCMP_PHCMP_SET(x) (((uint32_t)(x) << QEI_PHCMP_PHCMP_SHIFT) & QEI_PHCMP_PHCMP_MASK)
  336. #define QEI_PHCMP_PHCMP_GET(x) (((uint32_t)(x) & QEI_PHCMP_PHCMP_MASK) >> QEI_PHCMP_PHCMP_SHIFT)
  337. /* Bitfield definition for register: SPDCMP */
  338. /*
  339. * SPDCMP (RW)
  340. *
  341. * spdcnt position compare value
  342. */
  343. #define QEI_SPDCMP_SPDCMP_MASK (0xFFFFFFFFUL)
  344. #define QEI_SPDCMP_SPDCMP_SHIFT (0U)
  345. #define QEI_SPDCMP_SPDCMP_SET(x) (((uint32_t)(x) << QEI_SPDCMP_SPDCMP_SHIFT) & QEI_SPDCMP_SPDCMP_MASK)
  346. #define QEI_SPDCMP_SPDCMP_GET(x) (((uint32_t)(x) & QEI_SPDCMP_SPDCMP_MASK) >> QEI_SPDCMP_SPDCMP_SHIFT)
  347. /* Bitfield definition for register: DMAEN */
  348. /*
  349. * WDGFEN (RW)
  350. *
  351. * 1- generate dma request when wdg flag set
  352. */
  353. #define QEI_DMAEN_WDGFEN_MASK (0x80000000UL)
  354. #define QEI_DMAEN_WDGFEN_SHIFT (31U)
  355. #define QEI_DMAEN_WDGFEN_SET(x) (((uint32_t)(x) << QEI_DMAEN_WDGFEN_SHIFT) & QEI_DMAEN_WDGFEN_MASK)
  356. #define QEI_DMAEN_WDGFEN_GET(x) (((uint32_t)(x) & QEI_DMAEN_WDGFEN_MASK) >> QEI_DMAEN_WDGFEN_SHIFT)
  357. /*
  358. * HOMEFEN (RW)
  359. *
  360. * 1- generate dma request when homef flag set
  361. */
  362. #define QEI_DMAEN_HOMEFEN_MASK (0x40000000UL)
  363. #define QEI_DMAEN_HOMEFEN_SHIFT (30U)
  364. #define QEI_DMAEN_HOMEFEN_SET(x) (((uint32_t)(x) << QEI_DMAEN_HOMEFEN_SHIFT) & QEI_DMAEN_HOMEFEN_MASK)
  365. #define QEI_DMAEN_HOMEFEN_GET(x) (((uint32_t)(x) & QEI_DMAEN_HOMEFEN_MASK) >> QEI_DMAEN_HOMEFEN_SHIFT)
  366. /*
  367. * POSCMPFEN (RW)
  368. *
  369. * 1- generate dma request when poscmpf flag set
  370. */
  371. #define QEI_DMAEN_POSCMPFEN_MASK (0x20000000UL)
  372. #define QEI_DMAEN_POSCMPFEN_SHIFT (29U)
  373. #define QEI_DMAEN_POSCMPFEN_SET(x) (((uint32_t)(x) << QEI_DMAEN_POSCMPFEN_SHIFT) & QEI_DMAEN_POSCMPFEN_MASK)
  374. #define QEI_DMAEN_POSCMPFEN_GET(x) (((uint32_t)(x) & QEI_DMAEN_POSCMPFEN_MASK) >> QEI_DMAEN_POSCMPFEN_SHIFT)
  375. /*
  376. * ZPHFEN (RW)
  377. *
  378. * 1- generate dma request when zphf flag set
  379. */
  380. #define QEI_DMAEN_ZPHFEN_MASK (0x10000000UL)
  381. #define QEI_DMAEN_ZPHFEN_SHIFT (28U)
  382. #define QEI_DMAEN_ZPHFEN_SET(x) (((uint32_t)(x) << QEI_DMAEN_ZPHFEN_SHIFT) & QEI_DMAEN_ZPHFEN_MASK)
  383. #define QEI_DMAEN_ZPHFEN_GET(x) (((uint32_t)(x) & QEI_DMAEN_ZPHFEN_MASK) >> QEI_DMAEN_ZPHFEN_SHIFT)
  384. /* Bitfield definition for register: SR */
  385. /*
  386. * WDGF (RW)
  387. *
  388. * watchdog flag
  389. */
  390. #define QEI_SR_WDGF_MASK (0x80000000UL)
  391. #define QEI_SR_WDGF_SHIFT (31U)
  392. #define QEI_SR_WDGF_SET(x) (((uint32_t)(x) << QEI_SR_WDGF_SHIFT) & QEI_SR_WDGF_MASK)
  393. #define QEI_SR_WDGF_GET(x) (((uint32_t)(x) & QEI_SR_WDGF_MASK) >> QEI_SR_WDGF_SHIFT)
  394. /*
  395. * HOMEF (RW)
  396. *
  397. * home flag
  398. */
  399. #define QEI_SR_HOMEF_MASK (0x40000000UL)
  400. #define QEI_SR_HOMEF_SHIFT (30U)
  401. #define QEI_SR_HOMEF_SET(x) (((uint32_t)(x) << QEI_SR_HOMEF_SHIFT) & QEI_SR_HOMEF_MASK)
  402. #define QEI_SR_HOMEF_GET(x) (((uint32_t)(x) & QEI_SR_HOMEF_MASK) >> QEI_SR_HOMEF_SHIFT)
  403. /*
  404. * POSCMPF (RW)
  405. *
  406. * postion compare match flag
  407. */
  408. #define QEI_SR_POSCMPF_MASK (0x20000000UL)
  409. #define QEI_SR_POSCMPF_SHIFT (29U)
  410. #define QEI_SR_POSCMPF_SET(x) (((uint32_t)(x) << QEI_SR_POSCMPF_SHIFT) & QEI_SR_POSCMPF_MASK)
  411. #define QEI_SR_POSCMPF_GET(x) (((uint32_t)(x) & QEI_SR_POSCMPF_MASK) >> QEI_SR_POSCMPF_SHIFT)
  412. /*
  413. * ZPHF (RW)
  414. *
  415. * z input flag
  416. */
  417. #define QEI_SR_ZPHF_MASK (0x10000000UL)
  418. #define QEI_SR_ZPHF_SHIFT (28U)
  419. #define QEI_SR_ZPHF_SET(x) (((uint32_t)(x) << QEI_SR_ZPHF_SHIFT) & QEI_SR_ZPHF_MASK)
  420. #define QEI_SR_ZPHF_GET(x) (((uint32_t)(x) & QEI_SR_ZPHF_MASK) >> QEI_SR_ZPHF_SHIFT)
  421. /* Bitfield definition for register: IRQEN */
  422. /*
  423. * WDGIE (RW)
  424. *
  425. * 1- generate interrupt when wdg flag set
  426. */
  427. #define QEI_IRQEN_WDGIE_MASK (0x80000000UL)
  428. #define QEI_IRQEN_WDGIE_SHIFT (31U)
  429. #define QEI_IRQEN_WDGIE_SET(x) (((uint32_t)(x) << QEI_IRQEN_WDGIE_SHIFT) & QEI_IRQEN_WDGIE_MASK)
  430. #define QEI_IRQEN_WDGIE_GET(x) (((uint32_t)(x) & QEI_IRQEN_WDGIE_MASK) >> QEI_IRQEN_WDGIE_SHIFT)
  431. /*
  432. * HOMEIE (RW)
  433. *
  434. * 1- generate interrupt when homef flag set
  435. */
  436. #define QEI_IRQEN_HOMEIE_MASK (0x40000000UL)
  437. #define QEI_IRQEN_HOMEIE_SHIFT (30U)
  438. #define QEI_IRQEN_HOMEIE_SET(x) (((uint32_t)(x) << QEI_IRQEN_HOMEIE_SHIFT) & QEI_IRQEN_HOMEIE_MASK)
  439. #define QEI_IRQEN_HOMEIE_GET(x) (((uint32_t)(x) & QEI_IRQEN_HOMEIE_MASK) >> QEI_IRQEN_HOMEIE_SHIFT)
  440. /*
  441. * POSCMPIE (RW)
  442. *
  443. * 1- generate interrupt when poscmpf flag set
  444. */
  445. #define QEI_IRQEN_POSCMPIE_MASK (0x20000000UL)
  446. #define QEI_IRQEN_POSCMPIE_SHIFT (29U)
  447. #define QEI_IRQEN_POSCMPIE_SET(x) (((uint32_t)(x) << QEI_IRQEN_POSCMPIE_SHIFT) & QEI_IRQEN_POSCMPIE_MASK)
  448. #define QEI_IRQEN_POSCMPIE_GET(x) (((uint32_t)(x) & QEI_IRQEN_POSCMPIE_MASK) >> QEI_IRQEN_POSCMPIE_SHIFT)
  449. /*
  450. * ZPHIE (RW)
  451. *
  452. * 1- generate interrupt when zphf flag set
  453. */
  454. #define QEI_IRQEN_ZPHIE_MASK (0x10000000UL)
  455. #define QEI_IRQEN_ZPHIE_SHIFT (28U)
  456. #define QEI_IRQEN_ZPHIE_SET(x) (((uint32_t)(x) << QEI_IRQEN_ZPHIE_SHIFT) & QEI_IRQEN_ZPHIE_MASK)
  457. #define QEI_IRQEN_ZPHIE_GET(x) (((uint32_t)(x) & QEI_IRQEN_ZPHIE_MASK) >> QEI_IRQEN_ZPHIE_SHIFT)
  458. /* Bitfield definition for register of struct array COUNT: Z */
  459. /*
  460. * ZCNT (RW)
  461. *
  462. * zcnt value
  463. */
  464. #define QEI_COUNT_Z_ZCNT_MASK (0xFFFFFFFFUL)
  465. #define QEI_COUNT_Z_ZCNT_SHIFT (0U)
  466. #define QEI_COUNT_Z_ZCNT_SET(x) (((uint32_t)(x) << QEI_COUNT_Z_ZCNT_SHIFT) & QEI_COUNT_Z_ZCNT_MASK)
  467. #define QEI_COUNT_Z_ZCNT_GET(x) (((uint32_t)(x) & QEI_COUNT_Z_ZCNT_MASK) >> QEI_COUNT_Z_ZCNT_SHIFT)
  468. /* Bitfield definition for register of struct array COUNT: PH */
  469. /*
  470. * DIR (RO)
  471. *
  472. * 1- reverse rotation
  473. * 0- forward rotation
  474. */
  475. #define QEI_COUNT_PH_DIR_MASK (0x40000000UL)
  476. #define QEI_COUNT_PH_DIR_SHIFT (30U)
  477. #define QEI_COUNT_PH_DIR_GET(x) (((uint32_t)(x) & QEI_COUNT_PH_DIR_MASK) >> QEI_COUNT_PH_DIR_SHIFT)
  478. /*
  479. * ASTAT (RO)
  480. *
  481. * 1- a input is high
  482. * 0- a input is low
  483. */
  484. #define QEI_COUNT_PH_ASTAT_MASK (0x4000000UL)
  485. #define QEI_COUNT_PH_ASTAT_SHIFT (26U)
  486. #define QEI_COUNT_PH_ASTAT_GET(x) (((uint32_t)(x) & QEI_COUNT_PH_ASTAT_MASK) >> QEI_COUNT_PH_ASTAT_SHIFT)
  487. /*
  488. * BSTAT (RO)
  489. *
  490. * 1- b input is high
  491. * 0- b input is low
  492. */
  493. #define QEI_COUNT_PH_BSTAT_MASK (0x2000000UL)
  494. #define QEI_COUNT_PH_BSTAT_SHIFT (25U)
  495. #define QEI_COUNT_PH_BSTAT_GET(x) (((uint32_t)(x) & QEI_COUNT_PH_BSTAT_MASK) >> QEI_COUNT_PH_BSTAT_SHIFT)
  496. /*
  497. * PHCNT (RO)
  498. *
  499. * phcnt value
  500. */
  501. #define QEI_COUNT_PH_PHCNT_MASK (0x1FFFFFUL)
  502. #define QEI_COUNT_PH_PHCNT_SHIFT (0U)
  503. #define QEI_COUNT_PH_PHCNT_GET(x) (((uint32_t)(x) & QEI_COUNT_PH_PHCNT_MASK) >> QEI_COUNT_PH_PHCNT_SHIFT)
  504. /* Bitfield definition for register of struct array COUNT: SPD */
  505. /*
  506. * DIR (RO)
  507. *
  508. * 1- reverse rotation
  509. * 0- forward rotation
  510. */
  511. #define QEI_COUNT_SPD_DIR_MASK (0x80000000UL)
  512. #define QEI_COUNT_SPD_DIR_SHIFT (31U)
  513. #define QEI_COUNT_SPD_DIR_GET(x) (((uint32_t)(x) & QEI_COUNT_SPD_DIR_MASK) >> QEI_COUNT_SPD_DIR_SHIFT)
  514. /*
  515. * ASTAT (RO)
  516. *
  517. * 1- a input is high
  518. * 0- a input is low
  519. */
  520. #define QEI_COUNT_SPD_ASTAT_MASK (0x40000000UL)
  521. #define QEI_COUNT_SPD_ASTAT_SHIFT (30U)
  522. #define QEI_COUNT_SPD_ASTAT_GET(x) (((uint32_t)(x) & QEI_COUNT_SPD_ASTAT_MASK) >> QEI_COUNT_SPD_ASTAT_SHIFT)
  523. /*
  524. * BSTAT (RW)
  525. *
  526. * 1- b input is high
  527. * 0- b input is low
  528. */
  529. #define QEI_COUNT_SPD_BSTAT_MASK (0x20000000UL)
  530. #define QEI_COUNT_SPD_BSTAT_SHIFT (29U)
  531. #define QEI_COUNT_SPD_BSTAT_SET(x) (((uint32_t)(x) << QEI_COUNT_SPD_BSTAT_SHIFT) & QEI_COUNT_SPD_BSTAT_MASK)
  532. #define QEI_COUNT_SPD_BSTAT_GET(x) (((uint32_t)(x) & QEI_COUNT_SPD_BSTAT_MASK) >> QEI_COUNT_SPD_BSTAT_SHIFT)
  533. /*
  534. * SPDCNT (RO)
  535. *
  536. * spdcnt value
  537. */
  538. #define QEI_COUNT_SPD_SPDCNT_MASK (0xFFFFFFFUL)
  539. #define QEI_COUNT_SPD_SPDCNT_SHIFT (0U)
  540. #define QEI_COUNT_SPD_SPDCNT_GET(x) (((uint32_t)(x) & QEI_COUNT_SPD_SPDCNT_MASK) >> QEI_COUNT_SPD_SPDCNT_SHIFT)
  541. /* Bitfield definition for register of struct array COUNT: TMR */
  542. /*
  543. * TMRCNT (RO)
  544. *
  545. * 32 bit free run timer
  546. */
  547. #define QEI_COUNT_TMR_TMRCNT_MASK (0xFFFFFFFFUL)
  548. #define QEI_COUNT_TMR_TMRCNT_SHIFT (0U)
  549. #define QEI_COUNT_TMR_TMRCNT_GET(x) (((uint32_t)(x) & QEI_COUNT_TMR_TMRCNT_MASK) >> QEI_COUNT_TMR_TMRCNT_SHIFT)
  550. /* Bitfield definition for register array: SPDHIS */
  551. /*
  552. * SPDHIS0 (RO)
  553. *
  554. * copy of spdcnt, load from spdcnt after any transition from a = low, b = low
  555. */
  556. #define QEI_SPDHIS_SPDHIS0_MASK (0xFFFFFFFFUL)
  557. #define QEI_SPDHIS_SPDHIS0_SHIFT (0U)
  558. #define QEI_SPDHIS_SPDHIS0_GET(x) (((uint32_t)(x) & QEI_SPDHIS_SPDHIS0_MASK) >> QEI_SPDHIS_SPDHIS0_SHIFT)
  559. /* COUNT register group index macro definition */
  560. #define QEI_COUNT_CURRENT (0UL)
  561. #define QEI_COUNT_READ (1UL)
  562. #define QEI_COUNT_SNAP0 (2UL)
  563. #define QEI_COUNT_SNAP1 (3UL)
  564. /* SPDHIS register group index macro definition */
  565. #define QEI_SPDHIS_SPDHIS0 (0UL)
  566. #define QEI_SPDHIS_SPDHIS1 (1UL)
  567. #define QEI_SPDHIS_SPDHIS2 (2UL)
  568. #define QEI_SPDHIS_SPDHIS3 (3UL)
  569. #endif /* HPM_QEI_H */