led.c 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137
  1. /*
  2. * Copyright (c) 2006-2021, RT-Thread Development Team
  3. *
  4. * SPDX-License-Identifier: Apache-2.0
  5. *
  6. * Change Logs:
  7. * Date Author Notes
  8. * 2011-03-03 lgnq
  9. */
  10. #include <rtthread.h>
  11. #include <rthw.h>
  12. #include "mb9bf506r.h"
  13. #include "led.h"
  14. void rt_hw_led_on(rt_uint8_t num)
  15. {
  16. RT_ASSERT(num < LEDS_MAX_NUMBER);
  17. switch (num)
  18. {
  19. case 1:
  20. USER_LED_PDOR &= ~USER_LED1;
  21. break;
  22. case 2:
  23. USER_LED_PDOR &= ~USER_LED2;
  24. break;
  25. case 3:
  26. USER_LED_PDOR &= ~USER_LED3;
  27. break;
  28. default:
  29. break;
  30. }
  31. }
  32. void rt_hw_led_off(rt_uint8_t num)
  33. {
  34. RT_ASSERT(num < LEDS_MAX_NUMBER);
  35. switch (num)
  36. {
  37. case 1:
  38. USER_LED_PDOR |= USER_LED1;
  39. break;
  40. case 2:
  41. USER_LED_PDOR |= USER_LED2;
  42. break;
  43. case 3:
  44. USER_LED_PDOR |= USER_LED3;
  45. break;
  46. default:
  47. break;
  48. }
  49. }
  50. void rt_hw_led_toggle(rt_uint8_t num)
  51. {
  52. RT_ASSERT(num < LEDS_MAX_NUMBER);
  53. switch (num)
  54. {
  55. case 1:
  56. if (USER_LED_PDOR&USER_LED1)
  57. USER_LED_PDOR &= ~USER_LED1;
  58. else
  59. USER_LED_PDOR |= USER_LED1;
  60. break;
  61. case 2:
  62. if (USER_LED_PDOR&USER_LED2)
  63. USER_LED_PDOR &= ~USER_LED2;
  64. else
  65. USER_LED_PDOR |= USER_LED2;
  66. break;
  67. case 3:
  68. if (USER_LED_PDOR&USER_LED3)
  69. USER_LED_PDOR &= ~USER_LED3;
  70. else
  71. USER_LED_PDOR |= USER_LED3;
  72. break;
  73. default:
  74. break;
  75. }
  76. }
  77. void led_init(void)
  78. {
  79. /*Select CPIO function*/
  80. USER_LED_PFR &= ~USER_LED_MASK;
  81. /* disable analog input */
  82. FM3_GPIO->ADE &= ~USER_LED_MASK;
  83. /*Set CPIO Pull-Up function*/
  84. USER_LED_PCR |= USER_LED_MASK;
  85. /*Make led pins outputs*/
  86. USER_LED_DDR |= USER_LED_MASK;
  87. USER_LED_PDOR |= USER_LED_MASK;
  88. }
  89. void pwm_update(rt_uint16_t value)
  90. {
  91. FM3_BT2_PWM->PDUT = value;
  92. }
  93. static void led1_thread_entry(void *parameter)
  94. {
  95. while (1)
  96. {
  97. rt_hw_led_toggle(1);
  98. rt_thread_delay(RT_TICK_PER_SECOND);
  99. }
  100. }
  101. static void led2_thread_entry(void *parameter)
  102. {
  103. while (1)
  104. {
  105. rt_hw_led_toggle(2);
  106. rt_thread_delay(RT_TICK_PER_SECOND/2);
  107. }
  108. }
  109. static rt_thread_t led1_thread;
  110. static rt_thread_t led2_thread;
  111. void rt_hw_led_init(void)
  112. {
  113. led_init();
  114. led1_thread = rt_thread_create("led1", led1_thread_entry, RT_NULL, 384, 29, 5);
  115. if (led1_thread != RT_NULL)
  116. rt_thread_startup(led1_thread);
  117. led2_thread = rt_thread_create("led2", led2_thread_entry, RT_NULL, 384, 30, 5);
  118. if (led2_thread != RT_NULL)
  119. rt_thread_startup(led2_thread);
  120. }