philippe s. / mbed-dev

Fork of mbed-dev by mbed official

Committer:
neurofun
Date:
Tue Feb 23 21:59:35 2016 +0000
Revision:
70:b3a5af880266
Parent:
0:9b334a45a8ff
Edited DAC routines to allow for the simultaneous use of three channels from two DACs as seen on the STM32F334R8 and STM32F303K8. Edited ADC routines to allow for the simultaneous use of more than one ADC.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
bogdanm 0:9b334a45a8ff 1 /**
bogdanm 0:9b334a45a8ff 2 ******************************************************************************
bogdanm 0:9b334a45a8ff 3 * @file stm32f30x_exti.c
bogdanm 0:9b334a45a8ff 4 * @author MCD Application Team
bogdanm 0:9b334a45a8ff 5 * @version V1.1.0
bogdanm 0:9b334a45a8ff 6 * @date 27-February-2014
bogdanm 0:9b334a45a8ff 7 * @brief This file provides firmware functions to manage the following
bogdanm 0:9b334a45a8ff 8 * functionalities of the EXTI peripheral:
bogdanm 0:9b334a45a8ff 9 * + Initialization and Configuration
bogdanm 0:9b334a45a8ff 10 * + Interrupts and flags management
bogdanm 0:9b334a45a8ff 11 *
bogdanm 0:9b334a45a8ff 12 @verbatim
bogdanm 0:9b334a45a8ff 13 ===============================================================================
bogdanm 0:9b334a45a8ff 14 ##### EXTI features #####
bogdanm 0:9b334a45a8ff 15 ===============================================================================
bogdanm 0:9b334a45a8ff 16 [..] External interrupt/event lines are mapped as following:
bogdanm 0:9b334a45a8ff 17 (#) All available GPIO pins are connected to the 16 external
bogdanm 0:9b334a45a8ff 18 interrupt/event lines from EXTI0 to EXTI15.
bogdanm 0:9b334a45a8ff 19 (#) EXTI line 16 is connected to the PVD output
bogdanm 0:9b334a45a8ff 20 (#) EXTI line 17 is connected to the RTC Alarm event
bogdanm 0:9b334a45a8ff 21 (#) EXTI line 18 is connected to USB Device wakeup event
bogdanm 0:9b334a45a8ff 22 (#) EXTI line 19 is connected to the RTC Tamper and TimeStamp events
bogdanm 0:9b334a45a8ff 23 (#) EXTI line 20 is connected to the RTC wakeup event
bogdanm 0:9b334a45a8ff 24 (#) EXTI line 21 is connected to the Comparator 1 wakeup event
bogdanm 0:9b334a45a8ff 25 (#) EXTI line 22 is connected to the Comparator 2 wakeup event
bogdanm 0:9b334a45a8ff 26 (#) EXTI line 23 is connected to the I2C1 wakeup event
bogdanm 0:9b334a45a8ff 27 (#) EXTI line 24 is connected to the I2C2 wakeup event
bogdanm 0:9b334a45a8ff 28 (#) EXTI line 25 is connected to the USART1 wakeup event
bogdanm 0:9b334a45a8ff 29 (#) EXTI line 26 is connected to the USART2 wakeup event
bogdanm 0:9b334a45a8ff 30 (#) EXTI line 27 is reserved
bogdanm 0:9b334a45a8ff 31 (#) EXTI line 28 is connected to the USART3 wakeup event
bogdanm 0:9b334a45a8ff 32 (#) EXTI line 29 is connected to the Comparator 3 event
bogdanm 0:9b334a45a8ff 33 (#) EXTI line 30 is connected to the Comparator 4 event
bogdanm 0:9b334a45a8ff 34 (#) EXTI line 31 is connected to the Comparator 5 event
bogdanm 0:9b334a45a8ff 35 (#) EXTI line 32 is connected to the Comparator 6 event
bogdanm 0:9b334a45a8ff 36 (#) EXTI line 33 is connected to the Comparator 7 event
bogdanm 0:9b334a45a8ff 37 (#) EXTI line 34 is connected for thr UART4 wakeup event
bogdanm 0:9b334a45a8ff 38 (#) EXTI line 35 is connected for the UART5 wakeup event
bogdanm 0:9b334a45a8ff 39
bogdanm 0:9b334a45a8ff 40 ##### How to use this driver #####
bogdanm 0:9b334a45a8ff 41 ===============================================================================
bogdanm 0:9b334a45a8ff 42 [..] In order to use an I/O pin as an external interrupt source,
bogdanm 0:9b334a45a8ff 43 follow steps below:
bogdanm 0:9b334a45a8ff 44 (#) Configure the I/O in input mode using GPIO_Init().
bogdanm 0:9b334a45a8ff 45 (#) Select the input source pin for the EXTI line using
bogdanm 0:9b334a45a8ff 46 SYSCFG_EXTILineConfig().
bogdanm 0:9b334a45a8ff 47 (#) Select the mode(interrupt, event) and configure the trigger
bogdanm 0:9b334a45a8ff 48 selection (Rising, falling or both) using EXTI_Init(). For the
bogdanm 0:9b334a45a8ff 49 internal interrupt, the trigger selection is not needed
bogdanm 0:9b334a45a8ff 50 (the active edge is always the rising one).
bogdanm 0:9b334a45a8ff 51 (#) Configure NVIC IRQ channel mapped to the EXTI line using NVIC_Init().
bogdanm 0:9b334a45a8ff 52 (#) Optionally, you can generate a software interrupt using the function
bogdanm 0:9b334a45a8ff 53 EXTI_GenerateSWInterrupt().
bogdanm 0:9b334a45a8ff 54 [..]
bogdanm 0:9b334a45a8ff 55 (@) SYSCFG APB clock must be enabled to get write access to SYSCFG_EXTICRx
bogdanm 0:9b334a45a8ff 56 registers using RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE);
bogdanm 0:9b334a45a8ff 57
bogdanm 0:9b334a45a8ff 58 @endverbatim
bogdanm 0:9b334a45a8ff 59
bogdanm 0:9b334a45a8ff 60 ******************************************************************************
bogdanm 0:9b334a45a8ff 61 * @attention
bogdanm 0:9b334a45a8ff 62 *
bogdanm 0:9b334a45a8ff 63 * <h2><center>&copy; COPYRIGHT(c) 2014 STMicroelectronics</center></h2>
bogdanm 0:9b334a45a8ff 64 *
bogdanm 0:9b334a45a8ff 65 * Redistribution and use in source and binary forms, with or without modification,
bogdanm 0:9b334a45a8ff 66 * are permitted provided that the following conditions are met:
bogdanm 0:9b334a45a8ff 67 * 1. Redistributions of source code must retain the above copyright notice,
bogdanm 0:9b334a45a8ff 68 * this list of conditions and the following disclaimer.
bogdanm 0:9b334a45a8ff 69 * 2. Redistributions in binary form must reproduce the above copyright notice,
bogdanm 0:9b334a45a8ff 70 * this list of conditions and the following disclaimer in the documentation
bogdanm 0:9b334a45a8ff 71 * and/or other materials provided with the distribution.
bogdanm 0:9b334a45a8ff 72 * 3. Neither the name of STMicroelectronics nor the names of its contributors
bogdanm 0:9b334a45a8ff 73 * may be used to endorse or promote products derived from this software
bogdanm 0:9b334a45a8ff 74 * without specific prior written permission.
bogdanm 0:9b334a45a8ff 75 *
bogdanm 0:9b334a45a8ff 76 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
bogdanm 0:9b334a45a8ff 77 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
bogdanm 0:9b334a45a8ff 78 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
bogdanm 0:9b334a45a8ff 79 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
bogdanm 0:9b334a45a8ff 80 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
bogdanm 0:9b334a45a8ff 81 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
bogdanm 0:9b334a45a8ff 82 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
bogdanm 0:9b334a45a8ff 83 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
bogdanm 0:9b334a45a8ff 84 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
bogdanm 0:9b334a45a8ff 85 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
bogdanm 0:9b334a45a8ff 86 *
bogdanm 0:9b334a45a8ff 87 ******************************************************************************
bogdanm 0:9b334a45a8ff 88 */
bogdanm 0:9b334a45a8ff 89
bogdanm 0:9b334a45a8ff 90 /* Includes ------------------------------------------------------------------*/
bogdanm 0:9b334a45a8ff 91 #include "stm32f30x_exti.h"
bogdanm 0:9b334a45a8ff 92
bogdanm 0:9b334a45a8ff 93 /** @addtogroup STM32F30x_StdPeriph_Driver
bogdanm 0:9b334a45a8ff 94 * @{
bogdanm 0:9b334a45a8ff 95 */
bogdanm 0:9b334a45a8ff 96
bogdanm 0:9b334a45a8ff 97 /** @defgroup EXTI
bogdanm 0:9b334a45a8ff 98 * @brief EXTI driver modules
bogdanm 0:9b334a45a8ff 99 * @{
bogdanm 0:9b334a45a8ff 100 */
bogdanm 0:9b334a45a8ff 101
bogdanm 0:9b334a45a8ff 102
bogdanm 0:9b334a45a8ff 103 /* Private typedef -----------------------------------------------------------*/
bogdanm 0:9b334a45a8ff 104 /* Private define ------------------------------------------------------------*/
bogdanm 0:9b334a45a8ff 105 #define EXTI_LINENONE ((uint32_t)0x00000) /* No interrupt selected */
bogdanm 0:9b334a45a8ff 106
bogdanm 0:9b334a45a8ff 107 /* Private macro -------------------------------------------------------------*/
bogdanm 0:9b334a45a8ff 108 /* Private variables ---------------------------------------------------------*/
bogdanm 0:9b334a45a8ff 109 /* Private function prototypes -----------------------------------------------*/
bogdanm 0:9b334a45a8ff 110 /* Private functions ---------------------------------------------------------*/
bogdanm 0:9b334a45a8ff 111
bogdanm 0:9b334a45a8ff 112 /** @defgroup EXTI_Private_Functions
bogdanm 0:9b334a45a8ff 113 * @{
bogdanm 0:9b334a45a8ff 114 */
bogdanm 0:9b334a45a8ff 115
bogdanm 0:9b334a45a8ff 116 /** @defgroup EXTI_Group1 Initialization and Configuration functions
bogdanm 0:9b334a45a8ff 117 * @brief Initialization and Configuration functions
bogdanm 0:9b334a45a8ff 118 *
bogdanm 0:9b334a45a8ff 119 @verbatim
bogdanm 0:9b334a45a8ff 120 ===============================================================================
bogdanm 0:9b334a45a8ff 121 ##### Initialization and Configuration functions #####
bogdanm 0:9b334a45a8ff 122 ===============================================================================
bogdanm 0:9b334a45a8ff 123
bogdanm 0:9b334a45a8ff 124 @endverbatim
bogdanm 0:9b334a45a8ff 125 * @{
bogdanm 0:9b334a45a8ff 126 */
bogdanm 0:9b334a45a8ff 127
bogdanm 0:9b334a45a8ff 128 /**
bogdanm 0:9b334a45a8ff 129 * @brief Deinitializes the EXTI peripheral registers to their default reset
bogdanm 0:9b334a45a8ff 130 * values.
bogdanm 0:9b334a45a8ff 131 * @param None
bogdanm 0:9b334a45a8ff 132 * @retval None
bogdanm 0:9b334a45a8ff 133 */
bogdanm 0:9b334a45a8ff 134 void EXTI_DeInit(void)
bogdanm 0:9b334a45a8ff 135 {
bogdanm 0:9b334a45a8ff 136 EXTI->IMR = 0x1F800000;
bogdanm 0:9b334a45a8ff 137 EXTI->EMR = 0x00000000;
bogdanm 0:9b334a45a8ff 138 EXTI->RTSR = 0x00000000;
bogdanm 0:9b334a45a8ff 139 EXTI->FTSR = 0x00000000;
bogdanm 0:9b334a45a8ff 140 EXTI->SWIER = 0x00000000;
bogdanm 0:9b334a45a8ff 141 EXTI->PR = 0xE07FFFFF;
bogdanm 0:9b334a45a8ff 142 EXTI->IMR2 = 0x0000000C;
bogdanm 0:9b334a45a8ff 143 EXTI->EMR2 = 0x00000000;
bogdanm 0:9b334a45a8ff 144 EXTI->RTSR2 = 0x00000000;
bogdanm 0:9b334a45a8ff 145 EXTI->FTSR2 = 0x00000000;
bogdanm 0:9b334a45a8ff 146 EXTI->SWIER2 = 0x00000000;
bogdanm 0:9b334a45a8ff 147 EXTI->PR2 = 0x00000003;
bogdanm 0:9b334a45a8ff 148 }
bogdanm 0:9b334a45a8ff 149
bogdanm 0:9b334a45a8ff 150 /**
bogdanm 0:9b334a45a8ff 151 * @brief Initializes the EXTI peripheral according to the specified
bogdanm 0:9b334a45a8ff 152 * parameters in the EXTI_InitStruct.
bogdanm 0:9b334a45a8ff 153 * EXTI_Line specifies the EXTI line (EXTI0....EXTI35).
bogdanm 0:9b334a45a8ff 154 * EXTI_Mode specifies which EXTI line is used as interrupt or an event.
bogdanm 0:9b334a45a8ff 155 * EXTI_Trigger selects the trigger. When the trigger occurs, interrupt
bogdanm 0:9b334a45a8ff 156 * pending bit will be set.
bogdanm 0:9b334a45a8ff 157 * EXTI_LineCmd controls (Enable/Disable) the EXTI line.
bogdanm 0:9b334a45a8ff 158 * @param EXTI_InitStruct: pointer to a EXTI_InitTypeDef structure that
bogdanm 0:9b334a45a8ff 159 * contains the configuration information for the EXTI peripheral.
bogdanm 0:9b334a45a8ff 160 * @retval None
bogdanm 0:9b334a45a8ff 161 */
bogdanm 0:9b334a45a8ff 162
bogdanm 0:9b334a45a8ff 163
bogdanm 0:9b334a45a8ff 164 void EXTI_Init(EXTI_InitTypeDef* EXTI_InitStruct)
bogdanm 0:9b334a45a8ff 165 {
bogdanm 0:9b334a45a8ff 166 uint32_t tmp = 0;
bogdanm 0:9b334a45a8ff 167
bogdanm 0:9b334a45a8ff 168 /* Check the parameters */
bogdanm 0:9b334a45a8ff 169 assert_param(IS_EXTI_MODE(EXTI_InitStruct->EXTI_Mode));
bogdanm 0:9b334a45a8ff 170 assert_param(IS_EXTI_TRIGGER(EXTI_InitStruct->EXTI_Trigger));
bogdanm 0:9b334a45a8ff 171 assert_param(IS_EXTI_LINE_ALL(EXTI_InitStruct->EXTI_Line));
bogdanm 0:9b334a45a8ff 172 assert_param(IS_FUNCTIONAL_STATE(EXTI_InitStruct->EXTI_LineCmd));
bogdanm 0:9b334a45a8ff 173
bogdanm 0:9b334a45a8ff 174 tmp = (uint32_t)EXTI_BASE;
bogdanm 0:9b334a45a8ff 175
bogdanm 0:9b334a45a8ff 176 if (EXTI_InitStruct->EXTI_LineCmd != DISABLE)
bogdanm 0:9b334a45a8ff 177 {
bogdanm 0:9b334a45a8ff 178 /* Clear EXTI line configuration */
bogdanm 0:9b334a45a8ff 179 *(__IO uint32_t *) (((uint32_t) &(EXTI->IMR)) + ((EXTI_InitStruct->EXTI_Line) >> 5 ) * 0x20) &= ~(uint32_t)(1 << (EXTI_InitStruct->EXTI_Line & 0x1F));
bogdanm 0:9b334a45a8ff 180 *(__IO uint32_t *) (((uint32_t) &(EXTI->EMR)) + ((EXTI_InitStruct->EXTI_Line) >> 5 ) * 0x20) &= ~(uint32_t)(1 << (EXTI_InitStruct->EXTI_Line & 0x1F));
bogdanm 0:9b334a45a8ff 181
bogdanm 0:9b334a45a8ff 182 tmp += EXTI_InitStruct->EXTI_Mode + (((EXTI_InitStruct->EXTI_Line) >> 5 ) * 0x20);
bogdanm 0:9b334a45a8ff 183
bogdanm 0:9b334a45a8ff 184 *(__IO uint32_t *) tmp |= (uint32_t)(1 << (EXTI_InitStruct->EXTI_Line & 0x1F));
bogdanm 0:9b334a45a8ff 185
bogdanm 0:9b334a45a8ff 186 tmp = (uint32_t)EXTI_BASE;
bogdanm 0:9b334a45a8ff 187
bogdanm 0:9b334a45a8ff 188 /* Clear Rising Falling edge configuration */
bogdanm 0:9b334a45a8ff 189 *(__IO uint32_t *) (((uint32_t) &(EXTI->RTSR)) + ((EXTI_InitStruct->EXTI_Line) >> 5 ) * 0x20) &= ~(uint32_t)(1 << (EXTI_InitStruct->EXTI_Line & 0x1F));
bogdanm 0:9b334a45a8ff 190 *(__IO uint32_t *) (((uint32_t) &(EXTI->FTSR)) + ((EXTI_InitStruct->EXTI_Line) >> 5 ) * 0x20) &= ~(uint32_t)(1 << (EXTI_InitStruct->EXTI_Line & 0x1F));
bogdanm 0:9b334a45a8ff 191
bogdanm 0:9b334a45a8ff 192 /* Select the trigger for the selected interrupts */
bogdanm 0:9b334a45a8ff 193 if (EXTI_InitStruct->EXTI_Trigger == EXTI_Trigger_Rising_Falling)
bogdanm 0:9b334a45a8ff 194 {
bogdanm 0:9b334a45a8ff 195 /* Rising Falling edge */
bogdanm 0:9b334a45a8ff 196 *(__IO uint32_t *) (((uint32_t) &(EXTI->RTSR)) + ((EXTI_InitStruct->EXTI_Line) >> 5 ) * 0x20) |= (uint32_t)(1 << (EXTI_InitStruct->EXTI_Line & 0x1F));
bogdanm 0:9b334a45a8ff 197 *(__IO uint32_t *) (((uint32_t) &(EXTI->FTSR)) + ((EXTI_InitStruct->EXTI_Line) >> 5 ) * 0x20) |= (uint32_t)(1 << (EXTI_InitStruct->EXTI_Line & 0x1F));
bogdanm 0:9b334a45a8ff 198 }
bogdanm 0:9b334a45a8ff 199 else
bogdanm 0:9b334a45a8ff 200 {
bogdanm 0:9b334a45a8ff 201 tmp += EXTI_InitStruct->EXTI_Trigger + (((EXTI_InitStruct->EXTI_Line) >> 5 ) * 0x20);
bogdanm 0:9b334a45a8ff 202
bogdanm 0:9b334a45a8ff 203 *(__IO uint32_t *) tmp |= (uint32_t)(1 << (EXTI_InitStruct->EXTI_Line & 0x1F));
bogdanm 0:9b334a45a8ff 204 }
bogdanm 0:9b334a45a8ff 205 }
bogdanm 0:9b334a45a8ff 206
bogdanm 0:9b334a45a8ff 207 else
bogdanm 0:9b334a45a8ff 208 {
bogdanm 0:9b334a45a8ff 209 tmp += EXTI_InitStruct->EXTI_Mode + (((EXTI_InitStruct->EXTI_Line) >> 5 ) * 0x20);
bogdanm 0:9b334a45a8ff 210
bogdanm 0:9b334a45a8ff 211 /* Disable the selected external lines */
bogdanm 0:9b334a45a8ff 212 *(__IO uint32_t *) tmp &= ~(uint32_t)(1 << (EXTI_InitStruct->EXTI_Line & 0x1F));
bogdanm 0:9b334a45a8ff 213 }
bogdanm 0:9b334a45a8ff 214
bogdanm 0:9b334a45a8ff 215 }
bogdanm 0:9b334a45a8ff 216
bogdanm 0:9b334a45a8ff 217 /**
bogdanm 0:9b334a45a8ff 218 * @brief Fills each EXTI_InitStruct member with its reset value.
bogdanm 0:9b334a45a8ff 219 * @param EXTI_InitStruct: pointer to a EXTI_InitTypeDef structure which will
bogdanm 0:9b334a45a8ff 220 * be initialized.
bogdanm 0:9b334a45a8ff 221 * @retval None
bogdanm 0:9b334a45a8ff 222 */
bogdanm 0:9b334a45a8ff 223 void EXTI_StructInit(EXTI_InitTypeDef* EXTI_InitStruct)
bogdanm 0:9b334a45a8ff 224 {
bogdanm 0:9b334a45a8ff 225 EXTI_InitStruct->EXTI_Line = EXTI_LINENONE;
bogdanm 0:9b334a45a8ff 226 EXTI_InitStruct->EXTI_Mode = EXTI_Mode_Interrupt;
bogdanm 0:9b334a45a8ff 227 EXTI_InitStruct->EXTI_Trigger = EXTI_Trigger_Rising_Falling;
bogdanm 0:9b334a45a8ff 228 EXTI_InitStruct->EXTI_LineCmd = DISABLE;
bogdanm 0:9b334a45a8ff 229 }
bogdanm 0:9b334a45a8ff 230
bogdanm 0:9b334a45a8ff 231 /**
bogdanm 0:9b334a45a8ff 232 * @brief Generates a Software interrupt on selected EXTI line.
bogdanm 0:9b334a45a8ff 233 * @param EXTI_Line: specifies the EXTI line on which the software interrupt
bogdanm 0:9b334a45a8ff 234 * will be generated.
bogdanm 0:9b334a45a8ff 235 * This parameter can be any combination of EXTI_Linex where x can be (0..20).
bogdanm 0:9b334a45a8ff 236 * @retval None
bogdanm 0:9b334a45a8ff 237 */
bogdanm 0:9b334a45a8ff 238 void EXTI_GenerateSWInterrupt(uint32_t EXTI_Line)
bogdanm 0:9b334a45a8ff 239 {
bogdanm 0:9b334a45a8ff 240 /* Check the parameters */
bogdanm 0:9b334a45a8ff 241 assert_param(IS_EXTI_LINE_EXT(EXTI_Line));
bogdanm 0:9b334a45a8ff 242
bogdanm 0:9b334a45a8ff 243 *(__IO uint32_t *) (((uint32_t) &(EXTI->SWIER)) + ((EXTI_Line) >> 5 ) * 0x20) |= (uint32_t)(1 << (EXTI_Line & 0x1F));
bogdanm 0:9b334a45a8ff 244
bogdanm 0:9b334a45a8ff 245 }
bogdanm 0:9b334a45a8ff 246
bogdanm 0:9b334a45a8ff 247 /**
bogdanm 0:9b334a45a8ff 248 * @}
bogdanm 0:9b334a45a8ff 249 */
bogdanm 0:9b334a45a8ff 250
bogdanm 0:9b334a45a8ff 251 /** @defgroup EXTI_Group2 Interrupts and flags management functions
bogdanm 0:9b334a45a8ff 252 * @brief EXTI Interrupts and flags management functions
bogdanm 0:9b334a45a8ff 253 *
bogdanm 0:9b334a45a8ff 254 @verbatim
bogdanm 0:9b334a45a8ff 255 ===============================================================================
bogdanm 0:9b334a45a8ff 256 ##### Interrupts and flags management functions #####
bogdanm 0:9b334a45a8ff 257 ===============================================================================
bogdanm 0:9b334a45a8ff 258 [..]
bogdanm 0:9b334a45a8ff 259 This section provides functions allowing to configure the EXTI Interrupts
bogdanm 0:9b334a45a8ff 260 sources and check or clear the flags or pending bits status.
bogdanm 0:9b334a45a8ff 261
bogdanm 0:9b334a45a8ff 262 @endverbatim
bogdanm 0:9b334a45a8ff 263 * @{
bogdanm 0:9b334a45a8ff 264 */
bogdanm 0:9b334a45a8ff 265
bogdanm 0:9b334a45a8ff 266 /**
bogdanm 0:9b334a45a8ff 267 * @brief Checks whether the specified EXTI line flag is set or not.
bogdanm 0:9b334a45a8ff 268 * @param EXTI_Line: specifies the EXTI line flag to check.
bogdanm 0:9b334a45a8ff 269 * This parameter can be any combination of EXTI_Linex where x can be (0..20).
bogdanm 0:9b334a45a8ff 270 * @retval The new state of EXTI_Line (SET or RESET).
bogdanm 0:9b334a45a8ff 271 */
bogdanm 0:9b334a45a8ff 272 FlagStatus EXTI_GetFlagStatus(uint32_t EXTI_Line)
bogdanm 0:9b334a45a8ff 273 {
bogdanm 0:9b334a45a8ff 274 FlagStatus bitstatus = RESET;
bogdanm 0:9b334a45a8ff 275
bogdanm 0:9b334a45a8ff 276 /* Check the parameters */
bogdanm 0:9b334a45a8ff 277 assert_param(IS_GET_EXTI_LINE(EXTI_Line));
bogdanm 0:9b334a45a8ff 278
bogdanm 0:9b334a45a8ff 279 if ((*(__IO uint32_t *) (((uint32_t) &(EXTI->PR)) + ((EXTI_Line) >> 5 ) * 0x20)& (uint32_t)(1 << (EXTI_Line & 0x1F))) != (uint32_t)RESET)
bogdanm 0:9b334a45a8ff 280 {
bogdanm 0:9b334a45a8ff 281 bitstatus = SET;
bogdanm 0:9b334a45a8ff 282 }
bogdanm 0:9b334a45a8ff 283 else
bogdanm 0:9b334a45a8ff 284 {
bogdanm 0:9b334a45a8ff 285 bitstatus = RESET;
bogdanm 0:9b334a45a8ff 286 }
bogdanm 0:9b334a45a8ff 287 return bitstatus;
bogdanm 0:9b334a45a8ff 288 }
bogdanm 0:9b334a45a8ff 289
bogdanm 0:9b334a45a8ff 290 /**
bogdanm 0:9b334a45a8ff 291 * @brief Clears the EXTI's line pending flags.
bogdanm 0:9b334a45a8ff 292 * @param EXTI_Line: specifies the EXTI lines flags to clear.
bogdanm 0:9b334a45a8ff 293 * This parameter can be any combination of EXTI_Linex where x can be (0..20).
bogdanm 0:9b334a45a8ff 294 * @retval None
bogdanm 0:9b334a45a8ff 295 */
bogdanm 0:9b334a45a8ff 296 void EXTI_ClearFlag(uint32_t EXTI_Line)
bogdanm 0:9b334a45a8ff 297 {
bogdanm 0:9b334a45a8ff 298 /* Check the parameters */
bogdanm 0:9b334a45a8ff 299 assert_param(IS_EXTI_LINE_EXT(EXTI_Line));
bogdanm 0:9b334a45a8ff 300
bogdanm 0:9b334a45a8ff 301 *(__IO uint32_t *) (((uint32_t) &(EXTI->PR)) + ((EXTI_Line) >> 5 ) * 0x20) = (1 << (EXTI_Line & 0x1F));
bogdanm 0:9b334a45a8ff 302 }
bogdanm 0:9b334a45a8ff 303
bogdanm 0:9b334a45a8ff 304 /**
bogdanm 0:9b334a45a8ff 305 * @brief Checks whether the specified EXTI line is asserted or not.
bogdanm 0:9b334a45a8ff 306 * @param EXTI_Line: specifies the EXTI line to check.
bogdanm 0:9b334a45a8ff 307 * This parameter can be any combination of EXTI_Linex where x can be (0..20).
bogdanm 0:9b334a45a8ff 308 * @retval The new state of EXTI_Line (SET or RESET).
bogdanm 0:9b334a45a8ff 309 */
bogdanm 0:9b334a45a8ff 310 ITStatus EXTI_GetITStatus(uint32_t EXTI_Line)
bogdanm 0:9b334a45a8ff 311 {
bogdanm 0:9b334a45a8ff 312 ITStatus bitstatus = RESET;
bogdanm 0:9b334a45a8ff 313
bogdanm 0:9b334a45a8ff 314 /* Check the parameters */
bogdanm 0:9b334a45a8ff 315 assert_param(IS_GET_EXTI_LINE(EXTI_Line));
bogdanm 0:9b334a45a8ff 316
bogdanm 0:9b334a45a8ff 317 if ((*(__IO uint32_t *) (((uint32_t) &(EXTI->PR)) + ((EXTI_Line) >> 5 ) * 0x20)& (uint32_t)(1 << (EXTI_Line & 0x1F))) != (uint32_t)RESET)
bogdanm 0:9b334a45a8ff 318 {
bogdanm 0:9b334a45a8ff 319 bitstatus = SET;
bogdanm 0:9b334a45a8ff 320 }
bogdanm 0:9b334a45a8ff 321 else
bogdanm 0:9b334a45a8ff 322 {
bogdanm 0:9b334a45a8ff 323 bitstatus = RESET;
bogdanm 0:9b334a45a8ff 324 }
bogdanm 0:9b334a45a8ff 325 return bitstatus;
bogdanm 0:9b334a45a8ff 326
bogdanm 0:9b334a45a8ff 327 }
bogdanm 0:9b334a45a8ff 328
bogdanm 0:9b334a45a8ff 329 /**
bogdanm 0:9b334a45a8ff 330 * @brief Clears the EXTI's line pending bits.
bogdanm 0:9b334a45a8ff 331 * @param EXTI_Line: specifies the EXTI lines to clear.
bogdanm 0:9b334a45a8ff 332 * This parameter can be any combination of EXTI_Linex where x can be (0..20).
bogdanm 0:9b334a45a8ff 333 * @retval None
bogdanm 0:9b334a45a8ff 334 */
bogdanm 0:9b334a45a8ff 335 void EXTI_ClearITPendingBit(uint32_t EXTI_Line)
bogdanm 0:9b334a45a8ff 336 {
bogdanm 0:9b334a45a8ff 337 /* Check the parameters */
bogdanm 0:9b334a45a8ff 338 assert_param(IS_EXTI_LINE_EXT(EXTI_Line));
bogdanm 0:9b334a45a8ff 339
bogdanm 0:9b334a45a8ff 340 *(__IO uint32_t *) (((uint32_t) &(EXTI->PR)) + ((EXTI_Line) >> 5 ) * 0x20) = (1 << (EXTI_Line & 0x1F));
bogdanm 0:9b334a45a8ff 341 }
bogdanm 0:9b334a45a8ff 342
bogdanm 0:9b334a45a8ff 343 /**
bogdanm 0:9b334a45a8ff 344 * @}
bogdanm 0:9b334a45a8ff 345 */
bogdanm 0:9b334a45a8ff 346
bogdanm 0:9b334a45a8ff 347 /**
bogdanm 0:9b334a45a8ff 348 * @}
bogdanm 0:9b334a45a8ff 349 */
bogdanm 0:9b334a45a8ff 350
bogdanm 0:9b334a45a8ff 351 /**
bogdanm 0:9b334a45a8ff 352 * @}
bogdanm 0:9b334a45a8ff 353 */
bogdanm 0:9b334a45a8ff 354
bogdanm 0:9b334a45a8ff 355 /**
bogdanm 0:9b334a45a8ff 356 * @}
bogdanm 0:9b334a45a8ff 357 */
bogdanm 0:9b334a45a8ff 358
bogdanm 0:9b334a45a8ff 359 /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/