64 lines
1.6 KiB
C
64 lines
1.6 KiB
C
#include <stdint.h>
|
|
|
|
#include <tim.h>
|
|
|
|
#include <counter.h>
|
|
#include <show.h>
|
|
#include <logger.h>
|
|
#include <PontCoopScheduler.h>
|
|
#include <wizHelper.h>
|
|
|
|
|
|
|
|
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 = 1000 * 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;
|
|
}
|
|
}
|