1 /*
2  * Copyright 2021 MindMotion Microelectronics Co., Ltd.
3  * All rights reserved.
4  *
5  * SPDX-License-Identifier: BSD-3-Clause
6  */
7 
8 #ifndef __HAL_EXTI_H__
9 #define __HAL_EXTI_H__
10 
11 #include "hal_common.h"
12 
13 /*!
14  * @addtogroup EXTI
15  * @{
16  */
17 
18 /*!
19  * @brief EXTI driver version number.
20  */
21 #define EXTI_DRIVER_VERSION 0u /*!< exti_0. */
22 
23 /*!
24  * @addtogroup EXTI_LINE
25  * @{
26  */
27 #define EXTI_LINE_0  (1u << 0u)   /*!<External Interrupt Line 0  switcher. */
28 #define EXTI_LINE_1  (1u << 1u)   /*!<External Interrupt Line 1  switcher. */
29 #define EXTI_LINE_2  (1u << 2u)   /*!<External Interrupt Line 2  switcher. */
30 #define EXTI_LINE_3  (1u << 3u)   /*!<External Interrupt Line 3  switcher. */
31 #define EXTI_LINE_4  (1u << 4u)   /*!<External Interrupt Line 4  switcher. */
32 #define EXTI_LINE_5  (1u << 5u)   /*!<External Interrupt Line 5  switcher. */
33 #define EXTI_LINE_6  (1u << 6u)   /*!<External Interrupt Line 6  switcher. */
34 #define EXTI_LINE_7  (1u << 7u)   /*!<External Interrupt Line 7  switcher. */
35 #define EXTI_LINE_8  (1u << 8u)   /*!<External Interrupt Line 8  switcher. */
36 #define EXTI_LINE_9  (1u << 9u)   /*!<External Interrupt Line 9  switcher. */
37 #define EXTI_LINE_10 (1u << 10u)  /*!<External Interrupt Line 10 switcher. */
38 #define EXTI_LINE_11 (1u << 11u)  /*!<External Interrupt Line 11 switcher. */
39 #define EXTI_LINE_12 (1u << 12u)  /*!<External Interrupt Line 12 switcher. */
40 #define EXTI_LINE_13 (1u << 13u)  /*!<External Interrupt Line 13 switcher. */
41 #define EXTI_LINE_14 (1u << 14u)  /*!<External Interrupt Line 14 switcher. */
42 #define EXTI_LINE_15 (1u << 15u)  /*!<External Interrupt Line 15 switcher. */
43 #define EXTI_LINE_16 (1u << 16u)  /*!<External Interrupt Line 16 switcher. */
44 #define EXTI_LINE_17 (1u << 17u)  /*!<External Interrupt Line 17 switcher. */
45 #define EXTI_LINE_18 (1u << 18u)  /*!<External Interrupt Line 18 switcher. */
46 #define EXTI_LINE_19 (1u << 19u)  /*!<External Interrupt Line 19 switcher. */
47 #define EXTI_LINE_20 (1u << 20u)  /*!<External Interrupt Line 20 switcher. */
48 #define EXTI_LINE_21 (1u << 21u)  /*!<External Interrupt Line 21 switcher. */
49 #define EXTI_LINE_22 (1u << 22u)  /*!<External Interrupt Line 22 switcher. */
50 #define EXTI_LINE_23 (1u << 23u)  /*!<External Interrupt Line 23 switcher. */
51 #define EXTI_LINE_24 (1u << 24u)  /*!<External Interrupt Line 24 switcher. */
52 /*!
53  * @}
54  */
55 
56 /*!
57  * @brief EXTI trigger input detection edge alt.
58  */
59 typedef enum
60 {
61     EXTI_TriggerIn_Disable     = 0u, /*!< Disable the trigger input interrupt. */
62     EXTI_TriggerIn_RisingEdge  = 1u, /*!< Trigger input rising edge interrupt.*/
63     EXTI_TriggerIn_FallingEdge = 2u, /*!< Trigger input falling edge interrupt.*/
64     EXTI_TriggerIn_BothEdges   = 3u, /*!< Both trigger input rising and falling edge interrupt.*/
65 } EXTI_TriggerIn_Type;
66 
67 /*!
68  * @brief Enable the external interrupt line's interrupts.
69  *
70  * @param EXTIx EXTI instance.
71  * @param lines External interrupt lines. See to @ref EXTI_LINE.
72  * @param enable 'true' to unmask the external interrupt lines' interrupt, 'false' to mask the external interrupt lines' interrupt.
73  * @return None.
74  */
75 void EXTI_EnableLineInterrupt(EXTI_Type * EXTIx, uint32_t lines, bool enable);
76 
77 /*!
78  * @brief Enable the external interrupt line's events.
79  *
80  * @param EXTIx EXTI instance.
81  * @param lines External interrupt lines. See to @ref EXTI_LINE.
82  * @param enable 'true' to unmask the external interrupt lines' event, 'false' to disable the external interrupt lines' event.
83  * @return None.
84  */
85 void EXTI_EnableLineEvent(EXTI_Type * EXTIx, uint32_t lines, bool enable);
86 
87 /*!
88  * @brief Set the line input for triggering interrupts.
89  *
90  * @param EXTIx EXTI instance.
91  * @param lines External interrupt lines. See to @ref EXTI_LINE.
92  * @param trgin The active signal for triggering interrupts. See to @ref EXTI_TriggerIn_Type;
93  * @return None.
94  */
95 void EXTI_SetTriggerIn(EXTI_Type * EXTIx, uint32_t lines, EXTI_TriggerIn_Type trgin);
96 
97 /*!
98  * @brief Do software trigger to trigger interrupts of the indicated lines.
99  *
100  * @param EXTIx EXTI instance.
101  * @param lines External interrupt lines. See to @ref EXTI_LINE.
102  * @return None.
103  */
104 void EXTI_DoSwTrigger(EXTI_Type * EXTIx, uint32_t lines);
105 
106 /*!
107  * @brief Get the interrupt status of the indicated EXTI module.
108  *
109  * @param EXTIx EXTI instance.
110  * @return Line status flags. See to @ref EXTI_LINE.
111  */
112 uint32_t EXTI_GetLineStatus(EXTI_Type * EXTIx);
113 
114 /*!
115  * @brief Clear the interrupt status of the indicated EXTI module.
116  *
117  * @param EXTIx EXTI instance.
118  * @param lines Interrupt status flags. See to @ref EXTI_LINE.
119  * @return None.
120  */
121 void EXTI_ClearLineStatus(EXTI_Type * EXTIx, uint32_t lines);
122 
123 /*!
124  * @}
125  */
126 
127 #endif /* __HAL_EXTI_H__ */
128 
129