1 /*!
2  * @file        apm32f0xx_eint.h
3  *
4  * @brief       This file contains all the functions prototypes for the EINT firmware library
5  *
6  * @version     V1.0.3
7  *
8  * @date        2022-09-20
9  *
10  * @attention
11  *
12  *  Copyright (C) 2020-2022 Geehy Semiconductor
13  *
14  *  You may not use this file except in compliance with the
15  *  GEEHY COPYRIGHT NOTICE (GEEHY SOFTWARE PACKAGE LICENSE).
16  *
17  *  The program is only for reference, which is distributed in the hope
18  *  that it will be useful and instructional for customers to develop
19  *  their software. Unless required by applicable law or agreed to in
20  *  writing, the program is distributed on an "AS IS" BASIS, WITHOUT
21  *  ANY WARRANTY OR CONDITIONS OF ANY KIND, either express or implied.
22  *  See the GEEHY SOFTWARE PACKAGE LICENSE for the governing permissions
23  *  and limitations under the License.
24  */
25 
26 /* Define to prevent recursive inclusion */
27 #ifndef __APM32F0XX_EINT_H
28 #define __APM32F0XX_EINT_H
29 
30 #ifdef __cplusplus
31 extern "C" {
32 #endif
33 
34 /* Includes */
35 #include "apm32f0xx.h"
36 
37 /** @addtogroup APM32F0xx_StdPeriphDriver
38   @{
39   */
40 
41 /** @addtogroup EINT_Driver
42   @{
43   */
44 
45 /** @defgroup EINT_Macros Macros
46   @{
47   */
48 
49 /* No interrupt selected */
50 #define EINT_LINENONE                  ((uint32_t)0x00000)       /*!< clear EINT line config */
51 
52 /* EINT register reset value */
53 #if defined (APM32F030) || defined (APM32F051)
54 #define EINT_INTMASK_RESET_VALUE       ((uint32_t)(0x0F940000))
55 #elif defined (APM32F091) || defined (APM32F072) || defined (APM32F071) || defined (APM32F070)
56 #define EINT_INTMASK_RESET_VALUE       ((uint32_t)(0x7F840000))
57 #endif
58 #define EINT_EVTMASK_RESET_VALUE       ((uint32_t)(0x00000000))  /*!< EINT Event MASK register reset value */
59 #define EINT_RTSEL_RESET_VALUE         ((uint32_t)(0x00000000))  /*!< EINT Rising Trigger enable register reset value */
60 #define EINT_FTSEL_RESET_VALUE         ((uint32_t)(0x00000000))  /*!< EINT Falling Trigger enable register reset value */
61 #define EINT_PEND_RESET_VALUE          ((uint32_t)(0x00000000))  /*!< EINT Interrupt Pending register reset value */
62 
63 /**@} end of group EINT_Macros */
64 
65 /** @defgroup EINT_Enumerations Enumerations
66   @{
67   */
68 
69 /*!
70  * @brief   EINT mode
71  */
72 typedef enum
73 {
74     EINT_MODE_INTERRUPT    = ((uint8_t)0x00), /*!< EINT mode select interrupt */
75     EINT_MODE_EVENT        = ((uint8_t)0x01), /*!< EINT mode select event */
76 } EINT_MODE_T;
77 
78 /*!
79  * @brief   EINT trigger mode
80  */
81 typedef enum
82 {
83     EINT_TRIGGER_RISING    = ((uint8_t)0x00), /*!< EINT trigger select rising edge */
84     EINT_TRIGGER_FALLING   = ((uint8_t)0x01), /*!< EINT trigger select falling edge */
85     EINT_TRIGGER_ALL       = ((uint8_t)0x02), /*!< EINT trigger select rising and falling edge */
86 } EINT_TRIGGER_T;
87 
88 /*!
89  * @brief   EINT line
90  */
91 typedef enum
92 {
93     EINT_LINE0   = ((uint32_t)0x00000001),  /*!< External interrupt line 0 */
94     EINT_LINE1   = ((uint32_t)0x00000002),  /*!< External interrupt line 1 */
95     EINT_LINE2   = ((uint32_t)0x00000004),  /*!< External interrupt line 2 */
96     EINT_LINE3   = ((uint32_t)0x00000008),  /*!< External interrupt line 3 */
97     EINT_LINE4   = ((uint32_t)0x00000010),  /*!< External interrupt line 4 */
98     EINT_LINE5   = ((uint32_t)0x00000020),  /*!< External interrupt line 5 */
99     EINT_LINE6   = ((uint32_t)0x00000040),  /*!< External interrupt line 6 */
100     EINT_LINE7   = ((uint32_t)0x00000080),  /*!< External interrupt line 7 */
101     EINT_LINE8   = ((uint32_t)0x00000100),  /*!< External interrupt line 8 */
102     EINT_LINE9   = ((uint32_t)0x00000200),  /*!< External interrupt line 9 */
103     EINT_LINE10  = ((uint32_t)0x00000400),  /*!< External interrupt line 10 */
104     EINT_LINE11  = ((uint32_t)0x00000800),  /*!< External interrupt line 11 */
105     EINT_LINE12  = ((uint32_t)0x00001000),  /*!< External interrupt line 12 */
106     EINT_LINE13  = ((uint32_t)0x00002000),  /*!< External interrupt line 13 */
107     EINT_LINE14  = ((uint32_t)0x00004000),  /*!< External interrupt line 14 */
108     EINT_LINE15  = ((uint32_t)0x00008000),  /*!< External interrupt line 15 */
109     EINT_LINE16  = ((uint32_t)0x00010000),  /*!< External interrupt line 16 Connected to the PVD Output, not applicable for 030 */
110     EINT_LINE17  = ((uint32_t)0x00020000),  /*!< External interrupt line 17 Connected to the RTC Alarm event */
111     EINT_LINE18  = ((uint32_t)0x00040000),  /*!< External interrupt line 18 Connected to the RTC Alarm event, only applicable for 072 devices */
112     EINT_LINE19  = ((uint32_t)0x00080000),  /*!< External interrupt line 19 Connected to the RTC Tamper and TimeStamp events */
113     EINT_LINE20  = ((uint32_t)0x00100000),  /*!< External interrupt line 20 Connected to the RTC wakeup event,only applicable for 072 and 091 */
114     EINT_LINE21  = ((uint32_t)0x00200000),  /*!< External interrupt line 21 Connected to the Comparator 1 event,only applicable for 072 and 091 */
115     EINT_LINE22  = ((uint32_t)0x00400000),  /*!< External interrupt line 22 Connected to the Comparator 2 event,only applicable for 072 and 091 */
116     EINT_LINE23  = ((uint32_t)0x00800000),  /*!< External interrupt line 23 Connected to the I2C1 wakeup event,not applicable for 030 */
117     EINT_LINE25  = ((uint32_t)0x02000000),  /*!< External interrupt line 25 Connected to the USART1 wakeup event,not applicable for 030 */
118     EINT_LINE26  = ((uint32_t)0x04000000),  /*!< External interrupt line 26 Connected to the USART2 wakeup event,only applicable for 072 and 091 */
119     EINT_LINE27  = ((uint32_t)0x08000000),  /*!< External interrupt line 27 Connected to the CEC wakeup event,only applicable for 072*/
120     EINT_LINE28  = ((uint32_t)0x10000000),  /*!< External interrupt line 28 Connected to the USART3 wakeup event,only applicable for 091 */
121     EINT_LINE31  = ((int)0x80000000),       /*!< External interrupt line 31 Connected to the VDD USB monitor,only applicable for 072 */
122 } EINT_LINE_T;
123 
124 /**@} end of group EINT_Enumerations */
125 
126 /** @defgroup EINT_Structures Structures
127   @{
128   */
129 
130 /*!
131  * @brief   EINT Config struct definition
132  */
133 typedef struct
134 {
135     uint32_t        line;        /*!< Specifies the new state of the selected EINT lines. */
136     EINT_MODE_T     mode;        /*!< Specifies the mode for the EINT lines. */
137     EINT_TRIGGER_T  trigger;     /*!< Specifies the trigger signal active edge for the EINT lines. */
138     uint8_t         lineCmd;     /*!< Specifies the EINT lines to be enabled or disabled. */
139 } EINT_Config_T;
140 
141 /**@} end of group EINT_Structures */
142 
143 /** @defgroup EINT_Variables Variables
144   @{
145   */
146 
147 /**@} end of group EINT_Variables */
148 
149 /** @defgroup EINT_Functions Functions
150   @{
151   */
152 
153 /* Reset and configuration */
154 void EINT_Reset(void);
155 void EINT_Config(EINT_Config_T* eintConfig);
156 void EINT_ConfigStructInit(EINT_Config_T* eintConfig);
157 
158 /* Interrupt */
159 void EINT_SelectSWInterrupt(uint32_t line);
160 
161 /* Flag */
162 uint8_t EINT_ReadStatusFlag(uint32_t line);
163 void    EINT_ClearStatusFlag(uint32_t line);
164 uint8_t EINT_ReadIntFlag(uint32_t line);
165 void    EINT_ClearIntFlag(uint32_t line);
166 
167 #ifdef __cplusplus
168 }
169 #endif
170 
171 #endif /* __APM32F0XX_EINT_H */
172 
173 /**@} end of group EINT_Functions */
174 /**@} end of group EINT_Driver */
175 /**@} end of group APM32F0xx_StdPeriphDriver */
176