Przeglądaj źródła

Проверка LED.

TelenkovDmitry 1 rok temu
rodzic
commit
abddfbf4d9
3 zmienionych plików z 690 dodań i 523 usunięć
  1. 163 17
      fw/modules/io/mux.c
  2. 48 0
      fw/modules/io/mux.h
  3. 479 506
      project/ewarm/module_universal_io.dep

+ 163 - 17
fw/modules/io/mux.c

@@ -1,5 +1,126 @@
 #include "at32f403a_407.h"
 #include "mux.h"
+#include "FreeRTOS.h"
+#include "task.h"
+
+
+mux_channel_t leds[LED_NUMBER] = {
+#if 0  
+                                  {"INP_1", {0, 0, 0}, LED_ON, 0},
+                                  {"INP_2", {0, 0, 0}, LED_OFF, 0},
+                                  {"INP_3", {0, 0, 0}, LED_ON, 0},
+                                  {"INP_4", {0, 0, 0}, LED_OFF, 0},
+
+                                  {"OUT_1_G", {1, 0, 0}, LED_ON, 0},
+                                  {"OUT_2_G", {1, 0, 0}, LED_OFF, 0},
+                                  {"OUT_3_G", {1, 0, 0}, LED_ON, 0},
+                                  {"OUT_4_G", {1, 0, 0}, LED_OFF, 0},
+                                  
+                                  {"OUT_1_R", {0, 1, 0}, LED_ON, 0},
+                                  {"OUT_2_R", {0, 1, 0}, LED_OFF, 0},
+                                  {"OUT_3_R", {0, 1, 0}, LED_ON, 0},
+                                  {"OUT_4_R", {0, 1, 0}, LED_OFF, 0},
+
+                                  {"STATUS_G", {1, 1, 0}, LED_ON, 0},
+                                  {"STATUS_R", {1, 1, 0}, LED_OFF, 0},
+                                  {"RX_G", {1, 1, 0}, LED_ON, 0},
+                                  {"TX_R", {1, 1, 0}, LED_OFF, 0},
+                                  
+                                  {"OUT_5_R", {0, 0, 1}, LED_ON, 0},
+                                  {"OUT_6_R", {0, 0, 1}, LED_OFF, 0},
+                                  {"OUT_7_R", {0, 0, 1}, LED_ON, 0},
+                                  {"OUT_8_R", {0, 0, 1}, LED_OFF, 0},
+
+                                  {"OUT_5_G", {1, 0, 1}, LED_ON, 0},
+                                  {"OUT_6_G", {1, 0, 1}, LED_OFF, 0},
+                                  {"OUT_7_G", {1, 0, 1}, LED_ON, 0},
+                                  {"OUT_8_G", {1, 0, 1}, LED_OFF, 0},
+                                  
+                                  {"INP_5", {0, 1, 1}, LED_ON, 0},
+                                  {"INP_6", {0, 1, 1}, LED_OFF, 0},
+                                  {"INP_7", {0, 1, 1}, LED_ON, 0},
+                                  {"INP_8", {0, 1, 1}, LED_OFF, 0}
+#endif                                  
+#if 0                                  
+                                  {"INP_1", {0, 0, 0}, LED_ON, 0},
+                                  {"INP_2", {0, 0, 0}, LED_ON, 0},
+                                  {"INP_3", {0, 0, 0}, LED_ON, 0},
+                                  {"INP_4", {0, 0, 0}, LED_ON, 0},
+
+                                  {"OUT_1_G", {1, 0, 0}, LED_ON, 0},
+                                  {"OUT_2_G", {1, 0, 0}, LED_ON, 0},
+                                  {"OUT_3_G", {1, 0, 0}, LED_ON, 0},
+                                  {"OUT_4_G", {1, 0, 0}, LED_ON, 0},
+                                  
+                                  {"OUT_1_R", {0, 1, 0}, LED_ON, 0},
+                                  {"OUT_2_R", {0, 1, 0}, LED_ON, 0},
+                                  {"OUT_3_R", {0, 1, 0}, LED_ON, 0},
+                                  {"OUT_4_R", {0, 1, 0}, LED_ON, 0},
+
+                                  {"STATUS_G", {1, 1, 0}, LED_ON, 0},
+                                  {"STATUS_R", {1, 1, 0}, LED_ON, 0},
+                                  {"RX_G", {1, 1, 0}, LED_ON, 0},
+                                  {"TX_R", {1, 1, 0}, LED_ON, 0},
+                                  
+                                  {"OUT_5_R", {0, 0, 1}, LED_ON, 0},
+                                  {"OUT_6_R", {0, 0, 1}, LED_ON, 0},
+                                  {"OUT_7_R", {0, 0, 1}, LED_ON, 0},
+                                  {"OUT_8_R", {0, 0, 1}, LED_ON, 0},
+
+                                  {"OUT_5_G", {1, 0, 1}, LED_ON, 0},
+                                  {"OUT_6_G", {1, 0, 1}, LED_ON, 0},
+                                  {"OUT_7_G", {1, 0, 1}, LED_ON, 0},
+                                  {"OUT_8_G", {1, 0, 1}, LED_ON, 0},
+                                  
+                                  {"INP_5", {0, 1, 1}, LED_ON, 0},
+                                  {"INP_6", {0, 1, 1}, LED_ON, 0},
+                                  {"INP_7", {0, 1, 1}, LED_ON, 0},
+                                  {"INP_8", {0, 1, 1}, LED_ON, 0}
+#endif    
+#if 1                                  
+                                  {"INP_1", {0, 0, 0}, LED_OFF, 0},
+                                  {"INP_2", {0, 0, 0}, LED_OFF, 0},
+                                  {"INP_3", {0, 0, 0}, LED_OFF, 0},
+                                  {"INP_4", {0, 0, 0}, LED_OFF, 0},
+
+                                  {"OUT_1_G", {1, 0, 0}, LED_OFF, 0},
+                                  {"OUT_2_G", {1, 0, 0}, LED_OFF, 0},
+                                  {"OUT_3_G", {1, 0, 0}, LED_OFF, 0},
+                                  {"OUT_4_G", {1, 0, 0}, LED_OFF, 0},
+                                  
+                                  {"OUT_1_R", {0, 1, 0}, LED_OFF, 0},
+                                  {"OUT_2_R", {0, 1, 0}, LED_OFF, 0},
+                                  {"OUT_3_R", {0, 1, 0}, LED_OFF, 0},
+                                  {"OUT_4_R", {0, 1, 0}, LED_OFF, 0},
+
+                                  {"STATUS_G", {1, 1, 0}, LED_OFF, 0},
+                                  {"STATUS_R", {1, 1, 0}, LED_OFF, 0},
+                                  {"RX_G", {1, 1, 0}, LED_OFF, 0},
+                                  {"TX_R", {1, 1, 0}, LED_OFF, 0},
+                                  
+                                  {"OUT_5_R", {0, 0, 1}, LED_OFF, 0},
+                                  {"OUT_6_R", {0, 0, 1}, LED_OFF, 0},
+                                  {"OUT_7_R", {0, 0, 1}, LED_OFF, 0},
+                                  {"OUT_8_R", {0, 0, 1}, LED_OFF, 0},
+
+                                  {"OUT_5_G", {1, 0, 1}, LED_OFF, 0},
+                                  {"OUT_6_G", {1, 0, 1}, LED_OFF, 0},
+                                  {"OUT_7_G", {1, 0, 1}, LED_OFF, 0},
+                                  {"OUT_8_G", {1, 0, 1}, LED_OFF, 0},
+                                  
+                                  {"INP_5", {0, 1, 1}, LED_ON, 0},
+                                  {"INP_6", {0, 1, 1}, LED_ON, 0},
+                                  {"INP_7", {0, 1, 1}, LED_ON, 0},
+                                  {"INP_8", {0, 1, 1}, LED_ON, 0}
+#endif                                  
+                                 };
+
+
+
+//
+void mux_led_init(mux_channel_t *ch)
+{
+}
 
 
 //
