12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394 |
- /*
- * (c) danielinux 2019
- * GPLv.2
- *
- * See LICENSE for details
- */
- #include <stdint.h>
- #include "unicore-mx/stm32/gpio.h"
- #include "unicore-mx/stm32/rcc.h"
- #include "system.h"
- #include "led.h"
- #include "pinout.h"
- /* LEDS mapping:
- *
- * E0 - Heartbeat
- * E10 - 1
- * B2 - 2
- * E8 - 3
- * E9 - 4
- * E1 - 5
- * E7 - 6
- * B8 - 7
- * B9 - 8
- */
- #define NUM_LEDS 9
- #define LD0 (1 << 0)
- #define LD1 (1 << 10)
- #define LD2 (1 << 2)
- #define LD3 (1 << 8)
- #define LD4 (1 << 9)
- #define LD5 (1 << 1)
- #define LD6 (1 << 7)
- #define LD7 (1 << 8)
- #define LD8 (1 << 9)
- #define BANK_B_LD (LD2 | LD7 | LD8)
- #define BANK_E_LD (LD0 | LD1 | LD3 | LD4 | LD5 | LD6)
- struct pin Leds[9] = {
- { GPIOE, LD0 },
- { GPIOE, LD1 },
- { GPIOB, LD2 },
- { GPIOE, LD3 },
- { GPIOE, LD4 },
- { GPIOE, LD5 },
- { GPIOE, LD6 },
- { GPIOB, LD7 },
- { GPIOB, LD8 },
- };
- void led_setup(void)
- {
- rcc_periph_clock_enable(RCC_GPIOB);
- rcc_periph_clock_enable(RCC_GPIOE);
- gpio_mode_setup(GPIOB, GPIO_MODE_OUTPUT, GPIO_PUPD_PULLDOWN, BANK_B_LD);
- gpio_set(GPIOB, BANK_B_LD);
- gpio_mode_setup(GPIOE, GPIO_MODE_OUTPUT, GPIO_PUPD_PULLDOWN, BANK_E_LD);
- gpio_set(GPIOE, BANK_E_LD);
- }
- void led_on(int led)
- {
- gpio_set(Leds[led].bank, Leds[led].pin);
- }
- void led_off(int led)
- {
- gpio_clear(Leds[led].bank, Leds[led].pin);
- }
- void led_toggle(int led)
- {
- if (gpio_get(Leds[led].bank, Leds[led].pin))
- gpio_clear(Leds[led].bank, Leds[led].pin);
- else
- gpio_set(Leds[led].bank, Leds[led].pin);
- }
- void led_beat(int b)
- {
- if (b < 0 || b > 8)
- return;
- gpio_clear(GPIOB, BANK_B_LD);
- gpio_clear(GPIOE, BANK_E_LD);
- if (b != 0)
- led_on(b);
- }
|