1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192 |
- /*
- * (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, 1 << 0 },
- { GPIOE, 1 << 10 },
- { GPIOB, 1 << 2 },
- { GPIOE, 1 << 8 },
- { GPIOE, 1 << 9 },
- { GPIOE, 1 << 1 },
- { GPIOB, 1 << 8 },
- { GPIOB, 1 << 9 },
- };
- 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 < 1 || b > 8)
- return;
- gpio_clear(GPIOB, BANK_B_LD);
- gpio_clear(GPIOE, BANK_E_LD);
- led_on(b);
- }
|