From: SnickerSun Date: Sat, 23 Mar 2024 07:34:40 +0000 (+0800) Subject: 优化代码,解决powerkey 可能造成 充电启动检测不到问题 X-Git-Tag: release_V1.2.70_20241020_135402~1272 X-Git-Url: http://git.snicker.com.cn/Users/apple/Desktop/static/gitweb.css?a=commitdiff_plain;h=e061821901afca5df9c033a52c141e0a04015be7;p=mirrors%2FFD230.git 优化代码,解决powerkey 可能造成 充电启动检测不到问题 --- diff --git a/code/sdk/application/brandy/brandy_standard/board_init.c b/code/sdk/application/brandy/brandy_standard/board_init.c index ff4ad605e..ec062ca5b 100755 --- a/code/sdk/application/brandy/brandy_standard/board_init.c +++ b/code/sdk/application/brandy/brandy_standard/board_init.c @@ -99,56 +99,56 @@ static void gpio_func_init(void) } static button_press_state_t g_pwrkey_press_state = RELEASED; -startup_reason_t startup_reason = 3; -bool pwrkey_interrupt = 0; +startup_reason_t startup_reason = STARTUP_OTHER; -static bool pwrkey_interrupt_check(void) +static startup_reason_t get_startup_reason(void) { - button_peripheral_api *button_api = button_port_get_api(); - // if not vbus or pwren interrupt return - if (button_api->button_check_interrupt(PIN_NONE) == false) { - button_api->button_clear_interrupt(PIN_NONE); - return false; + startup_reason_t startup_type = STARTUP_OTHER; + uint16_t g_ulp_wkup_flag = readw(ULP_WKUP_INT_STS); + if (((g_ulp_wkup_flag >> WKUP_SYSTICK_MASK) & 1) == 1) { + startup_type = STARTUP_SYSTICK; } - // deal with vbus interrupt - if (button_api->button_check_vbus_interrupt()) { - // button_api->button_deal_vbus_event(); - button_api->button_clear_interrupt(PIN_NONE); - return false; + if (((g_ulp_wkup_flag >> WKUP_PWRON_MASK) & 1) == 1) { + startup_type = STARTUP_PWRON; + } + if (((g_ulp_wkup_flag >> WKUP_VBUS_EN_MASK) & 1) == 1) { + startup_type = STARTUP_VBUS_EN; + } + return startup_type; +} +static button_press_state_t porting_button_get_state(void) +{ + if ((readl(ANA_STS) & 0x3) == 0) { + return PRESSED; + } else { + return RELEASED; } - - return true; - } - void check_pwrkey_3s(void) { //3秒按键开机 - button_peripheral_api *button_api=button_port_get_api(); bool button_pressed = false; int pressed_count = 0; // button_api->button_register_callback(PIN_NONE, (osal_irq_handler)button_irq_callback); - uapi_ulp_wkup_type_record(); - startup_reason = uapi_get_startup_reason(); - pwrkey_interrupt = pwrkey_interrupt_check(); - PRINT("bootup reasion %d (0-systick 1-pwrkey 2-vbus 3-other), pwrkey_interrupt %d"NEWLINE,startup_reason,pwrkey_interrupt); + startup_reason = get_startup_reason(); + PRINT("bootup reasion %d (0-systick 1-pwrkey 2-vbus 3-other)"NEWLINE,startup_reason); if(startup_reason == 1) g_pwrkey_press_state = PRESSED; else g_pwrkey_press_state = RELEASED; if (g_pwrkey_press_state == PRESSED) { while(g_pwrkey_press_state == PRESSED){//按键启动才检测3秒 - g_pwrkey_press_state = button_api->button_get_state(PIN_NONE); + g_pwrkey_press_state = porting_button_get_state(); PRINT("bootup timeout %d g_pwrkey_press_state %d"NEWLINE,pressed_count,g_pwrkey_press_state); pressed_count ++ ; - if (pressed_count>=15) + if (pressed_count>=10) { break; } uapi_tcxo_delay_ms(200); } - if(pressed_count <15 ) + if(pressed_count <10 ) { PRINT("not pressed 3 seconds , poweroff!"NEWLINE); uapi_poweroff_device();