Drv_debug.h 7.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280
  1. #ifndef _DRV_DEBUG_H_
  2. #define _DRV_DEBUG_H_
  3. #include "yc11xx.h"
  4. #include "yc11xx_uart.h"
  5. #include "yc11xx_gpio.h"
  6. #include <string.h>
  7. #define DEF_PRINTHEX
  8. /**
  9. *@brief Debug log buffer address.
  10. */
  11. #define DEBUG_LOG_BUF_START_ADDR reg_map(DEBUG_LOG_BUFFER_START_ADDR)
  12. #define DEBUG_LOG_BUF_INITIAL_FLAG_ADDR reg_map(DEBUG_LOG_INITIAL_FLAG_ADDR)
  13. #define DEBUG_LOG_BUF_LOCK_FLAG_CM0_ADDR reg_map(DEBUG_LOG_LOCK_FLAG_CM0_ADDR)
  14. #define DEBUG_LOG_BUF_LOCK_FLAG_RESPIN_ADDR reg_map(DEBUG_LOG_LOCK_FLAG_RESPIN_ADDR)
  15. #define DEBUG_LOG_BUF_LOCK_VICTIM_ADDR reg_map(DEBUG_LOG_LOCK_VICTIM_ADDR)
  16. #define DEBUG_LOG_BUF_READ_INDEX_ADDR reg_map(DEBUG_LOG_READ_INDEX_ADDR)
  17. #define DEBUG_LOG_BUF_WRITE_INDEX_ADDR reg_map(DEBUG_LOG_WRITE_INDEX_ADDR)
  18. #define LOG_PROTECT_OVERFLOW
  19. // Macro Protocol
  20. #define DEBUG_PROTOCL_TYPE_LOG (0x00) // The basic log type
  21. #define DEBUG_PROTOCL_TYPE_ROUND_BUFFER (0x01) //
  22. #define DEBUG_PROTOCL_TYPE_STRING (0x02) //
  23. #define DEBUG_PROTOCL_PAYLOAD_START_OFFSET (3)
  24. #define DEBUG_PROTOCL_HEADER_SIZE (4)
  25. #define DEBUG_PROTOCL_TOTAL_ALLOW_LENGTH (50)
  26. #define DEBUG_PROTOCL_PAYLOAD_ALLOW_LENGTH (DEBUG_PROTOCL_TOTAL_ALLOW_LENGTH-DEBUG_PROTOCL_HEADER_SIZE)
  27. #define DEBUG_STRING_LOG_SINGLE_LINE_MAX_SIZE (200)
  28. // Macro Log
  29. #define LOG_BUFFER_SIZE (DEBUG_LOG_BUFFER_CNT)
  30. #define LOG_LEVEL_NORMAL (0)
  31. #define LOG_LEVEL_INFORM (1)
  32. #define LOG_LEVEL_CORE (2)
  33. #define LOG_LEVEL_ERROR (3)
  34. #ifdef DEF_PRINTHEX
  35. void write_long_value(uint8_t* addr, uint32_t value);
  36. void print_round_buffer(uint8_t index, uint32_t start_addr, uint32_t end_addr, uint32_t write_addr, uint32_t read_addr);
  37. void uart_txBuffer(uint8_t* send_buf, uint32_t length);
  38. void uart_txChar(unsigned char c);
  39. void init_debugUart(void);
  40. void debugUart_pollTx(void);
  41. void yichip_debug_uart_protocol(uint8_t type, uint8_t length
  42. , uint8_t* uart_send_buf, uint8_t* uart_send_length_ptr);
  43. void init_print_log(void);
  44. bool print_log_buffer_is_empty(void);
  45. void print_log_to_uart(void);
  46. void print_log(uint16_t flag, uint16_t value);
  47. void print_log_get_lock(void);
  48. void print_log_free_lock(void);
  49. void pringt_string_log(char *format, ...);
  50. #define DEBUG_INIT() init_debugUart()
  51. #define DEBUG_LOG(LOG_LEVEL,TYPE_STR,STR,FLAG,VALUE) print_log(FLAG,VALUE)
  52. #define DEBUG_LOG_STRING pringt_string_log
  53. #define DEBUG_LOG_2(LOG_LEVEL,TYPE_STR,STR,FLAG,VALUE_0,VALUE_1) \
  54. print_log(FLAG,(((VALUE_0) & 0xff)<<8)|(((VALUE_1) & 0xff)<<0))
  55. #define DEBUG_LOG_4(LOG_LEVEL,TYPE_STR,STR,FLAG,VALUE_0,VALUE_1,VALUE_2,VALUE_3) \
  56. print_log(FLAG,(((VALUE_0) & 0x0f)<<12)|(((VALUE_1) & 0x0f)<<8)|(((VALUE_2) & 0x0f)<<4)|(((VALUE_3) & 0x0f)<<0))
  57. #define DEBUG_LOG_8(LOG_LEVEL,TYPE_STR,STR,FLAG,VALUE_0,VALUE_1,VALUE_2,VALUE_3,VALUE_4,VALUE_5,VALUE_6,VALUE_7)\
  58. print_log(FLAG,(((VALUE_0) & 0x03)<<14)|(((VALUE_1) & 0x03)<<12)|(((VALUE_2) & 0x03)<<10)|(((VALUE_3) & 0x03)<<8)|(((VALUE_4) & 0x03)<<6)|(((VALUE_5) & 0x03)<<4)|(((VALUE_6) & 0x03)<<2)|(((VALUE_3) & 0x07)<<0))
  59. #define DEBUG_POLLING_PRINT() debugUart_pollTx()
  60. #define DEBUG_LOG_BUFFER_IS_EMPTY() (print_log_buffer_is_empty())
  61. #define DEBUG_LOG_PRINT_ROUND_BUFFER(INDEX, START, END, WRITE, READ) (print_round_buffer(INDEX, START, END, WRITE, READ))
  62. #else
  63. void print_string_empty_fuction(char *format, ...);
  64. #define DEBUG_INIT() {while(0);}
  65. #define DEBUG_LOG_STRING print_string_empty_fuction
  66. #define DEBUG_LOG(LOG_LEVEL,TYPE_STR,STR,FLAG,VALUE) {while(0);}
  67. #define DEBUG_LOG_2(LOG_LEVEL,TYPE_STR,STR,FLAG,VALUE_0,VALUE_1) {while(0);}
  68. #define DEBUG_LOG_4(LOG_LEVEL,TYPE_STR,STR,FLAG,VALUE_0,VALUE_1,VALUE_2,VALUE_3) {while(0);}
  69. #define DEBUG_LOG_8(LOG_LEVEL,TYPE_STR,STR,FLAG,VALUE_0,VALUE_1,VALUE_2,VALUE_3,VALUE_4,VALUE_5,VALUE_6,VALUE_7) {while(0);}
  70. #define DEBUG_POLLING_PRINT() {while(0);}
  71. #define DEBUG_LOG_BUFFER_IS_EMPTY() (true)
  72. #define DEBUG_LOG_PRINT_ROUND_BUFFER(INDEX, START, END, WRITE, READ) {while(0);}
  73. #endif
  74. // Debug Log Point Define, we should use log function by those macro
  75. // To judge use, in respin, we only allow use point 0x1000-0x8FFF
  76. // To judge use, in cm0, we only allow use point 0x9000-0xEFFF
  77. // 0xF000-0xFFFF reserve for some special use case
  78. enum {
  79. // For IPC info
  80. LOG_POINT_9000 = 0x9000,
  81. LOG_POINT_9001 = 0x9001,
  82. LOG_POINT_9002 = 0x9002,
  83. LOG_POINT_9003 = 0x9003,
  84. LOG_POINT_9004 = 0x9004,
  85. LOG_POINT_9005 = 0x9005,
  86. LOG_POINT_9006 = 0x9006,
  87. LOG_POINT_9007 = 0x9007,
  88. LOG_POINT_9008 = 0x9008,
  89. LOG_POINT_9009 = 0x9009,
  90. LOG_POINT_900A = 0x900A,
  91. LOG_POINT_900B = 0x900B,
  92. LOG_POINT_900C = 0x900C,
  93. LOG_POINT_900D = 0x900D,
  94. LOG_POINT_900E = 0x900E,
  95. // For UI info
  96. LOG_POINT_A000 = 0xA000,
  97. LOG_POINT_A001 = 0xA001,
  98. LOG_POINT_A002 = 0xA002,
  99. LOG_POINT_A003 = 0xA003,
  100. LOG_POINT_A004 = 0xA004,
  101. LOG_POINT_A005 = 0xA005,
  102. LOG_POINT_A006 = 0xA006,
  103. LOG_POINT_A007 = 0xA007,
  104. LOG_POINT_A008 = 0xA008,
  105. LOG_POINT_A009 = 0xA009,
  106. LOG_POINT_A00A = 0xA00A,
  107. LOG_POINT_A00B = 0xA00B,
  108. LOG_POINT_A00C = 0xA00C,
  109. LOG_POINT_A00D= 0xA00D,
  110. LOG_POINT_A00E= 0xA00E,
  111. LOG_POINT_A00F = 0xA00F,
  112. // For UI info
  113. LOG_POINT_A010 = 0xA010,
  114. LOG_POINT_A011 = 0xA011,
  115. LOG_POINT_A020 = 0xA020,
  116. LOG_POINT_A030 = 0xA030,
  117. LOG_POINT_A040 = 0xA040,
  118. LOG_POINT_A041 = 0xA041,
  119. LOG_POINT_A042 = 0xA042,
  120. LOG_POINT_A050 = 0xA050,
  121. LOG_POINT_A051= 0xA051,
  122. LOG_POINT_A060 = 0xA060,
  123. LOG_POINT_A061 = 0xA061,
  124. LOG_POINT_A070 = 0xA070,
  125. LOG_POINT_A080 = 0xA080,
  126. LOG_POINT_A081 = 0xA081,
  127. LOG_POINT_A090 = 0xA090,
  128. LOG_POINT_A091 = 0xA091,
  129. LOG_POINT_A092 = 0xA092,
  130. LOG_POINT_A093 = 0xA093,
  131. LOG_POINT_A094 = 0xA094,
  132. LOG_POINT_A095 = 0xA095,
  133. LOG_POINT_A0A0 = 0xA0A0,
  134. LOG_POINT_A0A1 = 0xA0A1,
  135. LOG_POINT_A0A2 = 0xA0A2,
  136. LOG_POINT_A0A3 = 0xA0A3,
  137. LOG_POINT_A0A4 = 0xA0A4,
  138. LOG_POINT_A0A5 = 0xA0A5,
  139. LOG_POINT_A0B0 = 0xA0B0,
  140. LOG_POINT_A0C0 = 0xA0C0,
  141. LOG_POINT_A0C1 = 0xA0C1,
  142. LOG_POINT_A0D0= 0xA0D0,
  143. LOG_POINT_A0E0= 0xA0E0,
  144. LOG_POINT_A0F0 = 0xA0F0,
  145. // For Error Debug, from 0xfff9 to 0xfffe use for cm0
  146. LOG_POINT_FFF9 = 0xFFF9,
  147. };
  148. enum {
  149. // For cm0 error code
  150. ERROR_CODE_WATCH_DOG = 0x0001,
  151. };
  152. // Debug Round Buffer Index Define, one buffer should only use one
  153. enum {
  154. DEBUG_ROUND_BUFFER_INDEX_00 = 0x00,
  155. DEBUG_ROUND_BUFFER_INDEX_01 = 0x01,
  156. DEBUG_ROUND_BUFFER_INDEX_02 = 0x02,
  157. DEBUG_ROUND_BUFFER_INDEX_03 = 0x03,
  158. DEBUG_ROUND_BUFFER_INDEX_04 = 0x04,
  159. DEBUG_ROUND_BUFFER_INDEX_05 = 0x05,
  160. DEBUG_ROUND_BUFFER_INDEX_06 = 0x06,
  161. DEBUG_ROUND_BUFFER_INDEX_07 = 0x07,
  162. DEBUG_ROUND_BUFFER_INDEX_08 = 0x08,
  163. DEBUG_ROUND_BUFFER_INDEX_09 = 0x09,
  164. DEBUG_ROUND_BUFFER_INDEX_0A = 0x0A,
  165. DEBUG_ROUND_BUFFER_INDEX_0B = 0x0B,
  166. };
  167. #define DEMO_TEST_CODE
  168. /*
  169. * debug control, you can switch on (delete 'x' suffix)
  170. * to enable log output and assert mechanism
  171. */
  172. //#define CONFIG_ENABLE_DEBUG
  173. #define UARTBUFSIZE 300
  174. #define UART_TXGPIP 24
  175. /*
  176. * debug level,
  177. * if is DEBUG_LEVEL_DISABLE, no log is allowed output,
  178. * if is DEBUG_LEVEL_ERR, only ERR is allowed output,
  179. * if is DEBUG_LEVEL_INFO, ERR and INFO are allowed output,
  180. * if is DEBUG_LEVEL_DEBUG, all log are allowed output,
  181. */
  182. enum debug_level {
  183. DEBUG_LEVEL_DISABLE = 0,
  184. DEBUG_LEVEL_ERR,
  185. DEBUG_LEVEL_INFO,
  186. DEBUG_LEVEL_DEBUG
  187. };
  188. #endif //_DRV_DEBUG_H_