|
@@ -32,7 +32,7 @@ static char buf[24]; // common string buffer for chsnprintf()
|
|
|
|
|
|
static volatile uint8_t PID_ust = LINE_FREQ; // Данные для установки регистра сравнения таймера2
|
|
|
|
|
|
-static virtual_timer_t second_vt, hz50_vt;
|
|
|
+static virtual_timer_t second_vt, hz50_vt, btn_vt;
|
|
|
|
|
|
/* Организуем флаги и индикаторы в структуру */
|
|
|
static volatile struct flags { // Флаги
|
|
@@ -54,6 +54,7 @@ static volatile struct flags { // Флаги
|
|
|
unsigned razg_off : 1; // Флаг останова режима "разгон"
|
|
|
unsigned stab_off : 1; // Флаг аварийного останова стабилизатора
|
|
|
unsigned butt : 1; // Флаг опроса кнопок
|
|
|
+ unsigned test : 1;
|
|
|
#ifdef USE_EEPROM
|
|
|
unsigned writable : 1; // Флаг записи уставок в EEPROM
|
|
|
#endif
|
|
@@ -79,8 +80,9 @@ static uint8_t X_position(const uint8_t x, const uint16_t arg, const uint8_t pix
|
|
|
static uint8_t X_centred(const uint8_t len); // Функция возвращает начальную позицию по Х для текста длинной len знаков, для размещения оного по центру дисплея.
|
|
|
static uint16_t calc_proportion(const uint16_t multiplier1, const uint16_t multiplier2, const uint32_t divider);
|
|
|
static void Buttons_(void);
|
|
|
-static void second_new_cb(virtual_timer_t *vtp, void *p);
|
|
|
-static void hz50_cb(virtual_timer_t *vtp, void *p);
|
|
|
+static void second_vt_cb(virtual_timer_t *vtp, void *p);
|
|
|
+static void hz50_vt_cb(virtual_timer_t *vtp, void *p);
|
|
|
+static void btn_vt_cb(virtual_timer_t *vtp, void *p);
|
|
|
static void ADC_cb(ADCDriver *adcp);
|
|
|
static void gpt_cb(GPTDriver *drv);
|
|
|
|
|
@@ -107,24 +109,6 @@ static const GPTConfig gptcfg1 = {
|
|
|
.dier = 0U
|
|
|
};
|
|
|
|
|
|
-/*
|
|
|
- * Threads
|
|
|
- */
|
|
|
-
|
|
|
-/* BTN serving thread. */
|
|
|
-static THD_WORKING_AREA(waBTNThread, 256);
|
|
|
-static __attribute__((noreturn)) THD_FUNCTION(BTNThread, arg) {
|
|
|
- (void)arg;
|
|
|
- chRegSetThreadName("BTN_process");
|
|
|
-
|
|
|
- systime_t time = chVTGetSystemTimeX();
|
|
|
- while (true) {
|
|
|
- time += TIME_MS2I(BTN_SCAN_PERIOD);
|
|
|
- Buttons_();
|
|
|
- chThdSleepUntil(time);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
/*
|
|
|
* ПРОЦЕДУРЫ И ФУНКЦИИ
|
|
|
*/
|
|
@@ -824,6 +808,7 @@ static void menu_print_minus(const uint8_t str) {
|
|
|
* @brief Initialization of 'Power Stabilizator'
|
|
|
*/
|
|
|
void Stab_Init(void) {
|
|
|
+ fl.test = 0;
|
|
|
cnt_dspMenu = 2; // Сначала - начальное меню
|
|
|
|
|
|
/* Инициализируем входы/выходы - was done in board.h */
|
|
@@ -838,11 +823,9 @@ void Stab_Init(void) {
|
|
|
gptStart(&GPTD3, &gptcfg1);
|
|
|
|
|
|
/* Starting a virtual timers. */
|
|
|
- chVTSetContinuous(&hz50_vt, TIME_MS2I(LINE_PERIOD), hz50_cb, NULL);
|
|
|
- chVTSetContinuous(&second_vt, TIME_MS2I(1000), second_new_cb, NULL);
|
|
|
-
|
|
|
- /* Starting the Button thread. */
|
|
|
- chThdCreateStatic(waBTNThread, sizeof(waBTNThread), NORMALPRIO, BTNThread, NULL);
|
|
|
+ chVTSetContinuous(&hz50_vt, TIME_MS2I(LINE_PERIOD), hz50_vt_cb, NULL);
|
|
|
+ chVTSetContinuous(&second_vt, TIME_MS2I(1000), second_vt_cb, NULL);
|
|
|
+ chVTSetContinuous(&btn_vt, TIME_MS2I(BTN_SCAN_PERIOD), btn_vt_cb, NULL);
|
|
|
|
|
|
pp_Delay(20); // Подождем 20 полупериодов
|
|
|
|
|
@@ -858,7 +841,7 @@ void Stab_Init(void) {
|
|
|
ST7735_WriteString(X_centred(10), 10, "потужності", LiberM_7x10, Yellow, Black);
|
|
|
ST7735_WriteString(X_centred(4), 20, "ТЕНа", LiberM_7x10, Yellow, Black);
|
|
|
#ifdef INTERFACE_ALT
|
|
|
- ST7735_WriteString(X_centred(12), 50, "STAB-AVR", Font_11x18, Green, Black);
|
|
|
+ ST7735_WriteString(X_centred(16), 50, "STAB-STM32", Font_11x18, Green, Black);
|
|
|
#else
|
|
|
ST7735_WriteString(X_centred(8), 50, "STAB-AVR", LiberM_7x10, Green, Black);
|
|
|
#endif
|
|
@@ -1126,7 +1109,7 @@ void Stab_WorkCycle(void) {
|
|
|
* @param vtp
|
|
|
* @param p
|
|
|
*/
|
|
|
-static void second_new_cb(virtual_timer_t *vtp, void *p) {
|
|
|
+static void second_vt_cb(virtual_timer_t *vtp, void *p) {
|
|
|
(void)vtp;
|
|
|
(void)p;
|
|
|
|
|
@@ -1153,7 +1136,7 @@ static void second_new_cb(virtual_timer_t *vtp, void *p) {
|
|
|
* @param vtp
|
|
|
* @param p
|
|
|
*/
|
|
|
-static void hz50_cb(virtual_timer_t *vtp, void *p) {
|
|
|
+static void hz50_vt_cb(virtual_timer_t *vtp, void *p) {
|
|
|
(void)vtp;
|
|
|
(void)p;
|
|
|
|
|
@@ -1171,3 +1154,9 @@ static void hz50_cb(virtual_timer_t *vtp, void *p) {
|
|
|
fl.Tout ? TURN_SSR_ON : TURN_SSR_OFF ; // Включаем или выключаем ТЭН (твердотельное реле)
|
|
|
fl.TRelay ? TURN_RELAY_ON : TURN_RELAY_OFF ; // Включаем или выключаем ТЭН (контактное реле)
|
|
|
}
|
|
|
+
|
|
|
+static void btn_vt_cb(virtual_timer_t *vtp, void *p) {
|
|
|
+ (void)vtp;
|
|
|
+ (void)p;
|
|
|
+ Buttons_();
|
|
|
+}
|