1 /********************************** (C) COPYRIGHT  *******************************
2 * File Name          : ch32f20x_exti.h
3 * Author             : WCH
4 * Version            : V1.0.0
5 * Date               : 2021/08/08
6 * Description        : This file contains all the functions prototypes for the
7 *                      EXTI firmware library.
8 *******************************************************************************/
9 #ifndef __CH32F20x_EXTI_H
10 #define __CH32F20x_EXTI_H
11 
12 #ifdef __cplusplus
13  extern "C" {
14 #endif
15 
16 #include "ch32f20x.h"
17 
18 /* EXTI mode enumeration */
19 typedef enum
20 {
21   EXTI_Mode_Interrupt = 0x00,
22   EXTI_Mode_Event = 0x04
23 }EXTIMode_TypeDef;
24 
25 /* EXTI Trigger enumeration */
26 typedef enum
27 {
28   EXTI_Trigger_Rising = 0x08,
29   EXTI_Trigger_Falling = 0x0C,
30   EXTI_Trigger_Rising_Falling = 0x10
31 }EXTITrigger_TypeDef;
32 
33 /* EXTI Init Structure definition */
34 typedef struct
35 {
36   uint32_t EXTI_Line;               /* Specifies the EXTI lines to be enabled or disabled.
37                                        This parameter can be any combination of @ref EXTI_Lines */
38 
39   EXTIMode_TypeDef EXTI_Mode;       /* Specifies the mode for the EXTI lines.
40                                        This parameter can be a value of @ref EXTIMode_TypeDef */
41 
42   EXTITrigger_TypeDef EXTI_Trigger; /* Specifies the trigger signal active edge for the EXTI lines.
43                                        This parameter can be a value of @ref EXTIMode_TypeDef */
44 
45   FunctionalState EXTI_LineCmd;     /* Specifies the new state of the selected EXTI lines.
46                                        This parameter can be set either to ENABLE or DISABLE */
47 }EXTI_InitTypeDef;
48 
49 
50 /* EXTI_Lines */
51 #define EXTI_Line0       ((uint32_t)0x00001)  /* External interrupt line 0 */
52 #define EXTI_Line1       ((uint32_t)0x00002)  /* External interrupt line 1 */
53 #define EXTI_Line2       ((uint32_t)0x00004)  /* External interrupt line 2 */
54 #define EXTI_Line3       ((uint32_t)0x00008)  /* External interrupt line 3 */
55 #define EXTI_Line4       ((uint32_t)0x00010)  /* External interrupt line 4 */
56 #define EXTI_Line5       ((uint32_t)0x00020)  /* External interrupt line 5 */
57 #define EXTI_Line6       ((uint32_t)0x00040)  /* External interrupt line 6 */
58 #define EXTI_Line7       ((uint32_t)0x00080)  /* External interrupt line 7 */
59 #define EXTI_Line8       ((uint32_t)0x00100)  /* External interrupt line 8 */
60 #define EXTI_Line9       ((uint32_t)0x00200)  /* External interrupt line 9 */
61 #define EXTI_Line10      ((uint32_t)0x00400)  /* External interrupt line 10 */
62 #define EXTI_Line11      ((uint32_t)0x00800)  /* External interrupt line 11 */
63 #define EXTI_Line12      ((uint32_t)0x01000)  /* External interrupt line 12 */
64 #define EXTI_Line13      ((uint32_t)0x02000)  /* External interrupt line 13 */
65 #define EXTI_Line14      ((uint32_t)0x04000)  /* External interrupt line 14 */
66 #define EXTI_Line15      ((uint32_t)0x08000)  /* External interrupt line 15 */
67 #define EXTI_Line16      ((uint32_t)0x10000)  /* External interrupt line 16 Connected to the PVD Output */
68 #define EXTI_Line17      ((uint32_t)0x20000)  /* External interrupt line 17 Connected to the RTC Alarm event */
69 #define EXTI_Line18      ((uint32_t)0x40000)  /* External interrupt line 18 Connected to the USB Device/USB OTG FS
70                                                  Wakeup from suspend event */
71 #define EXTI_Line19      ((uint32_t)0x80000)  /* External interrupt line 19 Connected to the Ethernet Wakeup event */
72 #define EXTI_Line20      ((uint32_t)0x100000) /* External interrupt line 20 Connected to the USBHD Wakeup event */
73 
74 void EXTI_DeInit(void);
75 void EXTI_Init(EXTI_InitTypeDef* EXTI_InitStruct);
76 void EXTI_StructInit(EXTI_InitTypeDef* EXTI_InitStruct);
77 void EXTI_GenerateSWInterrupt(uint32_t EXTI_Line);
78 FlagStatus EXTI_GetFlagStatus(uint32_t EXTI_Line);
79 void EXTI_ClearFlag(uint32_t EXTI_Line);
80 ITStatus EXTI_GetITStatus(uint32_t EXTI_Line);
81 void EXTI_ClearITPendingBit(uint32_t EXTI_Line);
82 
83 #ifdef __cplusplus
84 }
85 #endif
86 
87 #endif
88 
89