@@ -30,7 +151,7 @@ void mux_gpio_init(void)
     gpio_bits_reset(GPIOB, GPIO_PINS_6 | GPIO_PINS_7);
     gpio_bits_reset(GPIOD, GPIO_PINS_6 | GPIO_PINS_7);
     
-    // LED_LINE
+    // LED_LINE (низкий уровень на пине = высокий уровень на входе MUX)
     //      LINE_0 - PE3
     //      LINE_1 - PE2
     //      LINE_2 - PB9
@@ -52,22 +173,47 @@ void mux_gpio_init(void)
 //
 void mux_test(void)
 {
-    // INP_1
-    gpio_bits_set(GPIOE, GPIO_PINS_2 | GPIO_PINS_3);
-    gpio_bits_set(GPIOB, GPIO_PINS_9);
-    
-    gpio_bits_set(GPIOD, GPIO_PINS_6);
- 
-    vTaskDelay(1);
-    
-    // INP_2
-    gpio_bits_set(GPIOE, GPIO_PINS_2);
-    gpio_bits_reset(GPIOE, GPIO_PINS_3);
-    gpio_bits_set(GPIOB, GPIO_PINS_9);
-    
-    gpio_bits_set(GPIOD, GPIO_PINS_7);
-    
-    vTaskDelay(1);
+    uint8_t shift = 0;
     
+    for (uint8_t i = 0; i < LED_NUMBER/4; i++)
+    {
+        leds[shift].line[0] ? (LINE_0_RESET) : (LINE_0_SET);
+        leds[shift].line[1] ? (LINE_1_RESET) : (LINE_1_SET);
+        leds[shift].line[2] ? (LINE_2_RESET) : (LINE_2_SET);
+        
+        leds[i*4].state     == LED_ON ? (COL_1_SET) : (COL_1_RESET);
+        leds[i*4 + 1].state == LED_ON ? (COL_2_SET) : (COL_2_RESET);
+        leds[i*4 + 2].state == LED_ON ? (COL_3_SET) : (COL_3_RESET);
+        leds[i*4 + 3].state == LED_ON ? (COL_4_SET) : (COL_4_RESET);
+        
+        if (leds[i*4].state == LED_ON || leds[i*4 + 1].state == LED_ON || 
+            leds[i*4 + 2].state == LED_ON || leds[i*4 + 3].state == LED_ON) 
+        {
+            vTaskDelay(1);
+        }
+        
+        shift += 4;
+    }
+          
+#if 0    
+        if (leds[i].state == LED_ON) {
+            leds[i].line[0] ? (LINE_0_RESET) : (LINE_0_SET);
+            leds[i].line[1] ? (LINE_1_RESET) : (LINE_1_SET);
+            leds[i].line[2] ? (LINE_2_RESET) : (LINE_2_SET);
+
+            leds[i].col[0] ? (COL_1_SET) : (COL_1_RESET);
+            leds[i].col[1] ? (COL_2_SET) : (COL_2_RESET);
+            leds[i].col[2] ? (COL_3_SET) : (COL_3_RESET);
+            leds[i].col[3] ? (COL_4_SET) : (COL_4_RESET);
+        
+            vTaskDelay(1);
+        }
+        else {
+            LINE_0_RESET;
+            LINE_1_RESET;
+            LINE_2_RESET;
+        }
+    }
+#endif
     
 }

