Quellcode durchsuchen

Button scan dont work?

Vladimir N. Shilov vor 1 Jahr
Ursprung
Commit
2eb8dfe171
2 geänderte Dateien mit 34 neuen und 45 gelöschten Zeilen
  1. 16 16
      board/board.h
  2. 18 29
      lib/stab/stab.c

+ 16 - 16
board/board.h

@@ -44,32 +44,32 @@
 
 /* on-board */
 
-#define GPIOC_LED               13
+#define GPIOC_LED     13
 #define GPIOA_RELAY		0
-#define GPIOA_SSR		1
+#define GPIOA_SSR		  1
 
 #define LCD_LED_ON		palClearLine(LINE_LCD_DC)
 #define LCD_LED_OFF		palSetLine(LINE_LCD_DC)
 
-#define LINE_LED		PAL_LINE(GPIOC, 13U)
-#define LINE_RELAY		PAL_LINE(GPIOA, 0U)
-#define LINE_SSR		PAL_LINE(GPIOA, 1U)
+#define LINE_LED		  PAL_LINE(GPIOC, 13U)
+#define LINE_RELAY	  PAL_LINE(GPIOA, 0U)
+#define LINE_SSR		  PAL_LINE(GPIOA, 1U)
 
-#define LINE_STAB_OFF	        PAL_LINE(GPIOA, 2U)
-#define LINE_RAZGON_OFF	        PAL_LINE(GPIOA, 3U)
+#define LINE_STAB_OFF	    PAL_LINE(GPIOA, 2U)
+#define LINE_RAZGON_OFF	  PAL_LINE(GPIOA, 3U)
 
 /* Buttons */
-#define LINE_BTN_4	        PAL_LINE(GPIOA, 8U)
-#define LINE_BTN_3      	PAL_LINE(GPIOB, 15U)
-#define LINE_BTN_2      	PAL_LINE(GPIOB, 14U)
-#define LINE_BTN_1      	PAL_LINE(GPIOB, 13U)
-#define LINE_BTN_G      	PAL_LINE(GPIOB, 12U)
+#define LINE_BTN_3	  PAL_LINE(GPIOA, 8U)
+#define LINE_BTN_4    PAL_LINE(GPIOB, 15U)
+#define LINE_BTN_1    PAL_LINE(GPIOB, 14U)
+#define LINE_BTN_2    PAL_LINE(GPIOB, 13U)
+#define LINE_BTN_G    PAL_LINE(GPIOB, 12U)
 
-#define BTNS_ON			palClearLine(LINE_BTN_G)
-#define BTNS_OFF		palSetLine(LINE_BTN_G)
+#define BTNS_ON			  palClearLine(LINE_BTN_G)
+#define BTNS_OFF		  palSetLine(LINE_BTN_G)
 
 /* LCD */
-#define LINE_LED		PAL_LINE(GPIOC, 13U)
+#define LINE_LED		  PAL_LINE(GPIOC, 13U)
 #define LINE_LCD_CS		PAL_LINE(GPIOA, 4U)
 #define LINE_LCD_DC		PAL_LINE(GPIOA, 6U)
 
@@ -175,7 +175,7 @@
  * PB12 - Push Pull output   (BTN_G)
  */
 #define VAL_GPIOBCRL            0x88888808      /*  PB7...PB0 */
-#define VAL_GPIOBCRH            0x88888888      /* PB15...PB8 */
+#define VAL_GPIOBCRH            0x88838888      /* PB15...PB8 */
 #define VAL_GPIOBODR            0xFFFFFFFF
 
 /*

+ 18 - 29
lib/stab/stab.c

@@ -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_();
+}