main.c 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172
  1. /*!
  2. \file main.c
  3. \brief IFRP infrared transmit receive demo
  4. */
  5. /*
  6. Copyright (C) 2017 GigaDevice
  7. 2017-06-06, V1.0.0, firmware for GD32F3x0
  8. */
  9. #include "gd32f3x0.h"
  10. #include "rc5_decode.h"
  11. #include "rc5_encode.h"
  12. #include "ir_decode.h"
  13. #include "systick.h"
  14. #include "gd32f3x0_eval.h"
  15. rc5_frame_struct rc5_frame;
  16. extern uint8_t address_index;
  17. extern uint8_t instruction_index;
  18. extern rc5_ctrl_enum rc5_ctrl1;
  19. /* rc5 frame state */
  20. extern __IO status_yes_or_no rc5_frame_received;
  21. extern __IO uint8_t send_operation_completed;
  22. void test_status_led_init(void);
  23. void flash_led(int times);
  24. /*!
  25. \brief main function
  26. \param[in] none
  27. \param[out] none
  28. \retval none
  29. */
  30. int main(void)
  31. {
  32. /* init test status LED */
  33. test_status_led_init();
  34. /* flash LED for test */
  35. flash_led(1);
  36. /* enable the GPIO clock */
  37. rcu_periph_clock_enable(RCU_GPIOA);
  38. rcu_periph_clock_enable(RCU_GPIOB);
  39. rcu_periph_clock_enable(RCU_GPIOC);
  40. rcu_periph_clock_enable(RCU_GPIOF);
  41. /* initialize the infrared application: rc5 encode*/
  42. rc5_encode_init();
  43. /* initialize the infrared application: rc5 decode*/
  44. rc5_decode_init();
  45. delay_1ms(200);
  46. /* test */
  47. {
  48. address_index = 0x06 ;
  49. instruction_index = 15 ;
  50. /*send IR frame (address, command)*/
  51. rc5_encode_send_frame(address_index , instruction_index , rc5_ctrl1);
  52. /* if data do not send compelet */
  53. while(0x00 == send_operation_completed);
  54. /* if data do not received */
  55. while(0x00 == rc5_frame_received);
  56. /* decode the rc5 frame */
  57. rc5_decode(&rc5_frame);
  58. }
  59. /* transferstatus ? passed : failed */
  60. while(1){
  61. if(15 == rc5_frame.command){
  62. /* turn on LED1 */
  63. gd_eval_led_on(LED1);
  64. /* insert 200 ms delay */
  65. delay_1ms(200);
  66. /* turn on LED2 */
  67. gd_eval_led_on(LED2);
  68. /* insert 200 ms delay */
  69. delay_1ms(200);
  70. /* turn on LED3 */
  71. gd_eval_led_on(LED3);
  72. /* insert 200 ms delay */
  73. delay_1ms(200);
  74. /* turn on LED4 */
  75. gd_eval_led_on(LED4);
  76. /* insert 200 ms delay */
  77. delay_1ms(200);
  78. /* turn off LEDs */
  79. gd_eval_led_off(LED1);
  80. gd_eval_led_off(LED2);
  81. gd_eval_led_off(LED3);
  82. gd_eval_led_off(LED4);
  83. /* insert 200 ms delay */
  84. delay_1ms(200);
  85. }else{
  86. /* flash LED for status error */
  87. flash_led(1);
  88. }
  89. }
  90. }
  91. /*!
  92. \brief test status led init
  93. \param[in] none
  94. \param[out] none
  95. \retval none
  96. */
  97. void test_status_led_init(void)
  98. {
  99. /* initialize the leds */
  100. gd_eval_led_init(LED1);
  101. gd_eval_led_init(LED2);
  102. gd_eval_led_init(LED3);
  103. gd_eval_led_init(LED4);
  104. /* close all of leds */
  105. gd_eval_led_off(LED1);
  106. gd_eval_led_off(LED2);
  107. gd_eval_led_off(LED3);
  108. gd_eval_led_off(LED4);
  109. /* setup SysTick timer for 1 msec interrupts */
  110. if(SysTick_Config(SystemCoreClock / 1000)){
  111. /* capture error */
  112. while(1);
  113. }
  114. }
  115. /*!
  116. \brief test status leds
  117. \param[in] times: leds blink times
  118. \param[out] none
  119. \retval none
  120. */
  121. void flash_led(int times)
  122. {
  123. int i;
  124. for(i = 0; i < times; i++){
  125. /* insert 200 ms delay */
  126. delay_1ms(200);
  127. /* turn on leds */
  128. gd_eval_led_on(LED1);
  129. gd_eval_led_on(LED2);
  130. gd_eval_led_on(LED3);
  131. gd_eval_led_on(LED4);
  132. /* insert 200 ms delay */
  133. delay_1ms(200);
  134. /* turn off LEDs */
  135. gd_eval_led_off(LED1);
  136. gd_eval_led_off(LED2);
  137. gd_eval_led_off(LED3);
  138. gd_eval_led_off(LED4);
  139. }
  140. }