ciu32f003_std_exti(1).c 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142
  1. /************************************************************************************************/
  2. /**
  3. * @file ciu32f003_std_exti.c
  4. * @author MCU Ecosystem Development Team
  5. * @brief EXTI STD库驱动
  6. * 实现了EXTI模块的信号线初始化、去初始化等API。
  7. *
  8. *
  9. **************************************************************************************************
  10. * @attention
  11. * Copyright (c) CEC Huada Electronic Design Co.,Ltd. All rights reserved.
  12. *
  13. **************************************************************************************************
  14. */
  15. /************************************************************************************************/
  16. /**
  17. * @addtogroup CIU32F003_STD_Driver
  18. * @{
  19. */
  20. /**
  21. * @addtogroup EXTI
  22. * @{
  23. *
  24. */
  25. /************************************************************************************************/
  26. /*------------------------------------------includes--------------------------------------------*/
  27. #include "ciu32f003_std.h"
  28. #ifdef STD_EXTI_PERIPHERAL_USED
  29. /*-------------------------------------------functions------------------------------------------*/
  30. /************************************************************************************************/
  31. /**
  32. * @addtogroup EXTI_External_Functions
  33. * @{
  34. *
  35. */
  36. /************************************************************************************************/
  37. /**
  38. * @brief EXTI初始化
  39. * @param exti_init_param EXTI初始化参数结构体
  40. * @retval 无
  41. */
  42. void std_exti_init(std_exti_init_t* exti_init_param)
  43. {
  44. uint32_t trigger;
  45. uint32_t exti_mode;
  46. /* 配置GPIO EXTI通道 */
  47. if ((exti_init_param->line_id & EXTI_GPIO) != 0x00U)
  48. {
  49. trigger = exti_init_param->trigger & EXTI_TRIGGER_MASK;
  50. /* 禁止EXTI通道上升沿/下降沿触发 */
  51. std_exti_falling_trigger_disable(exti_init_param->line_id);
  52. std_exti_rising_trigger_disable (exti_init_param->line_id);
  53. /* 使能EXTI通道上升沿触发 */
  54. if ((trigger & EXTI_TRIGGER_RISING) == EXTI_TRIGGER_RISING)
  55. {
  56. std_exti_rising_trigger_enable (exti_init_param->line_id);
  57. }
  58. /* 使能EXTI通道下降沿触发 */
  59. if ((trigger & EXTI_TRIGGER_FALLING) == EXTI_TRIGGER_FALLING)
  60. {
  61. std_exti_falling_trigger_enable(exti_init_param->line_id);
  62. }
  63. /* 设置EXTI通道所对应GPIO端口 */
  64. if ((exti_init_param->line_id & EXTI_GPIO) == EXTI_GPIO)
  65. {
  66. std_exti_set_gpio(exti_init_param->gpio_id, exti_init_param->line_id);
  67. }
  68. }
  69. /* 配置EXTI通道中断/事件唤醒 */
  70. exti_mode = exti_init_param->mode & EXTI_MODE_INTERRUPT_EVENT;
  71. /* 禁止EXTI通道中断/事件唤醒 */
  72. std_exti_interrupt_disable(exti_init_param->line_id);
  73. std_exti_event_disable(exti_init_param->line_id);
  74. /* 使能EXTI通道中断唤醒 */
  75. if ((exti_mode & EXTI_MODE_INTERRUPT) == EXTI_MODE_INTERRUPT)
  76. {
  77. std_exti_interrupt_enable(exti_init_param->line_id);
  78. }
  79. /* 使能EXTI通道事件唤醒 */
  80. if ((exti_mode & EXTI_MODE_EVENT) == EXTI_MODE_EVENT)
  81. {
  82. std_exti_event_enable (exti_init_param->line_id);
  83. }
  84. }
  85. /**
  86. * @brief EXTI去初始化
  87. * @retval 无
  88. */
  89. void std_exti_deinit(void)
  90. {
  91. EXTI->RTSR = 0x00000000U;
  92. EXTI->FTSR = 0x00000000U;
  93. EXTI->PIR = 0x300FFU;
  94. EXTI->EXTICR1 = 0x00000000U;
  95. EXTI->IMR = 0x40000000U;
  96. EXTI->EMR = 0x00000000U;
  97. }
  98. /**
  99. * @brief EXTI初始化结构体初始化
  100. * @param exti_init_struct EXTI初始化参数结构体
  101. * @retval 无
  102. */
  103. void std_exti_struct_init(std_exti_init_t* exti_init_struct)
  104. {
  105. exti_init_struct->line_id = EXTI_LINE_GPIO_PIN0;
  106. exti_init_struct->mode = EXTI_MODE_NONE;
  107. exti_init_struct->trigger = EXTI_TRIGGER_NONE;
  108. exti_init_struct->gpio_id = EXTI_GPIOA;
  109. }
  110. /**
  111. * @}
  112. */
  113. #endif /* STD_EXTI_PERIPHERAL_USED */
  114. /**
  115. * @}
  116. */
  117. /**
  118. * @}
  119. */