Files
2025-12-03 11:12:34 +08:00

92 lines
3.1 KiB
C

#ifndef __DEBUG_H__
#define __DEBUG_H__
typedef enum etm_detect_mode {
CPU_SFR_DETECT_MODE = 1,
CPU_RD_BUS_DETECT_MODE,
CPU_WR_BUS_DETECT_MODE,
CPU_RD_WR_BUS_DETECT_MODE,
} ETM_DETECT_MODE;
#define CDBG_IDx(n, id) ((1<<(n+4)) | (id<<(n*8+8)))
#define CDBG_INV (1<<7)
#define CDBG_PEN (1<<3)
#define CDBG_XEN (1<<2)
#define CDBG_WEN (1<<1)
#define CDBG_REN (1<<0)
void debug_init();
void exception_analyze();
/********************************** DUBUG SFR *****************************************/
u32 get_dev_id(char *name);
/* ---------------------------------------------------------------------------- */
/**
* @brief Memory权限保护设置
*
* @param idx: 保护框索引, 范围: 0 ~ 3, 目前系统默认使用0和3, 用户可用1和2
* @param begin: Memory开始地址
* @param end: Memory结束地址
* @param inv: 0: 保护框内, 1: 保护框外
* @param format: "Cxwr0rw1rw2rw3rw", CPU:外设0:外设1:外设2:外设3,
* @param ...: 外设ID号索引, 如: DBG_EQ, 见debug.h
*/
/* ---------------------------------------------------------------------------- */
void mpu_set(int idx, u32 begin, u32 end, u32 inv, const char *format, ...);
/* ---------------------------------------------------------------------------- */
/**
* @brief 取消指定框的mpu保护
*
* @param idx: 保护框索引号
*/
/* ---------------------------------------------------------------------------- */
void mpu_disable_by_index(u8 idx);
/* ---------------------------------------------------------------------------- */
/**
* @brief :取消所有保护框mpu保护
*/
/* ---------------------------------------------------------------------------- */
void mpu_diasble(void);
/* ---------------------------------------------------------------------------- */
/**
* @brief flash PC范围设置为Flash外区域, 调用该接口后调用flash里的函数将触发异常
*/
/* ---------------------------------------------------------------------------- */
void flash_pc_limit_disable();
/* ---------------------------------------------------------------------------- */
/**
* @brief flash PC范围限制恢复为flash代码区域, 调用该接口后可调用flash里的函数
*/
/* ---------------------------------------------------------------------------- */
void flash_pc_limit_enable();
/* ---------------------------------------------------------------------------- */
/**
* @brief CPU内存监测点设置
*
* @param low_addr: 监测区域起始地址
* @param high_addr: 监测区域结束地址
* @param low_limit_value: 监测内存下限值
* @param high_limit_value: 监测内存上限值
* @param mode: 监测模式(ETM_DETECT_MODE)
* @param limit_range_out: 0(框内触发中断) 1(框外触发中断)
* @param trigger_exception: 0(触发普通中断) 1(触发异常中断)
*/
/* ---------------------------------------------------------------------------- */
void cpu_etm_range_value_limit_detect(void *low_addr, void *high_addr, u32 low_limit_value, u32 high_limit_value, int mode, int limit_range_out, int trigger_exception);
#endif