source: trunk/firmware/Drivers/STM32G0xx_HAL_Driver/Src/stm32g0xx_ll_exti.c

Last change on this file was 6, checked in by f.jahn, 3 months ago
File size: 9.3 KB
Line 
1/**
2  ******************************************************************************
3  * @file    stm32g0xx_ll_exti.c
4  * @author  MCD Application Team
5  * @brief   EXTI LL module driver.
6  ******************************************************************************
7  * @attention
8  *
9  * <h2><center>&copy; Copyright (c) 2018 STMicroelectronics.
10  * All rights reserved.</center></h2>
11  *
12  * This software component is licensed by ST under BSD 3-Clause license,
13  * the "License"; You may not use this file except in compliance with the
14  * License. You may obtain a copy of the License at:
15  *                        opensource.org/licenses/BSD-3-Clause
16  *
17  ******************************************************************************
18  */
19#if defined(USE_FULL_LL_DRIVER)
20
21/* Includes ------------------------------------------------------------------*/
22#include "stm32g0xx_ll_exti.h"
23#ifdef  USE_FULL_ASSERT
24#include "stm32_assert.h"
25#else
26#define assert_param(expr) ((void)0U)
27#endif
28
29/** @addtogroup STM32G0xx_LL_Driver
30  * @{
31  */
32
33#if defined (EXTI)
34
35/** @defgroup EXTI_LL EXTI
36  * @{
37  */
38
39/* Private types -------------------------------------------------------------*/
40/* Private variables ---------------------------------------------------------*/
41/* Private constants ---------------------------------------------------------*/
42/* Private macros ------------------------------------------------------------*/
43/** @addtogroup EXTI_LL_Private_Macros
44  * @{
45  */
46
47#define IS_LL_EXTI_LINE_0_31(__VALUE__)              (((__VALUE__) & ~LL_EXTI_LINE_ALL_0_31) == 0x00000000U)
48#if defined(STM32G081xx) || defined(STM32G071xx)
49#define IS_LL_EXTI_LINE_32_63(__VALUE__)             (((__VALUE__) & ~LL_EXTI_LINE_ALL_32_63) == 0x00000000U)
50#endif
51#define IS_LL_EXTI_MODE(__VALUE__)                   (((__VALUE__) == LL_EXTI_MODE_IT)            \
52                                                   || ((__VALUE__) == LL_EXTI_MODE_EVENT)         \
53                                                   || ((__VALUE__) == LL_EXTI_MODE_IT_EVENT))
54
55
56#define IS_LL_EXTI_TRIGGER(__VALUE__)                (((__VALUE__) == LL_EXTI_TRIGGER_NONE)       \
57                                                   || ((__VALUE__) == LL_EXTI_TRIGGER_RISING)     \
58                                                   || ((__VALUE__) == LL_EXTI_TRIGGER_FALLING)    \
59                                                   || ((__VALUE__) == LL_EXTI_TRIGGER_RISING_FALLING))
60
61/**
62  * @}
63  */
64
65/* Private function prototypes -----------------------------------------------*/
66
67/* Exported functions --------------------------------------------------------*/
68/** @addtogroup EXTI_LL_Exported_Functions
69  * @{
70  */
71
72/** @addtogroup EXTI_LL_EF_Init
73  * @{
74  */
75
76/**
77  * @brief  De-initialize the EXTI registers to their default reset values.
78  * @retval An ErrorStatus enumeration value:
79  *          - 0x00: EXTI registers are de-initialized
80  */
81uint32_t LL_EXTI_DeInit(void)
82{
83  /* Interrupt mask register set to default reset values */
84  LL_EXTI_WriteReg(IMR1,   0xFFF80000U);
85  /* Event mask register set to default reset values */
86  LL_EXTI_WriteReg(EMR1,   0x00000000U);
87  /* Rising Trigger selection register set to default reset values */
88  LL_EXTI_WriteReg(RTSR1,  0x00000000U);
89  /* Falling Trigger selection register set to default reset values */
90  LL_EXTI_WriteReg(FTSR1,  0x00000000U);
91  /* Software interrupt event register set to default reset values */
92  LL_EXTI_WriteReg(SWIER1, 0x00000000U);
93  /* Pending register set to default reset values */
94  LL_EXTI_WriteReg(RPR1,    0x0007FFFFU);
95  LL_EXTI_WriteReg(FPR1,    0x0007FFFFU);
96
97#if defined(STM32G081xx) || defined(STM32G071xx)
98  /* Interrupt mask register 2 set to default reset values */
99  LL_EXTI_WriteReg(IMR2,        0x00000003U);
100  /* Event mask register 2 set to default reset values */
101  LL_EXTI_WriteReg(EMR2,        0x00000000U);
102#endif
103
104  return 0x00u;
105}
106
107/**
108  * @brief  Initialize the EXTI registers according to the specified parameters in EXTI_InitStruct.
109  * @param  EXTI_InitStruct pointer to a @ref LL_EXTI_InitTypeDef structure.
110  * @retval An ErrorStatus enumeration value:
111  *          - 0x00: EXTI registers are initialized
112  *          - any other calue : wrong configuration
113  */
114uint32_t LL_EXTI_Init(LL_EXTI_InitTypeDef *EXTI_InitStruct)
115{
116  uint32_t status = 0x00u;
117
118  /* Check the parameters */
119  assert_param(IS_LL_EXTI_LINE_0_31(EXTI_InitStruct->Line_0_31));
120#if defined(STM32G081xx) || defined(STM32G071xx)
121  assert_param(IS_LL_EXTI_LINE_32_63(EXTI_InitStruct->Line_32_63));
122#endif
123  assert_param(IS_FUNCTIONAL_STATE(EXTI_InitStruct->LineCommand));
124  assert_param(IS_LL_EXTI_MODE(EXTI_InitStruct->Mode));
125
126  /* ENABLE LineCommand */
127  if (EXTI_InitStruct->LineCommand != DISABLE)
128  {
129    assert_param(IS_LL_EXTI_TRIGGER(EXTI_InitStruct->Trigger));
130
131    /* Configure EXTI Lines in range from 0 to 31 */
132    if (EXTI_InitStruct->Line_0_31 != LL_EXTI_LINE_NONE)
133    {
134      switch (EXTI_InitStruct->Mode)
135      {
136        case LL_EXTI_MODE_IT:
137          /* First Disable Event on provided Lines */
138          LL_EXTI_DisableEvent_0_31(EXTI_InitStruct->Line_0_31);
139          /* Then Enable IT on provided Lines */
140          LL_EXTI_EnableIT_0_31(EXTI_InitStruct->Line_0_31);
141          break;
142        case LL_EXTI_MODE_EVENT:
143          /* First Disable IT on provided Lines */
144          LL_EXTI_DisableIT_0_31(EXTI_InitStruct->Line_0_31);
145          /* Then Enable Event on provided Lines */
146          LL_EXTI_EnableEvent_0_31(EXTI_InitStruct->Line_0_31);
147          break;
148        case LL_EXTI_MODE_IT_EVENT:
149          /* Directly Enable IT & Event on provided Lines */
150          LL_EXTI_EnableIT_0_31(EXTI_InitStruct->Line_0_31);
151          LL_EXTI_EnableEvent_0_31(EXTI_InitStruct->Line_0_31);
152          break;
153        default:
154          status = 0x01u;
155          break;
156      }
157      if (EXTI_InitStruct->Trigger != LL_EXTI_TRIGGER_NONE)
158      {
159        switch (EXTI_InitStruct->Trigger)
160        {
161          case LL_EXTI_TRIGGER_RISING:
162            /* First Disable Falling Trigger on provided Lines */
163            LL_EXTI_DisableFallingTrig_0_31(EXTI_InitStruct->Line_0_31);
164            /* Then Enable Rising Trigger on provided Lines */
165            LL_EXTI_EnableRisingTrig_0_31(EXTI_InitStruct->Line_0_31);
166            break;
167          case LL_EXTI_TRIGGER_FALLING:
168            /* First Disable Rising Trigger on provided Lines */
169            LL_EXTI_DisableRisingTrig_0_31(EXTI_InitStruct->Line_0_31);
170            /* Then Enable Falling Trigger on provided Lines */
171            LL_EXTI_EnableFallingTrig_0_31(EXTI_InitStruct->Line_0_31);
172            break;
173          case LL_EXTI_TRIGGER_RISING_FALLING:
174            LL_EXTI_EnableRisingTrig_0_31(EXTI_InitStruct->Line_0_31);
175            LL_EXTI_EnableFallingTrig_0_31(EXTI_InitStruct->Line_0_31);
176            break;
177          default:
178            status |= 0x02u;
179            break;
180        }
181      }
182    }
183#if defined(STM32G081xx) || defined(STM32G071xx)
184    /* Configure EXTI Lines in range from 32 to 63 */
185    if (EXTI_InitStruct->Line_32_63 != LL_EXTI_LINE_NONE)
186    {
187      switch (EXTI_InitStruct->Mode)
188      {
189        case LL_EXTI_MODE_IT:
190          /* First Disable Event on provided Lines */
191          LL_EXTI_DisableEvent_32_63(EXTI_InitStruct->Line_32_63);
192          /* Then Enable IT on provided Lines */
193          LL_EXTI_EnableIT_32_63(EXTI_InitStruct->Line_32_63);
194          break;
195        case LL_EXTI_MODE_EVENT:
196          /* First Disable IT on provided Lines */
197          LL_EXTI_DisableIT_32_63(EXTI_InitStruct->Line_32_63);
198          /* Then Enable Event on provided Lines */
199          LL_EXTI_EnableEvent_32_63(EXTI_InitStruct->Line_32_63);
200          break;
201        case LL_EXTI_MODE_IT_EVENT:
202          /* Directly Enable IT & Event on provided Lines */
203          LL_EXTI_EnableIT_32_63(EXTI_InitStruct->Line_32_63);
204          LL_EXTI_EnableEvent_32_63(EXTI_InitStruct->Line_32_63);
205          break;
206        default:
207          status |= 0x04u;
208          break;
209      }
210    }
211#endif
212  }
213  /* DISABLE LineCommand */
214  else
215  {
216    /* De-configure EXTI Lines in range from 0 to 31 */
217    LL_EXTI_DisableIT_0_31(EXTI_InitStruct->Line_0_31);
218    LL_EXTI_DisableEvent_0_31(EXTI_InitStruct->Line_0_31);
219#if defined(STM32G081xx) || defined(STM32G071xx)
220    /* De-configure EXTI Lines in range from 32 to 63 */
221    LL_EXTI_DisableIT_32_63(EXTI_InitStruct->Line_32_63);
222    LL_EXTI_DisableEvent_32_63(EXTI_InitStruct->Line_32_63);
223#endif
224  }
225
226  return status;
227}
228
229/**
230  * @brief  Set each @ref LL_EXTI_InitTypeDef field to default value.
231  * @param  EXTI_InitStruct Pointer to a @ref LL_EXTI_InitTypeDef structure.
232  * @retval None
233  */
234void LL_EXTI_StructInit(LL_EXTI_InitTypeDef *EXTI_InitStruct)
235{
236  EXTI_InitStruct->Line_0_31      = LL_EXTI_LINE_NONE;
237#if defined(STM32G081xx) || defined(STM32G071xx)
238  EXTI_InitStruct->Line_32_63     = LL_EXTI_LINE_NONE;
239#endif
240  EXTI_InitStruct->LineCommand    = DISABLE;
241  EXTI_InitStruct->Mode           = LL_EXTI_MODE_IT;
242  EXTI_InitStruct->Trigger        = LL_EXTI_TRIGGER_FALLING;
243}
244
245/**
246  * @}
247  */
248
249/**
250  * @}
251  */
252
253/**
254  * @}
255  */
256
257#endif /* defined (EXTI) */
258
259/**
260  * @}
261  */
262
263#endif /* USE_FULL_LL_DRIVER */
264
265/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
Note: See TracBrowser for help on using the repository browser.