n9表冠加入中断机制,优化转动效果 2174/1 2174/head
authorpenglei <1624952103@qq.com>
Fri, 29 Aug 2025 06:01:54 +0000 (14:01 +0800)
committerpenglei <1624952103@qq.com>
Fri, 29 Aug 2025 06:01:54 +0000 (14:01 +0800)
code/sdk/drivers/boards/brandy_evb/board_config/board_w9.h
code/sdk/zhihui/drivers/rotary_encoder/mixo/mixo_hal.c
code/sdk/zhihui/drivers/rotary_encoder/mixo/mixo_ots_driver.c
code/sdk/zhihui/drivers/rotary_encoder/mixo/mixo_service.c

index 04ed713..4eb9579 100644 (file)
@@ -24,7 +24,7 @@ extern void gyro_int_callback(pin_t pin, uintptr_t param);
 #endif
 
 #ifdef ROTARYENCODER_MIXO
-// extern void mixo_int_callback(pin_t pin, uintptr_t param);
+extern void mixo_int_callback(pin_t pin, uintptr_t param);
 #endif
 
 #ifdef SUPPORT_CYWEE_SERVICE
@@ -343,7 +343,7 @@ const hal_gpio_config_t g_gpio_function_config[PIN_MAX_NUMBER] = {
 #endif
 #endif
 #ifdef ROTARYENCODER_MIXO
-    // {   S_AGPIO_L0, HAL_GPIO_DIRECTION_INPUT, NULL, GPIO_INTERRUPT_FALLING_EDGE,  mixo_int_callback},
+    {   S_AGPIO_L0, HAL_GPIO_DIRECTION_INPUT, NULL, GPIO_INTERRUPT_FALLING_EDGE,  mixo_int_callback},
 #endif
 };
 /**
index e4d7dce..f745916 100644 (file)
@@ -16,21 +16,25 @@ encoder_callback g_encoder_callback = NULL;
 
 void mixo_int_callback(pin_t pin, uintptr_t param)
 {
-    PRINT("mixo_int_callback %d 0x%X\n",pin,param);
+    // PRINT("mixo_int_callback %d 0x%X\n",pin,param);
     uapi_gpio_clear_interrupt(pin);
-    // uapi_pin_set_ie(MIXO_INT_PIN,HAL_PIO_IE_DISABLE);
+    uapi_pin_set_ie(MIXO_INT_PIN,HAL_PIO_IE_DISABLE);
     mixo_start();           // 启动定时器
 }
 
 void mixo_check(void)
 {
+    // printf("mixo_check : %d\n",mixo_get_check_mode());
     // if(mixo_get_check_mode() == TIMER_MODE)
-        mixo_ots_timer_callback();
-    // else if(mixo_get_check_mode() == INT_MODE)
     // {
-    //     mixo_stop();           // 关闭定时器
-    //     // uapi_pin_set_ie(MIXO_INT_PIN,HAL_PIO_IE_ENBALE);
+        mixo_ots_timer_callback();
     // }
+
+    if(mixo_get_check_mode() == INT_MODE)
+    {
+        mixo_stop();           // 关闭定时器
+        uapi_pin_set_ie(MIXO_INT_PIN,HAL_PIO_IE_ENBALE);
+    }
 }
 
 
@@ -95,13 +99,15 @@ static ext_errno mixo_encoder_suspend(void)
 static ext_errno mixo_encoder_resume(void)
 {
     re_print("mixo_encoder_resume\r\n");
-    mixo_start();
+    // mixo_start();
+    mixo_resume();
     return EXT_ERR_SUCCESS;
 }
 static ext_errno mixo_encoder_sleep(void)
 {
     re_print("mixo_encoder_sleep\r\n");
-    mixo_stop();
+    // mixo_stop();
+    mixo_suspend();
     return EXT_ERR_SUCCESS;
 }
 static ext_errno mixo_encoder_reset(void)
index 518d963..2327655 100644 (file)
@@ -95,18 +95,18 @@ void mixo_ots_timer_callback(void)
     }
     else
     {
-        // timer_cnt++;
-        // if (timer_cnt == 20)  // 20*10 = // 200ms:200ms内sensor没有检测到表冠转动就会关闭定时器重新开启中断响应
-        // {
-        //     printf("mixo enter int mode\n");
-        //     /**
-        //      * 此处注意 mixo_ots_forced_clear_int
-        //      * 必须放在 external_int_init 之前去做
-        //      * 否则可能造成功耗异常的问题
-        //      */
-        //     mixo_ots_forced_clear_int();  // 强制拉高MOT脚
-        //     int_mode = 1;
-        // }
+        timer_cnt++;
+        if (timer_cnt == 100)  // 20*10 = // 200ms:200ms内sensor没有检测到表冠转动就会关闭定时器重新开启中断响应
+        {
+            // printf("mixo enter int mode\n");
+            /**
+             * 此处注意 mixo_ots_forced_clear_int
+             * 必须放在 external_int_init 之前去做
+             * 否则可能造成功耗异常的问题
+             */
+            mixo_ots_forced_clear_int();  // 强制拉高MOT脚
+            int_mode = 1;
+        }
         if (stand_still == 0) 
         {
             //上次是转动,上报状态改变
index ad62a5b..6359eba 100644 (file)
@@ -42,7 +42,7 @@ void mixo_service_timer_start(void)
 {
     if(mixo_service_timer_running == false && g_mixo_service_timer)
     {
-        mixo_resume();
+        // mixo_resume();
         osTimerStart(g_mixo_service_timer,MIXO_SERVICE_TIMER_CHECK_MS);
         mixo_service_timer_running = true;
     }
@@ -52,7 +52,7 @@ void mixo_service_timer_stop(void)
 {
     if(mixo_service_timer_running == true && g_mixo_service_timer)
     {
-        mixo_suspend();
+        // mixo_suspend();
         // mixo_clean_result();
         osTimerStop(g_mixo_service_timer);
         mixo_service_timer_running = false;