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