#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) { } // void mux_gpio_init(void) { gpio_init_type gpio_initstructure; crm_periph_clock_enable(CRM_GPIOB_PERIPH_CLOCK, TRUE); crm_periph_clock_enable(CRM_GPIOB_PERIPH_CLOCK, TRUE); crm_periph_clock_enable(CRM_GPIOE_PERIPH_CLOCK, TRUE); // LED_COL // COL_1 - PD6 // COL_2 - PD7 // COL_3 - PB6 // COL_4 - PB7 gpio_initstructure.gpio_out_type = GPIO_OUTPUT_PUSH_PULL; gpio_initstructure.gpio_pull = GPIO_PULL_NONE; gpio_initstructure.gpio_mode = GPIO_MODE_OUTPUT; gpio_initstructure.gpio_drive_strength = GPIO_DRIVE_STRENGTH_STRONGER; gpio_initstructure.gpio_pins = GPIO_PINS_6 | GPIO_PINS_7; gpio_init(GPIOB, &gpio_initstructure); gpio_initstructure.gpio_pins = GPIO_PINS_6 | GPIO_PINS_7; gpio_init(GPIOD, &gpio_initstructure); gpio_bits_reset(GPIOB, GPIO_PINS_6 | GPIO_PINS_7); gpio_bits_reset(GPIOD, GPIO_PINS_6 | GPIO_PINS_7); // LED_LINE (низкий уровень на пине = высокий уровень на входе MUX) // LINE_0 - PE3 // LINE_1 - PE2 // LINE_2 - PB9 gpio_initstructure.gpio_out_type = GPIO_OUTPUT_PUSH_PULL; gpio_initstructure.gpio_pull = GPIO_PULL_NONE; gpio_initstructure.gpio_mode = GPIO_MODE_OUTPUT; gpio_initstructure.gpio_drive_strength = GPIO_DRIVE_STRENGTH_STRONGER; gpio_initstructure.gpio_pins = GPIO_PINS_2 | GPIO_PINS_3; gpio_init(GPIOE, &gpio_initstructure); gpio_initstructure.gpio_pins = GPIO_PINS_9; gpio_init(GPIOB, &gpio_initstructure); gpio_bits_reset(GPIOE, GPIO_PINS_2 | GPIO_PINS_3); gpio_bits_reset(GPIOB, GPIO_PINS_9); } // void mux_test(void) { 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 }