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