2021-02-07 21:45:17 +01:00

126 lines
2.6 KiB
C

#include <string.h>
#include <stdint.h>
#include <stdbool.h>
#include <stdlib.h>
#include <main.h>
#include <usart.h>
#include <spi.h>
#include <tim.h>
#include <PontCoopScheduler.h>
#include <show.h>
#include <logger.h>
#include <eeprom.h>
#include <wizHelper.h>
#include <cmdHandler.h>
#include <config.h>
void my_setup_1() {
schInit();
logInit();
showInit();
}
void my_errorHandler() {
show(LED_RED, ON);
}
uint32_t mainsCntSum = 0;
uint32_t mainsCntCnt = 0;
void second_tick(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);
uint32_t cnt = tmpSum / tmpCnt;
double f = 1.0 / ((double)cnt) * 1.0e6;
uint32_t ff = (uint32_t) ((f + 0.005) * 100);
t_seconds *seconds = wizGetSeconds();
coloredMsg(LOG_GREEN, "Tick %ld %f %d %lu %lu", ff, f, seconds->valid, seconds->missedUpdates, seconds->seconds);
}
void my_setup_2() {
show(LED_RED, OFF);
show(LED_GREEN, BLINK);
logMsg("Application starting");
eepromInit();
configInit();
wizInit();
// cmdHandlerInit();
schAdd(second_tick, NULL, 0, 1000);
HAL_TIM_IC_Start_IT(&mainsCnt, TIM_CHANNEL_1);
logMsg("Application running");
}
void my_loop() {
// show(DEBUG_2, TOGGLE);
schExec();
#ifndef LOGGER_OUTPUT_BY_INTERRUPT
logExec();
#endif //LOGGER_OUTPUT_BY_INTERRUPT
}
void SYSTICK_Callback() {
schUpdate();
}
void HAL_UART_TxCpltCallback(UART_HandleTypeDef *huart) {
#ifdef LOGGER_OUTPUT_BY_INTERRUPT
if (huart == &debugUart) {
debugTxCpltCallback(huart);
}
#endif //LOGGER_OUTPUT_BY_INTERRUPT
}
void HAL_SPI_TxCpltCallback(SPI_HandleTypeDef *hspi) {
if (hspi == &eepromSpi) {
eepromSpiTxCpltCallback(hspi);
}
}
void HAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef *htim) {
static uint8_t state = 0;
static uint32_t savedV = 0;
if (htim == &mainsCnt) {
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;
}
}
}