board.c 8.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191
  1. /*
  2. ChibiOS - Copyright (C) 2015 RedoX https://github.com/RedoXyde
  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. http://www.apache.org/licenses/LICENSE-2.0
  7. Unless required by applicable law or agreed to in writing, software
  8. distributed under the License is distributed on an "AS IS" BASIS,
  9. WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  10. See the License for the specific language governing permissions and
  11. limitations under the License.
  12. */
  13. #include "hal.h"
  14. #if HAL_USE_PAL || defined(__DOXYGEN__)
  15. /**
  16. * @brief PAL setup.
  17. * @details Digital I/O ports static configuration as defined in @p board.h.
  18. * This variable is used by the HAL when initializing the PAL driver.
  19. */
  20. const PALConfig pal_default_config =
  21. {
  22. .ports = {
  23. {
  24. /*
  25. * PORTA setup.
  26. *
  27. * PTA4 - PIN33
  28. * PTA5 - PIN24
  29. * PTA12 - PIN3
  30. * PTA13 - PIN4
  31. *
  32. * PTA18/19 crystal
  33. * PTA0/3 SWD
  34. */
  35. .port = IOPORT1,
  36. .pads = {
  37. PAL_MODE_ALTERNATIVE_7, PAL_MODE_UNCONNECTED, PAL_MODE_UNCONNECTED,
  38. PAL_MODE_ALTERNATIVE_7, PAL_MODE_OUTPUT_PUSHPULL, PAL_MODE_OUTPUT_PUSHPULL,
  39. PAL_MODE_UNCONNECTED, PAL_MODE_UNCONNECTED, PAL_MODE_UNCONNECTED,
  40. PAL_MODE_UNCONNECTED, PAL_MODE_UNCONNECTED, PAL_MODE_UNCONNECTED,
  41. PAL_MODE_OUTPUT_PUSHPULL, PAL_MODE_OUTPUT_PUSHPULL, PAL_MODE_UNCONNECTED,
  42. PAL_MODE_UNCONNECTED, PAL_MODE_UNCONNECTED, PAL_MODE_UNCONNECTED,
  43. PAL_MODE_INPUT_ANALOG, PAL_MODE_INPUT_ANALOG, PAL_MODE_UNCONNECTED,
  44. PAL_MODE_UNCONNECTED, PAL_MODE_UNCONNECTED, PAL_MODE_UNCONNECTED,
  45. PAL_MODE_UNCONNECTED, PAL_MODE_UNCONNECTED, PAL_MODE_UNCONNECTED,
  46. PAL_MODE_UNCONNECTED, PAL_MODE_UNCONNECTED, PAL_MODE_UNCONNECTED,
  47. PAL_MODE_UNCONNECTED, PAL_MODE_UNCONNECTED,
  48. },
  49. },
  50. {
  51. /*
  52. * PORTB setup.
  53. *
  54. * PTB0 - PIN16
  55. * PTB1 - PIN17
  56. * PTB2 - PIN19
  57. * PTB3 - PIN18
  58. * PTB16 - PIN0 - UART0_TX
  59. * PTB17 - PIN1 - UART0_RX
  60. * PTB18 - PIN32
  61. * PTB19 - PIN25
  62. */
  63. .port = IOPORT2,
  64. .pads = {
  65. PAL_MODE_OUTPUT_PUSHPULL, PAL_MODE_OUTPUT_PUSHPULL, PAL_MODE_OUTPUT_PUSHPULL,
  66. PAL_MODE_OUTPUT_PUSHPULL, PAL_MODE_UNCONNECTED, PAL_MODE_UNCONNECTED,
  67. PAL_MODE_UNCONNECTED, PAL_MODE_UNCONNECTED, PAL_MODE_UNCONNECTED,
  68. PAL_MODE_UNCONNECTED, PAL_MODE_UNCONNECTED, PAL_MODE_UNCONNECTED,
  69. PAL_MODE_UNCONNECTED, PAL_MODE_UNCONNECTED, PAL_MODE_UNCONNECTED,
  70. PAL_MODE_UNCONNECTED, PAL_MODE_ALTERNATIVE_3, PAL_MODE_ALTERNATIVE_3,
  71. PAL_MODE_OUTPUT_PUSHPULL, PAL_MODE_OUTPUT_PUSHPULL, PAL_MODE_UNCONNECTED,
  72. PAL_MODE_UNCONNECTED, PAL_MODE_UNCONNECTED, PAL_MODE_UNCONNECTED,
  73. PAL_MODE_UNCONNECTED, PAL_MODE_UNCONNECTED, PAL_MODE_UNCONNECTED,
  74. PAL_MODE_UNCONNECTED, PAL_MODE_UNCONNECTED, PAL_MODE_UNCONNECTED,
  75. PAL_MODE_UNCONNECTED, PAL_MODE_UNCONNECTED,
  76. },
  77. },
  78. {
  79. /*
  80. * PORTC setup.
  81. *
  82. * PTC0 - PIN15
  83. * PTC1 - PIN22
  84. * PTC2 - PIN23
  85. * PTC3 - PIN9
  86. * PTC4 - PIN10
  87. * PTC5 - PIN13
  88. * PTC6 - PIN11
  89. * PTC7 - PIN12
  90. * PTC8 - PIN28
  91. * PTC9 - PIN27
  92. * PTC10 - PIN29
  93. * PTC11 - PIN30
  94. */
  95. .port = IOPORT3,
  96. .pads = {
  97. PAL_MODE_OUTPUT_PUSHPULL, PAL_MODE_OUTPUT_PUSHPULL, PAL_MODE_OUTPUT_PUSHPULL,
  98. PAL_MODE_OUTPUT_PUSHPULL, PAL_MODE_OUTPUT_PUSHPULL, PAL_MODE_OUTPUT_PUSHPULL,
  99. PAL_MODE_OUTPUT_PUSHPULL, PAL_MODE_OUTPUT_PUSHPULL, PAL_MODE_OUTPUT_PUSHPULL,
  100. PAL_MODE_OUTPUT_PUSHPULL, PAL_MODE_OUTPUT_PUSHPULL, PAL_MODE_OUTPUT_PUSHPULL,
  101. PAL_MODE_UNCONNECTED, PAL_MODE_UNCONNECTED, PAL_MODE_UNCONNECTED,
  102. PAL_MODE_UNCONNECTED, PAL_MODE_UNCONNECTED, PAL_MODE_UNCONNECTED,
  103. PAL_MODE_UNCONNECTED, PAL_MODE_UNCONNECTED, PAL_MODE_UNCONNECTED,
  104. PAL_MODE_UNCONNECTED, PAL_MODE_UNCONNECTED, PAL_MODE_UNCONNECTED,
  105. PAL_MODE_UNCONNECTED, PAL_MODE_UNCONNECTED, PAL_MODE_UNCONNECTED,
  106. PAL_MODE_UNCONNECTED, PAL_MODE_UNCONNECTED, PAL_MODE_UNCONNECTED,
  107. PAL_MODE_UNCONNECTED, PAL_MODE_UNCONNECTED,
  108. },
  109. },
  110. {
  111. /*
  112. * PORTD setup.
  113. *
  114. * PTD0 - PIN2
  115. * PTD1 - PIN14
  116. * PTD2 - PIN7
  117. * PTD3 - PIN8
  118. * PTD4 - PIN6
  119. * PTD5 - PIN20
  120. * PTD6 - PIN21
  121. * PTD7 - PIN5
  122. */
  123. .port = IOPORT4,
  124. .pads = {
  125. PAL_MODE_OUTPUT_PUSHPULL, PAL_MODE_OUTPUT_PUSHPULL, PAL_MODE_OUTPUT_PUSHPULL,
  126. PAL_MODE_OUTPUT_PUSHPULL, PAL_MODE_OUTPUT_PUSHPULL, PAL_MODE_OUTPUT_PUSHPULL,
  127. PAL_MODE_OUTPUT_PUSHPULL, PAL_MODE_OUTPUT_PUSHPULL, PAL_MODE_UNCONNECTED,
  128. PAL_MODE_UNCONNECTED, PAL_MODE_UNCONNECTED, PAL_MODE_UNCONNECTED,
  129. PAL_MODE_UNCONNECTED, PAL_MODE_UNCONNECTED, PAL_MODE_UNCONNECTED,
  130. PAL_MODE_UNCONNECTED, PAL_MODE_UNCONNECTED, PAL_MODE_UNCONNECTED,
  131. PAL_MODE_UNCONNECTED, PAL_MODE_UNCONNECTED, PAL_MODE_UNCONNECTED,
  132. PAL_MODE_UNCONNECTED, PAL_MODE_UNCONNECTED, PAL_MODE_UNCONNECTED,
  133. PAL_MODE_UNCONNECTED, PAL_MODE_UNCONNECTED, PAL_MODE_UNCONNECTED,
  134. PAL_MODE_UNCONNECTED, PAL_MODE_UNCONNECTED, PAL_MODE_UNCONNECTED,
  135. PAL_MODE_UNCONNECTED, PAL_MODE_UNCONNECTED,
  136. },
  137. },
  138. {
  139. /*
  140. * PORTE setup.
  141. *
  142. * PTE0 - PIN31
  143. * PTE1 - PIN26
  144. */
  145. .port = IOPORT5,
  146. .pads = {
  147. PAL_MODE_OUTPUT_PUSHPULL, PAL_MODE_OUTPUT_PUSHPULL, PAL_MODE_UNCONNECTED,
  148. PAL_MODE_UNCONNECTED, PAL_MODE_UNCONNECTED, PAL_MODE_UNCONNECTED,
  149. PAL_MODE_UNCONNECTED, PAL_MODE_UNCONNECTED, PAL_MODE_UNCONNECTED,
  150. PAL_MODE_UNCONNECTED, PAL_MODE_UNCONNECTED, PAL_MODE_UNCONNECTED,
  151. PAL_MODE_UNCONNECTED, PAL_MODE_UNCONNECTED, PAL_MODE_UNCONNECTED,
  152. PAL_MODE_UNCONNECTED, PAL_MODE_UNCONNECTED, PAL_MODE_UNCONNECTED,
  153. PAL_MODE_UNCONNECTED, PAL_MODE_UNCONNECTED, PAL_MODE_UNCONNECTED,
  154. PAL_MODE_UNCONNECTED, PAL_MODE_UNCONNECTED, PAL_MODE_UNCONNECTED,
  155. PAL_MODE_UNCONNECTED, PAL_MODE_UNCONNECTED, PAL_MODE_UNCONNECTED,
  156. PAL_MODE_UNCONNECTED, PAL_MODE_UNCONNECTED, PAL_MODE_UNCONNECTED,
  157. PAL_MODE_UNCONNECTED, PAL_MODE_UNCONNECTED,
  158. },
  159. },
  160. },
  161. };
  162. #endif
  163. // NOTE: This value comes from kiibohd/controller and is the location of a value
  164. // which needs to be checked before disabling the watchdog (which happens in
  165. // k20x_clock_init)
  166. #define WDOG_TMROUTL *(volatile uint16_t *)0x40052012
  167. /**
  168. * @brief Early initialization code.
  169. * @details This initialization must be performed just after stack setup
  170. * and before any other initialization.
  171. */
  172. void __early_init(void) {
  173. // This is a dirty hack and should only be used as a temporary fix until this
  174. // is upstreamed.
  175. while (WDOG_TMROUTL < 2); // Must wait for WDOG timer if already running, before jumping
  176. k20x_clock_init();
  177. }
  178. /**
  179. * @brief Board-specific initialization code.
  180. * @todo Add your board-specific code, if any.
  181. */
  182. void boardInit(void) {
  183. }