123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280 |
- #ifndef _DRV_DEBUG_H_
- #define _DRV_DEBUG_H_
- #include "yc11xx.h"
- #include "yc11xx_uart.h"
- #include "yc11xx_gpio.h"
- #include <string.h>
- #define DEF_PRINTHEX
- /**
- *@brief Debug log buffer address.
- */
- #define DEBUG_LOG_BUF_START_ADDR reg_map(DEBUG_LOG_BUFFER_START_ADDR)
- #define DEBUG_LOG_BUF_INITIAL_FLAG_ADDR reg_map(DEBUG_LOG_INITIAL_FLAG_ADDR)
- #define DEBUG_LOG_BUF_LOCK_FLAG_CM0_ADDR reg_map(DEBUG_LOG_LOCK_FLAG_CM0_ADDR)
- #define DEBUG_LOG_BUF_LOCK_FLAG_RESPIN_ADDR reg_map(DEBUG_LOG_LOCK_FLAG_RESPIN_ADDR)
- #define DEBUG_LOG_BUF_LOCK_VICTIM_ADDR reg_map(DEBUG_LOG_LOCK_VICTIM_ADDR)
- #define DEBUG_LOG_BUF_READ_INDEX_ADDR reg_map(DEBUG_LOG_READ_INDEX_ADDR)
- #define DEBUG_LOG_BUF_WRITE_INDEX_ADDR reg_map(DEBUG_LOG_WRITE_INDEX_ADDR)
- #define LOG_PROTECT_OVERFLOW
- // Macro Protocol
- #define DEBUG_PROTOCL_TYPE_LOG (0x00) // The basic log type
- #define DEBUG_PROTOCL_TYPE_ROUND_BUFFER (0x01) //
- #define DEBUG_PROTOCL_TYPE_STRING (0x02) //
- #define DEBUG_PROTOCL_PAYLOAD_START_OFFSET (3)
- #define DEBUG_PROTOCL_HEADER_SIZE (4)
- #define DEBUG_PROTOCL_TOTAL_ALLOW_LENGTH (50)
- #define DEBUG_PROTOCL_PAYLOAD_ALLOW_LENGTH (DEBUG_PROTOCL_TOTAL_ALLOW_LENGTH-DEBUG_PROTOCL_HEADER_SIZE)
- #define DEBUG_STRING_LOG_SINGLE_LINE_MAX_SIZE (200)
- // Macro Log
- #define LOG_BUFFER_SIZE (DEBUG_LOG_BUFFER_CNT)
- #define LOG_LEVEL_NORMAL (0)
- #define LOG_LEVEL_INFORM (1)
- #define LOG_LEVEL_CORE (2)
- #define LOG_LEVEL_ERROR (3)
- #ifdef DEF_PRINTHEX
- void write_long_value(uint8_t* addr, uint32_t value);
- void print_round_buffer(uint8_t index, uint32_t start_addr, uint32_t end_addr, uint32_t write_addr, uint32_t read_addr);
- void uart_txBuffer(uint8_t* send_buf, uint32_t length);
- void uart_txChar(unsigned char c);
- void init_debugUart(void);
- void debugUart_pollTx(void);
- void yichip_debug_uart_protocol(uint8_t type, uint8_t length
- , uint8_t* uart_send_buf, uint8_t* uart_send_length_ptr);
- void init_print_log(void);
- bool print_log_buffer_is_empty(void);
- void print_log_to_uart(void);
- void print_log(uint16_t flag, uint16_t value);
- void print_log_get_lock(void);
- void print_log_free_lock(void);
- void pringt_string_log(char *format, ...);
- #define DEBUG_INIT() init_debugUart()
- #define DEBUG_LOG(LOG_LEVEL,TYPE_STR,STR,FLAG,VALUE) print_log(FLAG,VALUE)
- #define DEBUG_LOG_STRING pringt_string_log
- #define DEBUG_LOG_2(LOG_LEVEL,TYPE_STR,STR,FLAG,VALUE_0,VALUE_1) \
- print_log(FLAG,(((VALUE_0) & 0xff)<<8)|(((VALUE_1) & 0xff)<<0))
- #define DEBUG_LOG_4(LOG_LEVEL,TYPE_STR,STR,FLAG,VALUE_0,VALUE_1,VALUE_2,VALUE_3) \
- print_log(FLAG,(((VALUE_0) & 0x0f)<<12)|(((VALUE_1) & 0x0f)<<8)|(((VALUE_2) & 0x0f)<<4)|(((VALUE_3) & 0x0f)<<0))
- #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)\
- 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))
- #define DEBUG_POLLING_PRINT() debugUart_pollTx()
- #define DEBUG_LOG_BUFFER_IS_EMPTY() (print_log_buffer_is_empty())
- #define DEBUG_LOG_PRINT_ROUND_BUFFER(INDEX, START, END, WRITE, READ) (print_round_buffer(INDEX, START, END, WRITE, READ))
- #else
- void print_string_empty_fuction(char *format, ...);
- #define DEBUG_INIT() {while(0);}
- #define DEBUG_LOG_STRING print_string_empty_fuction
- #define DEBUG_LOG(LOG_LEVEL,TYPE_STR,STR,FLAG,VALUE) {while(0);}
- #define DEBUG_LOG_2(LOG_LEVEL,TYPE_STR,STR,FLAG,VALUE_0,VALUE_1) {while(0);}
- #define DEBUG_LOG_4(LOG_LEVEL,TYPE_STR,STR,FLAG,VALUE_0,VALUE_1,VALUE_2,VALUE_3) {while(0);}
- #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);}
- #define DEBUG_POLLING_PRINT() {while(0);}
- #define DEBUG_LOG_BUFFER_IS_EMPTY() (true)
- #define DEBUG_LOG_PRINT_ROUND_BUFFER(INDEX, START, END, WRITE, READ) {while(0);}
- #endif
- // Debug Log Point Define, we should use log function by those macro
- // To judge use, in respin, we only allow use point 0x1000-0x8FFF
- // To judge use, in cm0, we only allow use point 0x9000-0xEFFF
- // 0xF000-0xFFFF reserve for some special use case
- enum {
- // For IPC info
- LOG_POINT_9000 = 0x9000,
- LOG_POINT_9001 = 0x9001,
- LOG_POINT_9002 = 0x9002,
- LOG_POINT_9003 = 0x9003,
- LOG_POINT_9004 = 0x9004,
- LOG_POINT_9005 = 0x9005,
- LOG_POINT_9006 = 0x9006,
- LOG_POINT_9007 = 0x9007,
- LOG_POINT_9008 = 0x9008,
- LOG_POINT_9009 = 0x9009,
- LOG_POINT_900A = 0x900A,
- LOG_POINT_900B = 0x900B,
- LOG_POINT_900C = 0x900C,
- LOG_POINT_900D = 0x900D,
- LOG_POINT_900E = 0x900E,
-
- // For UI info
- LOG_POINT_A000 = 0xA000,
- LOG_POINT_A001 = 0xA001,
- LOG_POINT_A002 = 0xA002,
- LOG_POINT_A003 = 0xA003,
- LOG_POINT_A004 = 0xA004,
- LOG_POINT_A005 = 0xA005,
- LOG_POINT_A006 = 0xA006,
- LOG_POINT_A007 = 0xA007,
- LOG_POINT_A008 = 0xA008,
- LOG_POINT_A009 = 0xA009,
- LOG_POINT_A00A = 0xA00A,
- LOG_POINT_A00B = 0xA00B,
- LOG_POINT_A00C = 0xA00C,
- LOG_POINT_A00D= 0xA00D,
- LOG_POINT_A00E= 0xA00E,
- LOG_POINT_A00F = 0xA00F,
-
- // For UI info
- LOG_POINT_A010 = 0xA010,
- LOG_POINT_A011 = 0xA011,
- LOG_POINT_A020 = 0xA020,
- LOG_POINT_A030 = 0xA030,
- LOG_POINT_A040 = 0xA040,
- LOG_POINT_A041 = 0xA041,
- LOG_POINT_A042 = 0xA042,
- LOG_POINT_A050 = 0xA050,
- LOG_POINT_A051= 0xA051,
- LOG_POINT_A060 = 0xA060,
- LOG_POINT_A061 = 0xA061,
- LOG_POINT_A070 = 0xA070,
- LOG_POINT_A080 = 0xA080,
- LOG_POINT_A081 = 0xA081,
- LOG_POINT_A090 = 0xA090,
- LOG_POINT_A091 = 0xA091,
- LOG_POINT_A092 = 0xA092,
- LOG_POINT_A093 = 0xA093,
- LOG_POINT_A094 = 0xA094,
- LOG_POINT_A095 = 0xA095,
- LOG_POINT_A0A0 = 0xA0A0,
- LOG_POINT_A0A1 = 0xA0A1,
- LOG_POINT_A0A2 = 0xA0A2,
- LOG_POINT_A0A3 = 0xA0A3,
- LOG_POINT_A0A4 = 0xA0A4,
- LOG_POINT_A0A5 = 0xA0A5,
- LOG_POINT_A0B0 = 0xA0B0,
- LOG_POINT_A0C0 = 0xA0C0,
- LOG_POINT_A0C1 = 0xA0C1,
- LOG_POINT_A0D0= 0xA0D0,
- LOG_POINT_A0E0= 0xA0E0,
- LOG_POINT_A0F0 = 0xA0F0,
- // For Error Debug, from 0xfff9 to 0xfffe use for cm0
- LOG_POINT_FFF9 = 0xFFF9,
- };
- enum {
- // For cm0 error code
- ERROR_CODE_WATCH_DOG = 0x0001,
- };
- // Debug Round Buffer Index Define, one buffer should only use one
- enum {
- DEBUG_ROUND_BUFFER_INDEX_00 = 0x00,
- DEBUG_ROUND_BUFFER_INDEX_01 = 0x01,
- DEBUG_ROUND_BUFFER_INDEX_02 = 0x02,
- DEBUG_ROUND_BUFFER_INDEX_03 = 0x03,
- DEBUG_ROUND_BUFFER_INDEX_04 = 0x04,
- DEBUG_ROUND_BUFFER_INDEX_05 = 0x05,
- DEBUG_ROUND_BUFFER_INDEX_06 = 0x06,
- DEBUG_ROUND_BUFFER_INDEX_07 = 0x07,
- DEBUG_ROUND_BUFFER_INDEX_08 = 0x08,
- DEBUG_ROUND_BUFFER_INDEX_09 = 0x09,
- DEBUG_ROUND_BUFFER_INDEX_0A = 0x0A,
- DEBUG_ROUND_BUFFER_INDEX_0B = 0x0B,
- };
- #define DEMO_TEST_CODE
- /*
- * debug control, you can switch on (delete 'x' suffix)
- * to enable log output and assert mechanism
- */
- //#define CONFIG_ENABLE_DEBUG
- #define UARTBUFSIZE 300
- #define UART_TXGPIP 24
- /*
- * debug level,
- * if is DEBUG_LEVEL_DISABLE, no log is allowed output,
- * if is DEBUG_LEVEL_ERR, only ERR is allowed output,
- * if is DEBUG_LEVEL_INFO, ERR and INFO are allowed output,
- * if is DEBUG_LEVEL_DEBUG, all log are allowed output,
- */
- enum debug_level {
- DEBUG_LEVEL_DISABLE = 0,
- DEBUG_LEVEL_ERR,
- DEBUG_LEVEL_INFO,
- DEBUG_LEVEL_DEBUG
- };
- #endif //_DRV_DEBUG_H_
|