107 lines
4.2 KiB
C
107 lines
4.2 KiB
C
#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_
|
||
|