main.c 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
  1. /*!
  2. \file main.c
  3. \brief CEC intercommunication
  4. */
  5. /*
  6. Copyright (C) 2017 GigaDevice
  7. 2017-06-06, V1.0.0, firmware for GD32F3x0
  8. */
  9. #include "gd32f3x0.h"
  10. #include <stdlib.h>
  11. #include <stdio.h>
  12. #include "gd32f3x0_eval.h"
  13. #include "systick.h"
  14. void cec_config(void);
  15. extern uint8_t rcvdata[10];
  16. extern __IO uint8_t rcvstatus;
  17. extern uint8_t rcv_inc;
  18. extern uint8_t bytenum;
  19. __IO uint8_t NUM=0U;
  20. /*!
  21. \brief main function
  22. \param[in] none
  23. \param[out] none
  24. \retval none
  25. */
  26. int main(void)
  27. {
  28. /* GPIO clock enable */
  29. rcu_periph_clock_enable(RCU_GPIOA);
  30. rcu_periph_clock_enable(RCU_GPIOB);
  31. rcu_periph_clock_enable(RCU_GPIOC);
  32. rcu_periph_clock_enable(RCU_GPIOF);
  33. /* delay time initialize */
  34. systick_config();
  35. /* configure the CEC peripheral */
  36. cec_config();
  37. /* configure the EXTI */
  38. gd_eval_key_init(KEY_TAMPER, KEY_MODE_EXTI);
  39. gd_eval_key_init(KEY_WAKEUP, KEY_MODE_EXTI);
  40. /* LED1 LED2 initialize */
  41. gd_eval_led_init(LED1);
  42. gd_eval_led_init(LED2);
  43. gd_eval_led_off(LED1);
  44. gd_eval_led_off(LED2);
  45. /* main loop */
  46. while(1){
  47. /* wait receive data */
  48. while(rcvstatus==0U);
  49. if(rcvstatus == 1U){
  50. if((rcvdata[1]==0xA5U)&&(rcvdata[2]==0x5AU)){
  51. gd_eval_led_on(LED1);
  52. delay_1ms(50U);
  53. gd_eval_led_off(LED1);
  54. }
  55. if((rcvdata[1]==0x5AU)&&(rcvdata[2]==0xA5U)){
  56. gd_eval_led_on(LED2);
  57. delay_1ms(50U);
  58. gd_eval_led_off(LED2);
  59. }
  60. }
  61. /* a reception error occured */
  62. rcvstatus = 0U;
  63. }
  64. }
  65. /*!
  66. \brief configure the CEC peripheral
  67. \param[in] none
  68. \param[out] none
  69. \retval none
  70. */
  71. void cec_config(void)
  72. {
  73. /* enable clocks */
  74. rcu_periph_clock_enable(RCU_GPIOB);
  75. rcu_periph_clock_enable(RCU_CEC);
  76. /* configure CEC_LINE_GPIO as output open drain */
  77. gpio_mode_set(GPIOB,GPIO_MODE_AF,GPIO_PUPD_NONE,GPIO_PIN_8);
  78. gpio_output_options_set(GPIOB,GPIO_OTYPE_OD,GPIO_OSPEED_50MHZ,GPIO_PIN_8);
  79. gpio_af_set(GPIOB,GPIO_AF_0,GPIO_PIN_8);
  80. /* configure priority group */
  81. nvic_priority_group_set(NVIC_PRIGROUP_PRE1_SUB3);
  82. /* enable the CEC global interrupt (with higher priority) */
  83. nvic_irq_enable(CEC_IRQn,0U,0U);
  84. /* configure CEC */
  85. cec_init(CEC_SFT_START_STAOM,CEC_SFT_1POINT5_PERIOD,CEC_OWN_ADDRESS2);
  86. cec_error_config(CEC_BROADCAST_ERROR_BIT_OFF,CEC_LONG_PERIOD_ERROR_BIT_OFF,CEC_RISING_PERIOD_ERROR_BIT_OFF,CEC_STOP_RISING_ERROR_BIT_OFF);
  87. cec_reception_tolerance_disable();
  88. /* activate CEC interrupts associated to the set of TX and RX flags */
  89. cec_interrupt_enable(CEC_INTEN_TENDIE | CEC_INTEN_TBRIE | CEC_INTEN_RENDIE | CEC_INTEN_BRIE);
  90. /* activate CEC interrupts associated to the set of TX and RX error */
  91. cec_interrupt_enable(CEC_INTEN_ROIE | CEC_INTEN_BREIE | CEC_INTEN_BPSEIE | CEC_INTEN_BPLEIE
  92. | CEC_INTEN_RAEIE | CEC_INTEN_ARBFIE | CEC_INTEN_TUIE | CEC_INTEN_TERRIE | CEC_INTEN_TAERRIE );
  93. /* enable CEC */
  94. cec_enable();
  95. }