这里是增加第一次上电开机功能,具体修改如下:
在setup.c下找到setup_arch()
void setup_arch()//这个函数就是耳机最早运行的地方
{
......
extern u8 p11_reset_src;
extern u8 p33_reset_src;
extern u8 p33_reset_source_dump();
extern u8 p11_reset_source_dump();
p11_reset_src = p11_reset_source_dump();
p33_reset_src = p33_reset_source_dump();
clock_dump();//加在这个函数的前面
......
}
在app_main.c下添加:
u8 p11_reset_src = 0;
u8 p33_reset_src = 0;
u8 my_power_on_flag = 0;
void power_reset_source_info(void)
{
my_power_on_flag = 0;
if((p11_reset_src == 0xff)&&(p33_reset_src == 0xff))
{
printf("Wake UP");
r_printf("get_wakeup_source:0x%x",
get_wakeup_source());
return;
}
if(p11_reset_src & BIT(0))
{
printf("PVDD POR 11111");
}
if(p11_reset_src & BIT(1))
{
printf("DVDD POR 22222");//按键按下的时候就是这里
}
if(p11_reset_src & BIT(2))
{
my_power_on_flag = 1;
printf("P33 RESET");
if(p33_reset_src & BIT(0))
{
printf("VDDIO POR 3333");
}
if(p33_reset_src & BIT(1))
{
printf("VDDIO LVD");
}
if(p33_reset_src & BIT(2))
{
printf("VCM");
}
if(p33_reset_src & BIT(3))
{
printf("PPINR 8s reset");
}
if(p33_reset_src & BIT(4))
{
printf("SYS RESET");
}
if(p33_reset_src & BIT(5))
{
printf("P33 SOFT RESET");
}
}
if(p11_reset_src & BIT(3))
{
printf("WDT RESET");
}
if(p11_reset_src & BIT(4))
{
printf("P11 SOFT RESET");
}
if(p11_reset_src & BIT(5))
{
printf("MAIN_SYS RESET");
}
}
函数需要放到app_main()下运行:
void app_main()
{
printf("in app_main p11_reset_src = %d ,p33_reset_src = %d !\n",p11_reset_src,p33_reset_src);
power_reset_source_info();//放在最前面去执行
......
}
然后再到判断开机的地方进行执行
void check_power_on_key(void)
{
u32 delay_10ms_cnt = 0;
while (1) {
clr_wdt();
os_time_dly(1);
if(my_power_on_flag == 1)//这里就是实现第一次上电开机的地方
{
my_power_on_flag = 0;
printf("in check_power_on_key first bat power on !\n");
return;
}
extern u8 get_power_on_status(void);
if (get_power_on_status()) {
log_info("+");
delay_10ms_cnt++;
if (delay_10ms_cnt > 70)//这里就是修改长按多久开机
{
return;
}
} else {
log_info("-");
delay_10ms_cnt = 0;
log_info("enter softpoweroff\n");
power_set_soft_poweroff();
}
}
}