Kiibohd Controller
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
This repo is archived. You can view files and clone it, but cannot push or open issues/pull-requests.

sim.h 7.4KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332
  1. /* Copyright (c) 2011,2012 Simon Schubert <[email protected]>.
  2. * Modifications by Jacob Alexander 2014 <[email protected]>
  3. *
  4. * This program is free software: you can redistribute it and/or modify
  5. * it under the terms of the GNU General Public License as published by
  6. * the Free Software Foundation, either version 3 of the License, or
  7. * (at your option) any later version.
  8. *
  9. * This program is distributed in the hope that it will be useful,
  10. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  11. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  12. * GNU General Public License for more details.
  13. *
  14. * You should have received a copy of the GNU General Public License
  15. * along with this program. If not, see <http://www.gnu.org/licenses/>.
  16. */
  17. #ifndef __SIM_H
  18. #define __SIM_H
  19. // ----- Local Includes -----
  20. #include "mchck.h"
  21. // ----- Structs -----
  22. struct SIM_t {
  23. struct SIM_SOPT1_t {
  24. UNION_STRUCT_START(32);
  25. uint32_t _rsvd0 : 12;
  26. enum {
  27. SIM_RAMSIZE_8KB = 1,
  28. SIM_RAMSIZE_16KB = 3
  29. } ramsize : 4;
  30. uint32_t _rsvd1 : 2;
  31. enum {
  32. SIM_OSC32KSEL_SYSTEM = 0,
  33. SIM_OSC32KSEL_RTC = 2,
  34. SIM_OSC32KSEL_LPO = 3
  35. } osc32ksel : 2;
  36. uint32_t _rsvd2 : 9;
  37. uint32_t usbvstby : 1;
  38. uint32_t usbsstby : 1;
  39. uint32_t usbregen : 1;
  40. UNION_STRUCT_END;
  41. } sopt1;
  42. struct SIM_SOPT1CFG_t {
  43. UNION_STRUCT_START(32);
  44. uint32_t _rsvd0 : 24;
  45. uint32_t urwe : 1;
  46. uint32_t uvswe : 1;
  47. uint32_t usswe : 1;
  48. uint32_t _rsvd1 : 5;
  49. UNION_STRUCT_END;
  50. } sopt1cfg;
  51. uint32_t _pad0[(0x1004 - 0x8) / 4];
  52. struct SIM_SOPT2_t {
  53. UNION_STRUCT_START(32);
  54. uint32_t _rsvd0 : 4;
  55. enum {
  56. SIM_RTCCLKOUTSEL_1HZ = 0,
  57. SIM_RTCCLKOUTSEL_32KHZ = 1
  58. } rtcclkoutsel : 1;
  59. enum {
  60. SIM_CLKOUTSEL_FLASH = 2,
  61. SIM_CLKOUTSEL_LPO = 3,
  62. SIM_CLKOUTSEL_MCG = 4,
  63. SIM_CLKOUTSEL_RTC = 5,
  64. SIM_CLKOUTSEL_OSC = 6
  65. } clkoutsel : 3;
  66. uint32_t _rsvd1 : 3;
  67. enum {
  68. SIM_PTD7PAD_SINGLE = 0,
  69. SIM_PTD7PAD_DOUBLE = 1
  70. } ptd7pad : 1;
  71. enum {
  72. SIM_TRACECLKSEL_MCG = 0,
  73. SIM_TRACECLKSEL_CORE = 1
  74. } traceclksel : 1;
  75. uint32_t _rsvd2 : 3;
  76. enum {
  77. SIM_PLLFLLSEL_FLL = 0,
  78. SIM_PLLFLLSEL_PLL = 1
  79. } pllfllsel : 1;
  80. uint32_t _rsvd3 : 1;
  81. enum {
  82. SIM_USBSRC_EXTERNAL = 0,
  83. SIM_USBSRC_MCG = 1
  84. } usbsrc : 1;
  85. uint32_t _rsvd4 : 13;
  86. UNION_STRUCT_END;
  87. } sopt2;
  88. uint32_t _pad1;
  89. struct SIM_SOPT4_t {
  90. UNION_STRUCT_START(32);
  91. enum sim_ftmflt {
  92. SIM_FTMFLT_FTM = 0,
  93. SIM_FTMFLT_CMP = 1
  94. } ftm0flt0 : 1;
  95. enum sim_ftmflt ftm0flt1 : 1;
  96. uint32_t _rsvd0 : 2;
  97. enum sim_ftmflt ftm1flt0 : 1;
  98. uint32_t _rsvd1 : 13;
  99. enum {
  100. SIM_FTMCHSRC_FTM = 0,
  101. SIM_FTMCHSRC_CMP0 = 1,
  102. SIM_FTMCHSRC_CMP1 = 2,
  103. SIM_FTMCHSRC_USBSOF = 3
  104. } ftm1ch0src : 2;
  105. uint32_t _rsvd2 : 4;
  106. enum sim_ftmclksel {
  107. SIM_FTMCLKSEL_CLK0 = 0,
  108. SIM_FTMCLKSEL_CLK1 = 1
  109. } ftm0clksel : 1;
  110. enum sim_ftmclksel ftm1clksel : 1;
  111. uint32_t _rsvd3 : 2;
  112. enum {
  113. SIM_FTMTRGSRC_HSCMP0 = 0,
  114. SIM_FTMTRGSRC_FTM1 = 1
  115. } ftm0trg0src : 1;
  116. uint32_t _rsvd4 : 3;
  117. UNION_STRUCT_END;
  118. } sopt4;
  119. struct SIM_SOPT5_t {
  120. UNION_STRUCT_START(32);
  121. enum sim_uarttxsrc {
  122. SIM_UARTTXSRC_UART = 0,
  123. SIM_UARTTXSRC_FTM = 1
  124. } uart0txsrc : 1;
  125. uint32_t _rsvd0 : 1;
  126. enum sim_uartrxsrc {
  127. SIM_UARTRXSRC_UART = 0,
  128. SIM_UARTRXSRC_CMP0 = 1,
  129. SIM_UARTRXSRC_CMP1 = 2
  130. } uart0rxsrc : 2;
  131. enum sim_uarttxsrc uart1txsrc : 1;
  132. uint32_t _rsvd1 : 1;
  133. enum sim_uartrxsrc uart1rxsrc : 2;
  134. uint32_t _rsvd2 : 24;
  135. UNION_STRUCT_END;
  136. } sopt5;
  137. uint32_t _pad2;
  138. struct SIM_SOPT7_t {
  139. UNION_STRUCT_START(32);
  140. enum {
  141. SIM_ADCTRGSEL_PDB = 0,
  142. SIM_ADCTRGSEL_HSCMP0 = 1,
  143. SIM_ADCTRGSEL_HSCMP1 = 2,
  144. SIM_ADCTRGSEL_PIT0 = 4,
  145. SIM_ADCTRGSEL_PIT1 = 5,
  146. SIM_ADCTRGSEL_PIT2 = 6,
  147. SIM_ADCTRGSEL_PIT3 = 7,
  148. SIM_ADCTRGSEL_FTM0 = 8,
  149. SIM_ADCTRGSEL_FTM1 = 9,
  150. SIM_ADCTRGSEL_RTCALARM = 12,
  151. SIM_ADCTRGSEL_RTCSECS = 13,
  152. SIM_ADCTRGSEL_LPTIMER = 14
  153. } adc0trgsel : 4;
  154. enum {
  155. SIM_ADCPRETRGSEL_A = 0,
  156. SIM_ADCPRETRGSEL_B = 1
  157. } adc0pretrgsel : 1;
  158. uint32_t _rsvd0 : 2;
  159. enum {
  160. SIM_ADCALTTRGEN_PDB = 0,
  161. SIM_ADCALTTRGEN_ALT = 1
  162. } adc0alttrgen : 1;
  163. uint32_t _rsvd1 : 24;
  164. UNION_STRUCT_END;
  165. } sopt7;
  166. uint32_t _pad3[(0x1024 - 0x101c) / 4];
  167. struct SIM_SDID_t {
  168. UNION_STRUCT_START(32);
  169. enum {
  170. SIM_PINID_32 = 2,
  171. SIM_PINID_48 = 4,
  172. SIM_PINID_64 = 5
  173. } pinid : 4;
  174. enum {
  175. SIM_FAMID_K10 = 0,
  176. SIM_FAMID_K20 = 1
  177. } famid : 3;
  178. uint32_t _rsvd1 : 5;
  179. uint32_t revid : 4;
  180. uint32_t _rsvd2 : 16;
  181. UNION_STRUCT_END;
  182. } sdid;
  183. uint32_t _pad4[(0x1034 - 0x1028) / 4];
  184. struct SIM_SCGC4_t {
  185. UNION_STRUCT_START(32);
  186. uint32_t _rsvd0 : 1;
  187. uint32_t ewm : 1;
  188. uint32_t cmt : 1;
  189. uint32_t _rsvd1 : 3;
  190. uint32_t i2c0 : 1;
  191. uint32_t _rsvd2 : 3;
  192. uint32_t uart0 : 1;
  193. uint32_t uart1 : 1;
  194. uint32_t uart2 : 1;
  195. uint32_t _rsvd3 : 5;
  196. uint32_t usbotg : 1;
  197. uint32_t cmp : 1;
  198. uint32_t vref : 1;
  199. uint32_t _rsvd4 : 11;
  200. UNION_STRUCT_END;
  201. } scgc4;
  202. struct SIM_SCGC5_t {
  203. UNION_STRUCT_START(32);
  204. uint32_t lptimer : 1;
  205. uint32_t _rsvd0 : 4;
  206. uint32_t tsi : 1;
  207. uint32_t _rsvd1 : 3;
  208. uint32_t porta : 1;
  209. uint32_t portb : 1;
  210. uint32_t portc : 1;
  211. uint32_t portd : 1;
  212. uint32_t porte : 1;
  213. uint32_t _rsvd2 : 18;
  214. UNION_STRUCT_END;
  215. } scgc5;
  216. struct SIM_SCGC6_t {
  217. UNION_STRUCT_START(32);
  218. uint32_t ftfl : 1;
  219. uint32_t dmamux : 1;
  220. uint32_t _rsvd0 : 10;
  221. uint32_t spi0 : 1;
  222. uint32_t _rsvd1 : 2;
  223. uint32_t i2s : 1;
  224. uint32_t _rsvd2 : 2;
  225. uint32_t crc : 1;
  226. uint32_t _rsvd3 : 2;
  227. uint32_t usbdcd : 1;
  228. uint32_t pdb : 1;
  229. uint32_t pit : 1;
  230. uint32_t ftm0 : 1;
  231. uint32_t ftm1 : 1;
  232. uint32_t _rsvd4 : 1;
  233. uint32_t adc0 : 1;
  234. uint32_t _rsvd5 : 1;
  235. uint32_t rtc : 1;
  236. uint32_t _rsvd6 : 2;
  237. UNION_STRUCT_END;
  238. } scgc6;
  239. struct SIM_SCGC7_t {
  240. UNION_STRUCT_START(32);
  241. uint32_t _rsvd0 : 1;
  242. uint32_t dma : 1;
  243. uint32_t _rsvd1 : 30;
  244. UNION_STRUCT_END;
  245. } scgc7;
  246. struct SIM_CLKDIV1_t {
  247. UNION_STRUCT_START(32);
  248. uint32_t _rsvd0 : 16;
  249. uint32_t outdiv4 : 4;
  250. uint32_t _rsvd1 : 4;
  251. uint32_t outdiv2 : 4;
  252. uint32_t outdiv1 : 4;
  253. UNION_STRUCT_END;
  254. } clkdiv1;
  255. struct SIM_CLKDIV2_t {
  256. UNION_STRUCT_START(32);
  257. uint32_t usbfrac : 1;
  258. uint32_t usbdiv : 3;
  259. uint32_t _rsvd0 : 28;
  260. UNION_STRUCT_END;
  261. } clkdiv2;
  262. struct SIM_FCFG1_t {
  263. UNION_STRUCT_START(32);
  264. uint32_t flashdis : 1;
  265. uint32_t flashdoze : 1;
  266. uint32_t _rsvd0 : 6;
  267. /* the following enum is analogous to enum
  268. * FTFL_FLEXNVM_PARTITION in ftfl.h, but that one is padded
  269. * with four 1-bits to make an 8-bit value.
  270. */
  271. enum SIM_FLEXNVM_PARTITION {
  272. SIM_FLEXNVM_DATA_32_EEPROM_0 = 0x0,
  273. SIM_FLEXNVM_DATA_24_EEPROM_8 = 0x1,
  274. SIM_FLEXNVM_DATA_16_EEPROM_16 = 0x2,
  275. SIM_FLEXNVM_DATA_8_EEPROM_24 = 0x9,
  276. SIM_FLEXNVM_DATA_0_EEPROM_32 = 0x3
  277. } depart : 4;
  278. uint32_t _rsvd1 : 4;
  279. enum {
  280. SIM_EESIZE_2KB = 3,
  281. SIM_EESIZE_1KB = 4,
  282. SIM_EESIZE_512B = 5,
  283. SIM_EESIZE_256B = 6,
  284. SIM_EESIZE_128B = 7,
  285. SIM_EESIZE_64B = 8,
  286. SIM_EESIZE_32B = 9,
  287. SIM_EESIZE_0B = 15
  288. } eesize : 4;
  289. uint32_t _rsvd2 : 4;
  290. enum {
  291. SIM_PFSIZE_32KB = 3,
  292. SIM_PFSIZE_64KB = 5,
  293. SIM_PFSIZE_128KB = 7
  294. } pfsize : 4;
  295. enum {
  296. SIM_NVMSIZE_0KB = 0,
  297. SIM_NVMSIZE_32KB = 3
  298. } nvmsize : 4;
  299. UNION_STRUCT_END;
  300. } fcfg1;
  301. struct SIM_FCFG2_t {
  302. UNION_STRUCT_START(32);
  303. uint32_t _rsvd0 : 16;
  304. uint32_t maxaddr1 : 7;
  305. enum {
  306. SIM_PFLSH_FLEXNVM = 0,
  307. SIM_PFLSH_PROGRAM = 1
  308. } pflsh : 1;
  309. uint32_t maxaddr0 : 7;
  310. uint32_t _rsvd1 : 1;
  311. UNION_STRUCT_END;
  312. } fcfg2;
  313. uint32_t uidh;
  314. uint32_t uidmh;
  315. uint32_t uidml;
  316. uint32_t uidl;
  317. };
  318. CTASSERT_SIZE_BYTE(struct SIM_t, 0x1064);
  319. extern volatile struct SIM_t SIM;
  320. #endif