103 #ifdef HAL_EXTI_MODULE_ENABLED
149 if ((hexti == NULL) || (pExtiConfig == NULL))
155 assert_param(IS_EXTI_LINE(pExtiConfig->
Line));
156 assert_param(IS_EXTI_MODE(pExtiConfig->
Mode));
162 linepos = (pExtiConfig->
Line & EXTI_PIN_MASK);
163 maskline = (1uL << linepos);
166 if ((pExtiConfig->
Line & EXTI_CONFIG) != 0x00u)
168 assert_param(IS_EXTI_TRIGGER(pExtiConfig->
Trigger));
172 if ((pExtiConfig->
Trigger & EXTI_TRIGGER_RISING) != 0x00u)
174 EXTI->RTSR |= maskline;
178 EXTI->RTSR &= ~maskline;
183 if ((pExtiConfig->
Trigger & EXTI_TRIGGER_FALLING) != 0x00u)
185 EXTI->FTSR |= maskline;
189 EXTI->FTSR &= ~maskline;
194 if ((pExtiConfig->
Line & EXTI_GPIO) == EXTI_GPIO)
196 assert_param(IS_EXTI_GPIO_PORT(pExtiConfig->
GPIOSel));
197 assert_param(IS_EXTI_GPIO_PIN(linepos));
199 regval = SYSCFG->EXTICR[linepos >> 2u];
200 regval &= ~(SYSCFG_EXTICR1_EXTI0 << (SYSCFG_EXTICR1_EXTI1_Pos * (linepos & 0x03u)));
201 regval |= (pExtiConfig->
GPIOSel << (SYSCFG_EXTICR1_EXTI1_Pos * (linepos & 0x03u)));
202 SYSCFG->EXTICR[linepos >> 2u] = regval;
208 if ((pExtiConfig->
Mode & EXTI_MODE_INTERRUPT) != 0x00u)
210 EXTI->IMR |= maskline;
214 EXTI->IMR &= ~maskline;
219 if ((pExtiConfig->
Mode & EXTI_MODE_EVENT) != 0x00u)
221 EXTI->EMR |= maskline;
225 EXTI->EMR &= ~maskline;
244 if ((hexti == NULL) || (pExtiConfig == NULL))
250 assert_param(IS_EXTI_LINE(hexti->
Line));
256 linepos = (pExtiConfig->
Line & EXTI_PIN_MASK);
257 maskline = (1uL << linepos);
262 if ((EXTI->IMR & maskline) != 0x00u)
264 pExtiConfig->
Mode = EXTI_MODE_INTERRUPT;
268 pExtiConfig->
Mode = EXTI_MODE_NONE;
273 if ((EXTI->EMR & maskline) != 0x00u)
275 pExtiConfig->
Mode |= EXTI_MODE_EVENT;
279 pExtiConfig->
Trigger = EXTI_TRIGGER_NONE;
283 if ((pExtiConfig->
Line & EXTI_CONFIG) != 0x00u)
286 if ((EXTI->RTSR & maskline) != 0x00u)
288 pExtiConfig->
Trigger = EXTI_TRIGGER_RISING;
293 if ((EXTI->FTSR & maskline) != 0x00u)
295 pExtiConfig->
Trigger |= EXTI_TRIGGER_FALLING;
299 if ((pExtiConfig->
Line & EXTI_GPIO) == EXTI_GPIO)
301 assert_param(IS_EXTI_GPIO_PIN(linepos));
303 regval = SYSCFG->EXTICR[linepos >> 2u];
304 pExtiConfig->
GPIOSel = (regval >> (SYSCFG_EXTICR1_EXTI1_Pos * (linepos & 0x03u))) & SYSCFG_EXTICR1_EXTI0;
329 assert_param(IS_EXTI_LINE(hexti->
Line));
332 linepos = (hexti->
Line & EXTI_PIN_MASK);
333 maskline = (1uL << linepos);
336 EXTI->IMR = (EXTI->IMR & ~maskline);
339 EXTI->EMR = (EXTI->EMR & ~maskline);
342 if ((hexti->
Line & EXTI_CONFIG) != 0x00u)
344 EXTI->RTSR = (EXTI->RTSR & ~maskline);
345 EXTI->FTSR = (EXTI->FTSR & ~maskline);
348 if ((hexti->
Line & EXTI_GPIO) == EXTI_GPIO)
350 assert_param(IS_EXTI_GPIO_PIN(linepos));
352 regval = SYSCFG->EXTICR[linepos >> 2u];
353 regval &= ~(SYSCFG_EXTICR1_EXTI0 << (SYSCFG_EXTICR1_EXTI1_Pos * (linepos & 0x03u)));
354 SYSCFG->EXTICR[linepos >> 2u] = regval;
371 HAL_StatusTypeDef status = HAL_OK;
375 case HAL_EXTI_COMMON_CB_ID:
397 assert_param(IS_EXTI_LINE(ExtiLine));
407 hexti->
Line = ExtiLine;
440 maskline = (1uL << (hexti->
Line & EXTI_PIN_MASK));
443 regval = (EXTI->PR & maskline);
476 assert_param(IS_EXTI_LINE(hexti->
Line));
477 assert_param(IS_EXTI_CONFIG_LINE(hexti->
Line));
478 assert_param(IS_EXTI_PENDING_EDGE(Edge));
481 linepos = (hexti->
Line & EXTI_PIN_MASK);
482 maskline = (1uL << linepos);
485 regval = ((EXTI->PR & maskline) >> linepos);
506 assert_param(IS_EXTI_LINE(hexti->
Line));
507 assert_param(IS_EXTI_CONFIG_LINE(hexti->
Line));
508 assert_param(IS_EXTI_PENDING_EDGE(Edge));
511 maskline = (1uL << (hexti->
Line & EXTI_PIN_MASK));
527 assert_param(IS_EXTI_LINE(hexti->
Line));
528 assert_param(IS_EXTI_CONFIG_LINE(hexti->
Line));
531 maskline = (1uL << (hexti->
Line & EXTI_PIN_MASK));
534 EXTI->SWIER = maskline;
HAL_StatusTypeDef HAL_EXTI_SetConfigLine(EXTI_HandleTypeDef *hexti, EXTI_ConfigTypeDef *pExtiConfig)
Set configuration of a dedicated Exti line.
HAL_StatusTypeDef HAL_EXTI_GetHandle(EXTI_HandleTypeDef *hexti, uint32_t ExtiLine)
Store line number as handle private field.
HAL_StatusTypeDef HAL_EXTI_GetConfigLine(EXTI_HandleTypeDef *hexti, EXTI_ConfigTypeDef *pExtiConfig)
Get configuration of a dedicated Exti line.
HAL_StatusTypeDef HAL_EXTI_RegisterCallback(EXTI_HandleTypeDef *hexti, EXTI_CallbackIDTypeDef CallbackID, void(*pPendingCbfn)(void))
Register callback for a dedicated Exti line.
HAL_StatusTypeDef HAL_EXTI_ClearConfigLine(EXTI_HandleTypeDef *hexti)
Clear whole configuration of a dedicated Exti line.
void HAL_EXTI_IRQHandler(EXTI_HandleTypeDef *hexti)
Handle EXTI interrupt request.
void HAL_EXTI_GenerateSWI(EXTI_HandleTypeDef *hexti)
Generate a software interrupt for a dedicated line.
uint32_t HAL_EXTI_GetPending(EXTI_HandleTypeDef *hexti, uint32_t Edge)
Get interrupt pending bit of a dedicated line.
void HAL_EXTI_ClearPending(EXTI_HandleTypeDef *hexti, uint32_t Edge)
Clear interrupt pending bit of a dedicated line.
void(* PendingCallback)(void)
EXTI Configuration structure definition.
EXTI Handle structure definition.
This file contains all the functions prototypes for the HAL module driver.