+ 48 - 0
fw/modules/io/mux.h

@@ -2,6 +2,54 @@
 #define __MUX_H
 
 
+//
+#define LED_NUMBER      28
+
+#define LINE_0_SET      GPIOE->scr = GPIO_PINS_3
+#define LINE_0_RESET    GPIOE->clr = GPIO_PINS_3
+
+#define LINE_1_SET      GPIOE->scr = GPIO_PINS_2
+#define LINE_1_RESET    GPIOE->clr = GPIO_PINS_2
+
+#define LINE_2_SET      GPIOB->scr = GPIO_PINS_9
+#define LINE_2_RESET    GPIOB->clr = GPIO_PINS_9
+
+#define COL_1_SET      GPIOD->scr = GPIO_PINS_6
+#define COL_1_RESET    GPIOD->clr = GPIO_PINS_6
+
+#define COL_2_SET      GPIOD->scr = GPIO_PINS_7
+#define COL_2_RESET    GPIOD->clr = GPIO_PINS_7
+
+#define COL_3_SET      GPIOB->scr = GPIO_PINS_6
+#define COL_3_RESET    GPIOB->clr = GPIO_PINS_6
+
+#define COL_4_SET      GPIOB->scr = GPIO_PINS_7
+#define COL_4_RESET    GPIOB->clr = GPIO_PINS_7
+
+
+
+typedef enum
+{
+    LED_OFF = 0, 
+    LED_ON,
+    LED_BLINK,
+    
+} led_state_t;
+
+
+typedef struct 
+{
+    char            label[8];
+    uint8_t         line[3];    // [line_0, line_1, line_2]
+    led_state_t     state;
+    uint32_t        cnt;
+    
+} mux_channel_t;
+
+
+//
+void mux_led_init(mux_channel_t *ch);
+
 //
 void mux_gpio_init(void);
 

Plik diff jest za duży
+ 479 - 506
project/ewarm/module_universal_io.dep


Niektóre pliki nie zostały wyświetlone z powodu dużej ilości zmienionych plików