DSO138_SourceCodes_v037.rar
[DSO138] / Libraries / STM32F10x_StdPeriph_Driver / src / stm32f10x_exti.c
1 /**\r
2   ******************************************************************************\r
3   * @file    stm32f10x_exti.c\r
4   * @author  MCD Application Team\r
5   * @version V3.3.0\r
6   * @date    04/16/2010\r
7   * @brief   This file provides all the EXTI firmware functions.\r
8   ******************************************************************************\r
9   * @copy\r
10   *\r
11   * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS\r
12   * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE\r
13   * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY\r
14   * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING\r
15   * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE\r
16   * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.\r
17   *\r
18   * <h2><center>&copy; COPYRIGHT 2010 STMicroelectronics</center></h2>\r
19   */ \r
20 \r
21 /* Includes ------------------------------------------------------------------*/\r
22 #include "stm32f10x_exti.h"\r
23 \r
24 /** @addtogroup STM32F10x_StdPeriph_Driver\r
25   * @{\r
26   */\r
27 \r
28 /** @defgroup EXTI \r
29   * @brief EXTI driver modules\r
30   * @{\r
31   */\r
32 \r
33 /** @defgroup EXTI_Private_TypesDefinitions\r
34   * @{\r
35   */\r
36 \r
37 /**\r
38   * @}\r
39   */\r
40 \r
41 /** @defgroup EXTI_Private_Defines\r
42   * @{\r
43   */\r
44 \r
45 #define EXTI_LineNone    ((uint32_t)0x00000)  /* No interrupt selected */\r
46 \r
47 /**\r
48   * @}\r
49   */\r
50 \r
51 /** @defgroup EXTI_Private_Macros\r
52   * @{\r
53   */\r
54 \r
55 /**\r
56   * @}\r
57   */\r
58 \r
59 /** @defgroup EXTI_Private_Variables\r
60   * @{\r
61   */\r
62 \r
63 /**\r
64   * @}\r
65   */\r
66 \r
67 /** @defgroup EXTI_Private_FunctionPrototypes\r
68   * @{\r
69   */\r
70 \r
71 /**\r
72   * @}\r
73   */\r
74 \r
75 /** @defgroup EXTI_Private_Functions\r
76   * @{\r
77   */\r
78 \r
79 /**\r
80   * @brief  Deinitializes the EXTI peripheral registers to their default reset values.\r
81   * @param  None\r
82   * @retval None\r
83   */\r
84 void EXTI_DeInit(void)\r
85 {\r
86   EXTI->IMR = 0x00000000;\r
87   EXTI->EMR = 0x00000000;\r
88   EXTI->RTSR = 0x00000000; \r
89   EXTI->FTSR = 0x00000000; \r
90   EXTI->PR = 0x000FFFFF;\r
91 }\r
92 \r
93 /**\r
94   * @brief  Initializes the EXTI peripheral according to the specified\r
95   *   parameters in the EXTI_InitStruct.\r
96   * @param  EXTI_InitStruct: pointer to a EXTI_InitTypeDef structure\r
97   *   that contains the configuration information for the EXTI peripheral.\r
98   * @retval None\r
99   */\r
100 void EXTI_Init(EXTI_InitTypeDef* EXTI_InitStruct)\r
101 {\r
102   uint32_t tmp = 0;\r
103 \r
104   /* Check the parameters */\r
105   assert_param(IS_EXTI_MODE(EXTI_InitStruct->EXTI_Mode));\r
106   assert_param(IS_EXTI_TRIGGER(EXTI_InitStruct->EXTI_Trigger));\r
107   assert_param(IS_EXTI_LINE(EXTI_InitStruct->EXTI_Line));  \r
108   assert_param(IS_FUNCTIONAL_STATE(EXTI_InitStruct->EXTI_LineCmd));\r
109 \r
110   tmp = (uint32_t)EXTI_BASE;\r
111      \r
112   if (EXTI_InitStruct->EXTI_LineCmd != DISABLE)\r
113   {\r
114     /* Clear EXTI line configuration */\r
115     EXTI->IMR &= ~EXTI_InitStruct->EXTI_Line;\r
116     EXTI->EMR &= ~EXTI_InitStruct->EXTI_Line;\r
117     \r
118     tmp += EXTI_InitStruct->EXTI_Mode;\r
119 \r
120     *(__IO uint32_t *) tmp |= EXTI_InitStruct->EXTI_Line;\r
121 \r
122     /* Clear Rising Falling edge configuration */\r
123     EXTI->RTSR &= ~EXTI_InitStruct->EXTI_Line;\r
124     EXTI->FTSR &= ~EXTI_InitStruct->EXTI_Line;\r
125     \r
126     /* Select the trigger for the selected external interrupts */\r
127     if (EXTI_InitStruct->EXTI_Trigger == EXTI_Trigger_Rising_Falling)\r
128     {\r
129       /* Rising Falling edge */\r
130       EXTI->RTSR |= EXTI_InitStruct->EXTI_Line;\r
131       EXTI->FTSR |= EXTI_InitStruct->EXTI_Line;\r
132     }\r
133     else\r
134     {\r
135       tmp = (uint32_t)EXTI_BASE;\r
136       tmp += EXTI_InitStruct->EXTI_Trigger;\r
137 \r
138       *(__IO uint32_t *) tmp |= EXTI_InitStruct->EXTI_Line;\r
139     }\r
140   }\r
141   else\r
142   {\r
143     tmp += EXTI_InitStruct->EXTI_Mode;\r
144 \r
145     /* Disable the selected external lines */\r
146     *(__IO uint32_t *) tmp &= ~EXTI_InitStruct->EXTI_Line;\r
147   }\r
148 }\r
149 \r
150 /**\r
151   * @brief  Fills each EXTI_InitStruct member with its reset value.\r
152   * @param  EXTI_InitStruct: pointer to a EXTI_InitTypeDef structure which will\r
153   *   be initialized.\r
154   * @retval None\r
155   */\r
156 void EXTI_StructInit(EXTI_InitTypeDef* EXTI_InitStruct)\r
157 {\r
158   EXTI_InitStruct->EXTI_Line = EXTI_LineNone;\r
159   EXTI_InitStruct->EXTI_Mode = EXTI_Mode_Interrupt;\r
160   EXTI_InitStruct->EXTI_Trigger = EXTI_Trigger_Falling;\r
161   EXTI_InitStruct->EXTI_LineCmd = DISABLE;\r
162 }\r
163 \r
164 /**\r
165   * @brief  Generates a Software interrupt.\r
166   * @param  EXTI_Line: specifies the EXTI lines to be enabled or disabled.\r
167   *   This parameter can be any combination of EXTI_Linex where x can be (0..19).\r
168   * @retval None\r
169   */\r
170 void EXTI_GenerateSWInterrupt(uint32_t EXTI_Line)\r
171 {\r
172   /* Check the parameters */\r
173   assert_param(IS_EXTI_LINE(EXTI_Line));\r
174   \r
175   EXTI->SWIER |= EXTI_Line;\r
176 }\r
177 \r
178 /**\r
179   * @brief  Checks whether the specified EXTI line flag is set or not.\r
180   * @param  EXTI_Line: specifies the EXTI line flag to check.\r
181   *   This parameter can be:\r
182   *     @arg EXTI_Linex: External interrupt line x where x(0..19)\r
183   * @retval The new state of EXTI_Line (SET or RESET).\r
184   */\r
185 FlagStatus EXTI_GetFlagStatus(uint32_t EXTI_Line)\r
186 {\r
187   FlagStatus bitstatus = RESET;\r
188   /* Check the parameters */\r
189   assert_param(IS_GET_EXTI_LINE(EXTI_Line));\r
190   \r
191   if ((EXTI->PR & EXTI_Line) != (uint32_t)RESET)\r
192   {\r
193     bitstatus = SET;\r
194   }\r
195   else\r
196   {\r
197     bitstatus = RESET;\r
198   }\r
199   return bitstatus;\r
200 }\r
201 \r
202 /**\r
203   * @brief  Clears the EXTI\92s line pending flags.\r
204   * @param  EXTI_Line: specifies the EXTI lines flags to clear.\r
205   *   This parameter can be any combination of EXTI_Linex where x can be (0..19).\r
206   * @retval None\r
207   */\r
208 void EXTI_ClearFlag(uint32_t EXTI_Line)\r
209 {\r
210   /* Check the parameters */\r
211   assert_param(IS_EXTI_LINE(EXTI_Line));\r
212   \r
213   EXTI->PR = EXTI_Line;\r
214 }\r
215 \r
216 /**\r
217   * @brief  Checks whether the specified EXTI line is asserted or not.\r
218   * @param  EXTI_Line: specifies the EXTI line to check.\r
219   *   This parameter can be:\r
220   *     @arg EXTI_Linex: External interrupt line x where x(0..19)\r
221   * @retval The new state of EXTI_Line (SET or RESET).\r
222   */\r
223 ITStatus EXTI_GetITStatus(uint32_t EXTI_Line)\r
224 {\r
225   ITStatus bitstatus = RESET;\r
226   uint32_t enablestatus = 0;\r
227   /* Check the parameters */\r
228   assert_param(IS_GET_EXTI_LINE(EXTI_Line));\r
229   \r
230   enablestatus =  EXTI->IMR & EXTI_Line;\r
231   if (((EXTI->PR & EXTI_Line) != (uint32_t)RESET) && (enablestatus != (uint32_t)RESET))\r
232   {\r
233     bitstatus = SET;\r
234   }\r
235   else\r
236   {\r
237     bitstatus = RESET;\r
238   }\r
239   return bitstatus;\r
240 }\r
241 \r
242 /**\r
243   * @brief  Clears the EXTI\92s line pending bits.\r
244   * @param  EXTI_Line: specifies the EXTI lines to clear.\r
245   *   This parameter can be any combination of EXTI_Linex where x can be (0..19).\r
246   * @retval None\r
247   */\r
248 void EXTI_ClearITPendingBit(uint32_t EXTI_Line)\r
249 {\r
250   /* Check the parameters */\r
251   assert_param(IS_EXTI_LINE(EXTI_Line));\r
252   \r
253   EXTI->PR = EXTI_Line;\r
254 }\r
255 \r
256 /**\r
257   * @}\r
258   */\r
259 \r
260 /**\r
261   * @}\r
262   */\r
263 \r
264 /**\r
265   * @}\r
266   */\r
267 \r
268 /******************* (C) COPYRIGHT 2010 STMicroelectronics *****END OF FILE****/\r