#define os_log(format, ...) custom_log("OTA", format, ##__VA_ARGS__) #include "TimeUtils.h" #include "mico.h" #include "main.h" #include "user_udp.h" #include "user_mqtt_client.h" #include "user_function.h" mico_timer_t power_timer; static uint32_t clock_count_last = 0; static uint32_t clock_count = 0; static uint32_t timer_count = 0; static uint32_t timer_irq_count = 0; static void power_timer_handler( void* arg ) { // uint8_t pin_input = MicoGpioInputGet( POWER ); uint32_t timer = 0; if ( timer_irq_count > 1 ) { timer = (clock_count - clock_count_last); os_log("power_irq_handler:%09u %u %u",timer,timer_irq_count,timer_count); if ( timer_count > 3 ) { timer /= 1000; timer += 4294967; //0xffffffff/1000; } else if ( clock_count < clock_count_last ) { timer += 0xffffffff; timer /= 1000; }else timer/=1000; power = 17100000 * (timer_irq_count - 1) / timer; timer_count = 0; timer_irq_count = 0; } else { timer_count++; } // if ( clock_count_last != timer_count ) // { //// os_log("power_irq_handler:%u-%u=%u",timer_count,clock_count_last,timer); // timer = (timer_count - clock_count_last); // if ( timer_count < clock_count_last ) timer += 0xffffffff; // // timer = timer / 1000; // power = 15200000 / timer; // os_log("power_irq_handler:%u,%07u",power,timer); // clock_count_last = timer_count; // } // if(timer_count==0) os_log("power_timer_handler Hight:%d",clock_count_last); // timer_count++; // clock_count_last=timer_count; } static void power_irq_handler( void* arg ) { clock_count = mico_nanosecond_clock_value( ); if ( timer_irq_count == 0 ) clock_count_last = clock_count; timer_irq_count++; } void user_power_init( void ) { os_log("user_power_init"); MicoGpioInitialize( POWER, INPUT_PULL_UP ); mico_rtos_init_timer( &power_timer, 1000, power_timer_handler, NULL ); mico_rtos_start_timer( &power_timer ); MicoGpioEnableIRQ( POWER, IRQ_TRIGGER_FALLING_EDGE, power_irq_handler, NULL ); }