#include #include #include #include #include #include #include static uint32_t mainsCntSum = 0; static uint32_t mainsCntCnt = 0; void counterTick(void *handle) { uint32_t tmpSum = 0; uint32_t tmpCnt = 0; HAL_NVIC_DisableIRQ(TIM1_CC_IRQn); tmpSum = mainsCntSum; mainsCntSum = 0; tmpCnt = mainsCntCnt; mainsCntCnt = 0; HAL_NVIC_EnableIRQ(TIM1_CC_IRQn); uint64_t cnt = tmpSum / tmpCnt; // double f = 1.0 / ((double)cnt) * 1.0e6; uint64_t freq = 100 * 1.0e6 / cnt; // uint32_t ff = (uint32_t) ((f + 0.005) * 100); t_seconds *seconds = wizGetSeconds(); coloredMsg(LOG_GREEN, "Freq: %lu", freq); coloredMsg(LOG_GREEN, "Tick: %d %lu %lu", seconds->valid, seconds->missedUpdates, seconds->seconds); } void counterInit() { schAdd(counterTick, NULL, 0, 1000); HAL_TIM_IC_Start_IT(&mainsCnt, TIM_CHANNEL_1); } void mainsCntsInputCaptureCallback(TIM_HandleTypeDef *htim) { static uint8_t state = 0; static uint32_t savedV = 0; uint32_t v = HAL_TIM_ReadCapturedValue(htim, TIM_CHANNEL_1); if (state == 0) { show(DEBUG_2, ON); savedV = v; state = 1; } else if (state == 1) { show(DEBUG_2, OFF); uint32_t captured = (savedV < v) ? (v - savedV) : ((htim->Init.Period - savedV) + v); //double f = 1.0 / ((double)captured) * 1.0e6; //logMsg("CCR: %ld, %f", captured, f); mainsCntSum += captured; mainsCntCnt += 1; state = 0; } else { state = 0; } }