]> git.sur5r.net Git - freertos/blob - Demo/CORTEX_STM32F103_IAR/STM32F10xFWLib/src/stm32f10x_exti.c
Start to re-arrange files to include FreeRTOS+ in main download.
[freertos] / Demo / CORTEX_STM32F103_IAR / STM32F10xFWLib / src / stm32f10x_exti.c
1 /******************** (C) COPYRIGHT 2007 STMicroelectronics ********************\r
2 * File Name          : stm32f10x_exti.c\r
3 * Author             : MCD Application Team\r
4 * Date First Issued  : 09/29/2006\r
5 * Description        : This file provides all the EXTI firmware functions.\r
6 ********************************************************************************\r
7 * History:\r
8 * 04/02/2007: V0.2\r
9 * 02/05/2007: V0.1\r
10 * 09/29/2006: V0.01\r
11 ********************************************************************************\r
12 * THE PRESENT SOFTWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS\r
13 * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE TIME.\r
14 * AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY DIRECT,\r
15 * INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE\r
16 * CONTENT OF SUCH SOFTWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING\r
17 * INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.\r
18 *******************************************************************************/\r
19 \r
20 /* Includes ------------------------------------------------------------------*/\r
21 #include "stm32f10x_exti.h"\r
22 \r
23 /* Private typedef -----------------------------------------------------------*/\r
24 /* Private define ------------------------------------------------------------*/\r
25 #define EXTI_LineNone    ((u32)0x00000)  /* No interrupt selected */\r
26 \r
27 /* Private macro -------------------------------------------------------------*/\r
28 /* Private variables ---------------------------------------------------------*/\r
29 /* Private function prototypes -----------------------------------------------*/\r
30 /* Private functions ---------------------------------------------------------*/\r
31 \r
32 /*******************************************************************************\r
33 * Function Name  : EXTI_DeInit\r
34 * Description    : Deinitializes the EXTI peripheral registers to their default \r
35 *                  reset values.\r
36 * Input          : None\r
37 * Output         : None\r
38 * Return         : None\r
39 *******************************************************************************/\r
40 void EXTI_DeInit(void)\r
41 {\r
42   EXTI->IMR = 0x00000000;\r
43   EXTI->EMR = 0x00000000;\r
44   EXTI->RTSR = 0x00000000; \r
45   EXTI->FTSR = 0x00000000; \r
46   EXTI->PR = 0x0007FFFF;\r
47 }\r
48 \r
49 /*******************************************************************************\r
50 * Function Name  : EXTI_Init\r
51 * Description    : Initializes the EXTI peripheral according to the specified\r
52 *                  parameters in the EXTI_InitStruct.\r
53 * Input          : - EXTI_InitStruct: pointer to a EXTI_InitTypeDef structure\r
54 *                    that contains the configuration information for the EXTI\r
55 *                    peripheral.\r
56 * Output         : None\r
57 * Return         : None\r
58 *******************************************************************************/\r
59 void EXTI_Init(EXTI_InitTypeDef* EXTI_InitStruct)\r
60 {\r
61   /* Check the parameters */\r
62   assert(IS_EXTI_MODE(EXTI_InitStruct->EXTI_Mode));\r
63   assert(IS_EXTI_TRIGGER(EXTI_InitStruct->EXTI_Trigger));\r
64   assert(IS_EXTI_LINE(EXTI_InitStruct->EXTI_Line));  \r
65   assert(IS_FUNCTIONAL_STATE(EXTI_InitStruct->EXTI_LineCmd));\r
66      \r
67   if (EXTI_InitStruct->EXTI_LineCmd != DISABLE)\r
68   {\r
69     *(u32 *)(EXTI_BASE + (u32)EXTI_InitStruct->EXTI_Mode)|= EXTI_InitStruct->EXTI_Line;\r
70 \r
71     /* Clear Rising Falling edge configuration */\r
72     EXTI->RTSR &= ~EXTI_InitStruct->EXTI_Line;\r
73     EXTI->FTSR &= ~EXTI_InitStruct->EXTI_Line;\r
74     \r
75     /* Select the trigger for the selected external interrupts */\r
76     if (EXTI_InitStruct->EXTI_Trigger == EXTI_Trigger_Rising_Falling)\r
77     {\r
78       /* Rising Falling edge */\r
79       EXTI->RTSR |= EXTI_InitStruct->EXTI_Line;\r
80       EXTI->FTSR |= EXTI_InitStruct->EXTI_Line;\r
81     }\r
82     else\r
83     {\r
84       *(u32 *)(EXTI_BASE + (u32)EXTI_InitStruct->EXTI_Trigger)|= EXTI_InitStruct->EXTI_Line;\r
85     }\r
86   }\r
87   else\r
88   {\r
89     /* Disable the selected external lines */\r
90     *(u32 *)(EXTI_BASE + (u32)EXTI_InitStruct->EXTI_Mode)&= ~EXTI_InitStruct->EXTI_Line;\r
91   }\r
92 }\r
93 \r
94 /*******************************************************************************\r
95 * Function Name  : EXTI_StructInit\r
96 * Description    : Fills each EXTI_InitStruct member with its reset value.\r
97 * Input          : - EXTI_InitStruct: pointer to a EXTI_InitTypeDef structure\r
98 *                    which will be initialized.\r
99 * Output         : None\r
100 * Return         : None\r
101 *******************************************************************************/\r
102 void EXTI_StructInit(EXTI_InitTypeDef* EXTI_InitStruct)\r
103 {\r
104   EXTI_InitStruct->EXTI_Line = EXTI_LineNone;\r
105   EXTI_InitStruct->EXTI_Mode = EXTI_Mode_Interrupt;\r
106   EXTI_InitStruct->EXTI_Trigger = EXTI_Trigger_Falling;\r
107   EXTI_InitStruct->EXTI_LineCmd = DISABLE;\r
108 }\r
109 \r
110 /*******************************************************************************\r
111 * Function Name  : EXTI_GenerateSWInterrupt\r
112 * Description    : Generates a Software interrupt.\r
113 * Input          : - EXTI_Line: specifies the EXTI lines to be enabled or\r
114 *                    disabled.\r
115 *                    This parameter can be:\r
116 *                       - EXTI_Linex: External interrupt line x where x(0..18)\r
117 * Output         : None\r
118 * Return         : None\r
119 *******************************************************************************/\r
120 void EXTI_GenerateSWInterrupt(u32 EXTI_Line)\r
121 {\r
122   /* Check the parameters */\r
123   assert(IS_EXTI_LINE(EXTI_Line));\r
124   \r
125   EXTI->SWIER |= EXTI_Line;\r
126 }\r
127 \r
128 /*******************************************************************************\r
129 * Function Name  : EXTI_GetFlagStatus\r
130 * Description    : Checks whether the specified EXTI line flag is set or not.\r
131 * Input          : - EXTI_Line: specifies the EXTI lines flag to check.\r
132 *                    This parameter can be:\r
133 *                       - EXTI_Linex: External interrupt line x where x(0..18)\r
134 * Output         : None\r
135 * Return         : The new state of EXTI_Line (SET or RESET).\r
136 *******************************************************************************/\r
137 FlagStatus EXTI_GetFlagStatus(u32 EXTI_Line)\r
138 {\r
139   FlagStatus bitstatus = RESET;\r
140 \r
141   /* Check the parameters */\r
142   assert(IS_GET_EXTI_LINE(EXTI_Line));\r
143   \r
144   if ((EXTI->PR & EXTI_Line) != (u32)RESET)\r
145   {\r
146     bitstatus = SET;\r
147   }\r
148   else\r
149   {\r
150     bitstatus = RESET;\r
151   }\r
152   return bitstatus;\r
153 }\r
154 \r
155 /*******************************************************************************\r
156 * Function Name  : EXTI_ClearFlag\r
157 * Description    : Clears the EXTI\92s line pending flags.\r
158 * Input          : - EXTI_Line: specifies the EXTI lines flags to clear.\r
159 *                    This parameter can be:\r
160 *                       - EXTI_Linex: External interrupt line x where x(0..18)\r
161 * Output         : None\r
162 * Return         : None\r
163 *******************************************************************************/\r
164 void EXTI_ClearFlag(u32 EXTI_Line)\r
165 {\r
166   /* Check the parameters */\r
167   assert(IS_EXTI_LINE(EXTI_Line));\r
168   \r
169   EXTI->PR = EXTI_Line;\r
170 }\r
171 \r
172 /*******************************************************************************\r
173 * Function Name  : EXTI_GetITStatus\r
174 * Description    : Checks whether the specified EXTI line is asserted or not.\r
175 * Input          : - EXTI_Line: specifies the EXTI lines to check.\r
176 *                    This parameter can be:\r
177 *                       - EXTI_Linex: External interrupt line x where x(0..18)\r
178 * Output         : None\r
179 * Return         : The new state of EXTI_Line (SET or RESET).\r
180 *******************************************************************************/\r
181 ITStatus EXTI_GetITStatus(u32 EXTI_Line)\r
182 {\r
183   ITStatus bitstatus = RESET;\r
184   u32 enablestatus = 0;\r
185 \r
186   /* Check the parameters */\r
187   assert(IS_GET_EXTI_LINE(EXTI_Line));\r
188   \r
189   enablestatus =  EXTI->IMR & EXTI_Line;\r
190 \r
191   if (((EXTI->PR & EXTI_Line) != (u32)RESET) && enablestatus)\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 * Function Name  : EXTI_ClearITPendingBit\r
204 * Description    : Clears the EXTI\92s line pending bits.\r
205 * Input          : - EXTI_Line: specifies the EXTI lines to clear.\r
206 *                    This parameter can be:\r
207 *                       - EXTI_Linex: External interrupt line x where x(0..18)\r
208 * Output         : None\r
209 * Return         : None\r
210 *******************************************************************************/\r
211 void EXTI_ClearITPendingBit(u32 EXTI_Line)\r
212 {\r
213   /* Check the parameters */\r
214   assert(IS_EXTI_LINE(EXTI_Line));\r
215   \r
216   EXTI->PR = EXTI_Line;\r
217 }\r
218 \r
219 /******************* (C) COPYRIGHT 2007 STMicroelectronics *****END OF FILE****/\r