Subversion Repositories AFRtranscoder

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
2 mjames 1
/**
2
  ******************************************************************************
3
  * @file    stm32f1xx_ll_exti.c
4
  * @author  MCD Application Team
5
  * @brief   EXTI LL module driver.
6
  ******************************************************************************
7
  * @attention
8
  *
9
  * Copyright (c) 2016 STMicroelectronics.
10
  * All rights reserved.
11
  *
12
  * This software is licensed under terms that can be found in the LICENSE file
13
  * in the root directory of this software component.
14
  * If no LICENSE file comes with this software, it is provided AS-IS.
15
  *
16
  ******************************************************************************
17
  */
18
 
19
#if defined(USE_FULL_LL_DRIVER)
20
 
21
/* Includes ------------------------------------------------------------------*/
22
#include "stm32f1xx_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 STM32F1xx_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
 
49
#define IS_LL_EXTI_MODE(__VALUE__)                   (((__VALUE__) == LL_EXTI_MODE_IT)            \
50
                                                   || ((__VALUE__) == LL_EXTI_MODE_EVENT)         \
51
                                                   || ((__VALUE__) == LL_EXTI_MODE_IT_EVENT))
52
 
53
 
54
#define IS_LL_EXTI_TRIGGER(__VALUE__)                (((__VALUE__) == LL_EXTI_TRIGGER_NONE)       \
55
                                                   || ((__VALUE__) == LL_EXTI_TRIGGER_RISING)     \
56
                                                   || ((__VALUE__) == LL_EXTI_TRIGGER_FALLING)    \
57
                                                   || ((__VALUE__) == LL_EXTI_TRIGGER_RISING_FALLING))
58
 
59
/**
60
  * @}
61
  */
62
 
63
/* Private function prototypes -----------------------------------------------*/
64
 
65
/* Exported functions --------------------------------------------------------*/
66
/** @addtogroup EXTI_LL_Exported_Functions
67
  * @{
68
  */
69
 
70
/** @addtogroup EXTI_LL_EF_Init
71
  * @{
72
  */
73
 
74
/**
75
  * @brief  De-initialize the EXTI registers to their default reset values.
76
  * @retval An ErrorStatus enumeration value:
77
  *          - SUCCESS: EXTI registers are de-initialized
78
  *          - ERROR: not applicable
79
  */
80
uint32_t LL_EXTI_DeInit(void)
81
{
82
  /* Interrupt mask register set to default reset values */
83
  LL_EXTI_WriteReg(IMR,   0x00000000U);
84
  /* Event mask register set to default reset values */
85
  LL_EXTI_WriteReg(EMR,   0x00000000U);
86
  /* Rising Trigger selection register set to default reset values */
87
  LL_EXTI_WriteReg(RTSR,  0x00000000U);
88
  /* Falling Trigger selection register set to default reset values */
89
  LL_EXTI_WriteReg(FTSR,  0x00000000U);
90
  /* Software interrupt event register set to default reset values */
91
  LL_EXTI_WriteReg(SWIER, 0x00000000U);
92
  /* Pending register clear */
93
  LL_EXTI_WriteReg(PR,    0x000FFFFFU);
94
 
95
  return SUCCESS;
96
}
97
 
98
/**
99
  * @brief  Initialize the EXTI registers according to the specified parameters in EXTI_InitStruct.
100
  * @param  EXTI_InitStruct pointer to a @ref LL_EXTI_InitTypeDef structure.
101
  * @retval An ErrorStatus enumeration value:
102
  *          - SUCCESS: EXTI registers are initialized
103
  *          - ERROR: not applicable
104
  */
