优化雷鸟背光控制(补) 2785/1 2785/head 2786/target/1
authorpenglei <1624952103@qq.com>
Fri, 21 Nov 2025 07:16:22 +0000 (15:16 +0800)
committerpenglei <1624952103@qq.com>
Fri, 21 Nov 2025 07:16:22 +0000 (15:16 +0800)
code/sdk/zhihui/utils/custom_utils.c

index ada64f2..5ac0fcf 100644 (file)
@@ -4634,18 +4634,31 @@ void uapi_get_lcd_id(uint32_t *id)
 }
 
 static uint8_t backlight_status = 0;
+static uint8_t last_brightness = 5;
 #define LCD_BACKLIGHT_PWM_PIN       S_AGPIO_L16    /* 背光PWM引脚 */
 
-void uapi_lcd_backlight_off(void)
+
+static void backlight_ic_reset(void) 
 {
+    uapi_pin_set_mode(LCD_BACKLIGHT_PWM_PIN, HAL_PIO_FUNC_GPIO);
+    uapi_gpio_set_dir(LCD_BACKLIGHT_PWM_PIN, GPIO_DIRECTION_OUTPUT);
+    uapi_gpio_set_val(LCD_BACKLIGHT_PWM_PIN, GPIO_LEVEL_LOW);
+    uapi_tcxo_delay_us(180);  // 等待IC就绪
 
+    // 输出0个下降沿(仅初始化GPIO,不发送脉冲,触发IC关闭当前驱动)
+    uapi_gpio_set_val(LCD_BACKLIGHT_PWM_PIN, GPIO_LEVEL_HIGH);
+    uapi_tcxo_delay_us(30);
+}
+
+void uapi_lcd_backlight_off(void)
+{
     if(backlight_status == 0)
         return;
 
     backlight_status = 0;
 
-    uapi_pin_set_mode(LCD_BACKLIGHT_PWM_PIN, HAL_PIO_FUNC_GPIO);
-    uapi_gpio_set_dir(LCD_BACKLIGHT_PWM_PIN, GPIO_DIRECTION_OUTPUT);
+    backlight_ic_reset();
+
     uapi_gpio_set_val(LCD_BACKLIGHT_PWM_PIN, GPIO_LEVEL_LOW);
 
     PRINT("uapi_lcd_backlight_off\r\n");
@@ -4654,17 +4667,26 @@ void uapi_lcd_backlight_off(void)
 void uapi_lcd_backlight_on(void)
 {
 
-    if(backlight_status == 1)
-        return;
-
-    backlight_status = 1;
+    uint8_t brightness = cm_getScreenBrightness();
 
+    if(last_brightness != brightness)
+    {
+        last_brightness = brightness;
+        if(backlight_status == 1)
+        {
+            backlight_ic_reset();
+            backlight_status = 0;
+        }
 
-    uint8_t brightness = 5;
+    }
 
-    brightness = cm_getScreenBrightness();
     printf("brightness:%d\n",brightness);
 
+    if(backlight_status == 1)
+        return;
+
+    backlight_status = 1;
+
     uint8_t fall_edge_cnt = 0;
     if (brightness <= 11)      fall_edge_cnt = 7;
     else if (brightness <= 24) fall_edge_cnt = 6;