#ifndef _DRV_DEBUG_H_ #define _DRV_DEBUG_H_ #include "yc11xx.h" #include "yc11xx_uart.h" #include "yc11xx_gpio.h" #include #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_