dap_config.h 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221
  1. // SPDX-License-Identifier: BSD-3-Clause
  2. // Copyright (c) 2016-2022, Alex Taradov <alex@taradov.com>. All rights reserved.
  3. #ifndef _DAP_CONFIG_H_
  4. #define _DAP_CONFIG_H_
  5. /*- Includes ----------------------------------------------------------------*/
  6. #include "samd21.h"
  7. #include "hal_gpio.h"
  8. /*- Definitions -------------------------------------------------------------*/
  9. HAL_GPIO_PIN(SWCLK_TCK, B, 11)
  10. HAL_GPIO_PIN(SWDIO_TMS, B, 17)
  11. HAL_GPIO_PIN(TDI, A, 8)
  12. HAL_GPIO_PIN(TDO, A, 9)
  13. HAL_GPIO_PIN(nTRST, B, 23)
  14. HAL_GPIO_PIN(nRESET, A, 2)
  15. HAL_GPIO_PIN(LED, B, 30)
  16. #define DAP_CONFIG_ENABLE_JTAG
  17. #define DAP_CONFIG_DEFAULT_PORT DAP_PORT_SWD
  18. #define DAP_CONFIG_DEFAULT_CLOCK 1000000 // Hz
  19. #define DAP_CONFIG_PACKET_SIZE 64
  20. #define DAP_CONFIG_PACKET_COUNT 1
  21. #define DAP_CONFIG_JTAG_DEV_COUNT 8
  22. // DAP_CONFIG_PRODUCT_STR must contain "CMSIS-DAP" to be compatible with the standard
  23. #define DAP_CONFIG_VENDOR_STR "Alex Taradov"
  24. #define DAP_CONFIG_PRODUCT_STR "Generic CMSIS-DAP Adapter"
  25. #define DAP_CONFIG_SER_NUM_STR "123456"
  26. #define DAP_CONFIG_CMSIS_DAP_VER_STR "1.3.0"
  27. //#define DAP_CONFIG_RESET_TARGET_FN target_specific_reset_function
  28. //#define DAP_CONFIG_VENDOR_FN vendor_command_handler_function
  29. // Attribute to use for performance-critical functions
  30. #define DAP_CONFIG_PERFORMANCE_ATTR __attribute__((section(".ramfunc")))
  31. // A value at which dap_clock_test() produces 1 kHz output on the SWCLK pin
  32. #define DAP_CONFIG_DELAY_CONSTANT 4700
  33. // A threshold for switching to fast clock (no added delays)
  34. // This is the frequency produced by dap_clock_test(1) on the SWCLK pin
  35. #define DAP_CONFIG_FAST_CLOCK 3600000 // Hz
  36. /*- Implementations ---------------------------------------------------------*/
  37. //-----------------------------------------------------------------------------
  38. static inline void DAP_CONFIG_SWCLK_TCK_write(int value)
  39. {
  40. HAL_GPIO_SWCLK_TCK_write(value);
  41. }
  42. //-----------------------------------------------------------------------------
  43. static inline void DAP_CONFIG_SWDIO_TMS_write(int value)
  44. {
  45. HAL_GPIO_SWDIO_TMS_write(value);
  46. }
  47. //-----------------------------------------------------------------------------
  48. static inline void DAP_CONFIG_TDI_write(int value)
  49. {
  50. HAL_GPIO_TDI_write(value);
  51. }
  52. //-----------------------------------------------------------------------------
  53. static inline void DAP_CONFIG_TDO_write(int value)
  54. {
  55. HAL_GPIO_TDO_write(value);
  56. }
  57. //-----------------------------------------------------------------------------
  58. static inline void DAP_CONFIG_nTRST_write(int value)
  59. {
  60. (void)value;
  61. }
  62. //-----------------------------------------------------------------------------
  63. static inline void DAP_CONFIG_nRESET_write(int value)
  64. {
  65. HAL_GPIO_nRESET_write(value);
  66. }
  67. //-----------------------------------------------------------------------------
  68. static inline int DAP_CONFIG_SWCLK_TCK_read(void)
  69. {
  70. return HAL_GPIO_SWCLK_TCK_read();
  71. }
  72. //-----------------------------------------------------------------------------
  73. static inline int DAP_CONFIG_SWDIO_TMS_read(void)
  74. {
  75. return HAL_GPIO_SWDIO_TMS_read();
  76. }
  77. //-----------------------------------------------------------------------------
  78. static inline int DAP_CONFIG_TDO_read(void)
  79. {
  80. return HAL_GPIO_TDO_read();
  81. }
  82. //-----------------------------------------------------------------------------
  83. static inline int DAP_CONFIG_TDI_read(void)
  84. {
  85. return HAL_GPIO_TDI_read();
  86. }
  87. //-----------------------------------------------------------------------------
  88. static inline int DAP_CONFIG_nTRST_read(void)
  89. {
  90. return 0;
  91. }
  92. //-----------------------------------------------------------------------------
  93. static inline int DAP_CONFIG_nRESET_read(void)
  94. {
  95. return HAL_GPIO_nRESET_read();
  96. }
  97. //-----------------------------------------------------------------------------
  98. static inline void DAP_CONFIG_SWCLK_TCK_set(void)
  99. {
  100. HAL_GPIO_SWCLK_TCK_set();
  101. }
  102. //-----------------------------------------------------------------------------
  103. static inline void DAP_CONFIG_SWCLK_TCK_clr(void)
  104. {
  105. HAL_GPIO_SWCLK_TCK_clr();
  106. }
  107. //-----------------------------------------------------------------------------
  108. static inline void DAP_CONFIG_SWDIO_TMS_in(void)
  109. {
  110. HAL_GPIO_SWDIO_TMS_in();
  111. }
  112. //-----------------------------------------------------------------------------
  113. static inline void DAP_CONFIG_SWDIO_TMS_out(void)
  114. {
  115. HAL_GPIO_SWDIO_TMS_out();
  116. }
  117. //-----------------------------------------------------------------------------
  118. static inline void DAP_CONFIG_SETUP(void)
  119. {
  120. HAL_GPIO_SWCLK_TCK_in();
  121. HAL_GPIO_SWDIO_TMS_in();
  122. HAL_GPIO_nRESET_in();
  123. HAL_GPIO_TDO_in();
  124. HAL_GPIO_TDI_in();
  125. }
  126. //-----------------------------------------------------------------------------
  127. static inline void DAP_CONFIG_DISCONNECT(void)
  128. {
  129. HAL_GPIO_SWCLK_TCK_in();
  130. HAL_GPIO_SWDIO_TMS_in();
  131. HAL_GPIO_nRESET_in();
  132. HAL_GPIO_TDO_in();
  133. HAL_GPIO_TDI_in();
  134. }
  135. //-----------------------------------------------------------------------------
  136. static inline void DAP_CONFIG_CONNECT_SWD(void)
  137. {
  138. HAL_GPIO_SWDIO_TMS_out();
  139. HAL_GPIO_SWDIO_TMS_set();
  140. HAL_GPIO_SWCLK_TCK_out();
  141. HAL_GPIO_SWCLK_TCK_set();
  142. HAL_GPIO_nRESET_out();
  143. HAL_GPIO_nRESET_set();
  144. HAL_GPIO_TDO_in();
  145. HAL_GPIO_TDI_in();
  146. }
  147. //-----------------------------------------------------------------------------
  148. static inline void DAP_CONFIG_CONNECT_JTAG(void)
  149. {
  150. HAL_GPIO_SWDIO_TMS_out();
  151. HAL_GPIO_SWDIO_TMS_set();
  152. HAL_GPIO_SWCLK_TCK_out();
  153. HAL_GPIO_SWCLK_TCK_set();
  154. HAL_GPIO_TDO_in();
  155. HAL_GPIO_TDI_out();
  156. HAL_GPIO_TDI_set();
  157. HAL_GPIO_nRESET_out();
  158. HAL_GPIO_nRESET_set();
  159. }
  160. //-----------------------------------------------------------------------------
  161. static inline void DAP_CONFIG_LED(int index, int state)
  162. {
  163. if (0 == index)
  164. HAL_GPIO_LED_write(!state);
  165. }
  166. //-----------------------------------------------------------------------------
  167. __attribute__((always_inline))
  168. static inline void DAP_CONFIG_DELAY(uint32_t cycles)
  169. {
  170. asm volatile (
  171. "1: sub %[cycles], %[cycles], #1 \n"
  172. " bne 1b \n"
  173. : [cycles] "+l"(cycles)
  174. );
  175. }
  176. #endif // _DAP_CONFIG_H_