mcu_ab568x/app/platform/libs/api_sys.h
2025-05-30 18:03:10 +08:00

107 lines
4.2 KiB
C
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#ifndef _API_SYS_H_
#define _API_SYS_H_
#define IRQ_TMR1_VECTOR 4
#define IRQ_TMR2_VECTOR 5
#define IRQ_IRRX_VECTOR 6
#define IRQ_QDEC_VECTOR 6
#define IRQ_UART_VECTOR 14
#define IRQ_HSUART_VECTOR 15
#define IRQ_TMR3_VECTOR 16
#define IRQ_TMR4_VECTOR 17
#define IRQ_TMR5_VECTOR 18
#define IRQ_SPI_VECTOR 20
#define IRQ_PORT_VECTOR 26
#define IRQ_DESPI_VECTOR 27
#define IRQ_I2C_VECTOR 29
#define IRQ_CTP_VECTOR 30
#define IRQ_TE_TICK_VECTOR 31
typedef enum RESTART_CAUSE_TYPE_ {
RESTART_WDT = 0, //看门狗复位
RESTART_SW, //软件复位
RESTART_WK10S, //长按10s复位
RESTART_VUSB, //充电复位开机
RESTART_WKUP, //按键开机
RESTART_FIRST_ON, //第一次上电开机
RESTART_UNKNOWN, //未知开机,保留项目
}RESTART_CAUSE_TYPE;
typedef struct {
u8 vbg; //trim到0.6V的寄存器配置值 RI_BGTRIM, RTCCON8[28:24]
u8 vbat; //trim到4.2V的寄存器配置值 RI_BGCH_TRIM, RTCCON8[14 10]
u16 chg_icoef; //充电电流换算系数
u16 vbg_volt; //vbg目标值
u16 vbat_coef;
u8 resv[4];
} sys_trim_t;
extern sys_trim_t sys_trim;
typedef void (*isr_t)(void);
extern u16 tmr5ms_cnt;
void sys_set_tmr_enable(bool tmr5ms_en, bool tmr1ms_en);
u32 sys_get_rand_key(void);
void xosc_init(void);
/*
* pr = 1, 高优先级中断, 中断入口函数isr放公共区且要加FIQ, 例如:
* AT(.com_text.isr) FIQ
* void timer3_isr(void) {}
*
* pr = 0, 低优先级中断,不用加FIQ, 函数放入公共区, 例如:
* AT(.com_text.isr)
* void timer3_isr(void) {}
*
* 中断函数需要尽量精简,否则影响系统效率。推荐用低优先级中断,需要很高响应速度时才用高优先级中断
*/
bool sys_irq_init(int vector, int pr, isr_t isr); //初始化一个中断, pr为优先级
//tp中断在支付宝iic通信时先关中断
void sys_ctp_irq_enble(int vector);
void sys_ctp_irq_disable(int vector);
u16 get_random(u16 num); //获取[0, num-1]之间的随机数
u16 convert_uni2gbk(u16 code, u32 addr, u32 len); //输入utf16, 返回gbk编码, 找不到编码,使用'□'
u8 utf8_char_size(u8 code); //返回UTF8占用几字节
u16 utf8_convert_to_unicode(u8 *in, u8 char_size); //UTF-8转成UTF-16 LE编码
uint8_t * bt_get_package_rf_param(u8 package);
void vddio_voltage_configure(void);
void dbg_clk_out(u32 type, u32 div);
u16 bt_get_mic_pmaxow(void); //获取mic能量值(峰峰值)
/**
* 给客户获取死机信息复位是可以在任何时候调用的建议客户放在一个隐藏触发界面显示辅助debug
* 返回的u32类型的指针指向u32 cpu_gprs[32]数组
* cpu_gprs[23] 存储开机时候 RTCCON0 值
cpu_gprs[24] 存储开机时候 RTCCON10 值
cpu_gprs[25] 存储开机时候 RTCCON9 值
cpu_gprs[26] 存储开机时候 LVDCON 值
以上信息可以用来判断开机的状态,是看门狗复位,或是上电开机,或是低电复位等状态;
其他异常开机辅助:
1、{cpu_gprs[30] 这个值为0x55555555表明是看门狗复位}
cpu_gprs[31] 存储了复位的地方PC地址
2、{cpu_gprs[30] 非0x55555555表明是执行代码异常复位}
cpu_gprs[31] 存储了复位的地方PC地址
cpu_gprs[30] 存储异常原因可以来区分复位原因比如除0取指错误等
cpu_gprs[29] 存储PCERR寄存器,可以理解为出事前的位置
cpu_gprs[28] 存储PCST寄存器可以理解为出事前前的位置
*/
u32* exception_debug_info_get(void);
/**
* 判断重启或开机原因
* 返回重启或开机原因参考RESTART_CAUSE_TYPE说明
*/
RESTART_CAUSE_TYPE exception_restart_cause(void);
#endif // _API_SYS_H_