105
uint32_t LL_EXTI_Init(LL_EXTI_InitTypeDef *EXTI_InitStruct)
106
{
107
  ErrorStatus status = SUCCESS;
108
  /* Check the parameters */
109
  assert_param(IS_LL_EXTI_LINE_0_31(EXTI_InitStruct->Line_0_31));
110
  assert_param(IS_FUNCTIONAL_STATE(EXTI_InitStruct->LineCommand));
111
  assert_param(IS_LL_EXTI_MODE(EXTI_InitStruct->Mode));
112
 
113
  /* ENABLE LineCommand */
114
  if (EXTI_InitStruct->LineCommand != DISABLE)
115
  {
116
    assert_param(IS_LL_EXTI_TRIGGER(EXTI_InitStruct->Trigger));
117
 
118
    /* Configure EXTI Lines in range from 0 to 31 */
119
    if (EXTI_InitStruct->Line_0_31 != LL_EXTI_LINE_NONE)
120
    {
121
      switch (EXTI_InitStruct->Mode)
122
      {
123
        case LL_EXTI_MODE_IT:
124
          /* First Disable Event on provided Lines */
125
          LL_EXTI_DisableEvent_0_31(EXTI_InitStruct->Line_0_31);
126
          /* Then Enable IT on provided Lines */
127
          LL_EXTI_EnableIT_0_31(EXTI_InitStruct->Line_0_31);
128
          break;
129
        case LL_EXTI_MODE_EVENT:
130
          /* First Disable IT on provided Lines */
131
          LL_EXTI_DisableIT_0_31(EXTI_InitStruct->Line_0_31);
132
          /* Then Enable Event on provided Lines */
133
          LL_EXTI_EnableEvent_0_31(EXTI_InitStruct->Line_0_31);
134
          break;
135
        case LL_EXTI_MODE_IT_EVENT:
136
          /* Directly Enable IT & Event on provided Lines */
137
          LL_EXTI_EnableIT_0_31(EXTI_InitStruct->Line_0_31);
138
          LL_EXTI_EnableEvent_0_31(EXTI_InitStruct->Line_0_31);
139
          break;
140
        default:
141
          status = ERROR;
142
          break;
143
      }
144
      if (EXTI_InitStruct->Trigger != LL_EXTI_TRIGGER_NONE)
145
      {
146
        switch (EXTI_InitStruct->Trigger)
147
        {
148
          case LL_EXTI_TRIGGER_RISING:
149
            /* First Disable Falling Trigger on provided Lines */
150
            LL_EXTI_DisableFallingTrig_0_31(EXTI_InitStruct->Line_0_31);
151
            /* Then Enable Rising Trigger on provided Lines */
152
            LL_EXTI_EnableRisingTrig_0_31(EXTI_InitStruct->Line_0_31);
153
            break;
154
          case LL_EXTI_TRIGGER_FALLING:
155
            /* First Disable Rising Trigger on provided Lines */
156
            LL_EXTI_DisableRisingTrig_0_31(EXTI_InitStruct->Line_0_31);
157
            /* Then Enable Falling Trigger on provided Lines */
158
            LL_EXTI_EnableFallingTrig_0_31(EXTI_InitStruct->Line_0_31);
159
            break;
160
          case LL_EXTI_TRIGGER_RISING_FALLING:
161
            LL_EXTI_EnableRisingTrig_0_31(EXTI_InitStruct->Line_0_31);
162
            LL_EXTI_EnableFallingTrig_0_31(EXTI_InitStruct->Line_0_31);
163
            break;
164
          default:
165
            status = ERROR;
166
            break;
167
        }
168
      }
169
    }
170
  }
171
  /* DISABLE LineCommand */
172
  else
173
  {
174
    /* De-configure EXTI Lines in range from 0 to 31 */
175
    LL_EXTI_DisableIT_0_31(EXTI_InitStruct->Line_0_31);
176
    LL_EXTI_DisableEvent_0_31(EXTI_InitStruct->Line_0_31);
177
  }
178
  return status;
179
}
180
 
181
/**
182
  * @brief  Set each @ref LL_EXTI_InitTypeDef field to default value.
183
  * @param  EXTI_InitStruct Pointer to a @ref LL_EXTI_InitTypeDef structure.
184
  * @retval None
185
  */
186
void LL_EXTI_StructInit(LL_EXTI_InitTypeDef *EXTI_InitStruct)
187
{
188
  EXTI_InitStruct->Line_0_31      = LL_EXTI_LINE_NONE;
189
  EXTI_InitStruct->LineCommand    = DISABLE;
190
  EXTI_InitStruct->Mode           = LL_EXTI_MODE_IT;
191
  EXTI_InitStruct->Trigger        = LL_EXTI_TRIGGER_FALLING;
192
}
193
 
194
/**
195
  * @}
196
  */
197
 
198
/**
199
  * @}
200
  */
201
 
202
/**
203
  * @}
204
  */
205
 
206
#endif /* defined (EXTI) */
207
 
208
/**
209
  * @}
210
  */
211
 
212
#endif /* USE_FULL_LL_DRIVER */
213