led.c 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. /*
  2. * (c) danielinux 2019
  3. * GPLv.2
  4. *
  5. * See LICENSE for details
  6. */
  7. #include <stdint.h>
  8. #include "unicore-mx/stm32/gpio.h"
  9. #include "unicore-mx/stm32/rcc.h"
  10. #include "system.h"
  11. #include "led.h"
  12. #include "pinout.h"
  13. /* LEDS mapping:
  14. *
  15. * E0 - Heartbeat
  16. * E10 - 1
  17. * B2 - 2
  18. * E8 - 3
  19. * E9 - 4
  20. * E1 - 5
  21. * E7 - 6
  22. * B8 - 7
  23. * B9 - 8
  24. */
  25. #define NUM_LEDS 9
  26. #define LD0 (1 << 0)
  27. #define LD1 (1 << 10)
  28. #define LD2 (1 << 2)
  29. #define LD3 (1 << 8)
  30. #define LD4 (1 << 9)
  31. #define LD5 (1 << 1)
  32. #define LD6 (1 << 7)
  33. #define LD7 (1 << 8)
  34. #define LD8 (1 << 9)
  35. #define BANK_B_LD (LD2 | LD7 | LD8)
  36. #define BANK_E_LD (LD0 | LD1 | LD3 | LD4 | LD5 | LD6)
  37. struct pin Leds[9] = {
  38. { GPIOE, 1 << 0 },
  39. { GPIOE, 1 << 10 },
  40. { GPIOB, 1 << 2 },
  41. { GPIOE, 1 << 8 },
  42. { GPIOE, 1 << 9 },
  43. { GPIOE, 1 << 1 },
  44. { GPIOB, 1 << 8 },
  45. { GPIOB, 1 << 9 },
  46. };
  47. void led_setup(void)
  48. {
  49. rcc_periph_clock_enable(RCC_GPIOB);
  50. rcc_periph_clock_enable(RCC_GPIOE);
  51. gpio_mode_setup(GPIOB, GPIO_MODE_OUTPUT, GPIO_PUPD_PULLDOWN, BANK_B_LD);
  52. gpio_set(GPIOB, BANK_B_LD);
  53. gpio_mode_setup(GPIOE, GPIO_MODE_OUTPUT, GPIO_PUPD_PULLDOWN, BANK_E_LD);
  54. gpio_set(GPIOE, BANK_E_LD);
  55. }
  56. void led_on(int led)
  57. {
  58. gpio_set(Leds[led].bank, Leds[led].pin);
  59. }
  60. void led_off(int led)
  61. {
  62. gpio_clear(Leds[led].bank, Leds[led].pin);
  63. }
  64. void led_toggle(int led)
  65. {
  66. if (gpio_get(Leds[led].bank, Leds[led].pin))
  67. gpio_clear(Leds[led].bank, Leds[led].pin);
  68. else
  69. gpio_set(Leds[led].bank, Leds[led].pin);
  70. }
  71. void led_beat(int b)
  72. {
  73. if (b < 1 || b > 8)
  74. return;
  75. gpio_clear(GPIOB, BANK_B_LD);
  76. gpio_clear(GPIOE, BANK_E_LD);
  77. led_on(b);
  78. }