104 #ifdef HAL_EXTI_MODULE_ENABLED 111 #define EXTI_MODE_OFFSET 0x08u 112 #define EXTI_CONFIG_OFFSET 0x08u 146 __IO uint32_t *regaddr;
153 if ((hexti == NULL) || (pExtiConfig == NULL))
166 offset = ((pExtiConfig->
Line & EXTI_REG_MASK) >> EXTI_REG_SHIFT);
167 linepos = (pExtiConfig->
Line & EXTI_PIN_MASK);
168 maskline = (1uL << linepos);
171 if ((pExtiConfig->
Line & EXTI_CONFIG) != 0x00u)
176 regaddr = (&EXTI->RTSR1 + (EXTI_CONFIG_OFFSET * offset));
180 if ((pExtiConfig->
Trigger & EXTI_TRIGGER_RISING) != 0x00u)
193 regaddr = (&EXTI->FTSR1 + (EXTI_CONFIG_OFFSET * offset));
197 if ((pExtiConfig->
Trigger & EXTI_TRIGGER_FALLING) != 0x00u)
210 if ((pExtiConfig->
Line & EXTI_GPIO) == EXTI_GPIO)
215 regval = SYSCFG->EXTICR[linepos >> 2u];
216 regval &= ~(SYSCFG_EXTICR1_EXTI0 << (SYSCFG_EXTICR1_EXTI1_Pos * (linepos & 0x03u)));
217 regval |= (pExtiConfig->
GPIOSel << (SYSCFG_EXTICR1_EXTI1_Pos * (linepos & 0x03u)));
218 SYSCFG->EXTICR[linepos >> 2u] = regval;
223 regaddr = (&EXTI->IMR1 + (EXTI_MODE_OFFSET * offset));
227 if ((pExtiConfig->
Mode & EXTI_MODE_INTERRUPT) != 0x00u)
240 assert_param(((pExtiConfig->
Line & EXTI_EVENT) == EXTI_EVENT) || ((pExtiConfig->
Mode & EXTI_MODE_EVENT) != EXTI_MODE_EVENT));
243 regaddr = (&EXTI->EMR1 + (EXTI_MODE_OFFSET * offset));
247 if ((pExtiConfig->
Mode & EXTI_MODE_EVENT) != 0x00u)
271 __IO uint32_t *regaddr;
278 if ((hexti == NULL) || (pExtiConfig == NULL))
290 offset = ((pExtiConfig->
Line & EXTI_REG_MASK) >> EXTI_REG_SHIFT);
291 linepos = (pExtiConfig->
Line & EXTI_PIN_MASK);
292 maskline = (1uL << linepos);
295 regaddr = (&EXTI->IMR1 + (EXTI_MODE_OFFSET * offset));
299 if ((regval & maskline) != 0x00u)
301 pExtiConfig->
Mode = EXTI_MODE_INTERRUPT;
305 pExtiConfig->
Mode = EXTI_MODE_NONE;
309 regaddr = (&EXTI->EMR1 + (EXTI_MODE_OFFSET * offset));
313 if ((regval & maskline) != 0x00u)
315 pExtiConfig->
Mode |= EXTI_MODE_EVENT;
319 if ((pExtiConfig->
Line & EXTI_CONFIG) != 0x00u)
321 regaddr = (&EXTI->RTSR1 + (EXTI_CONFIG_OFFSET * offset));
325 if ((regval & maskline) != 0x00u)
327 pExtiConfig->
Trigger = EXTI_TRIGGER_RISING;
331 pExtiConfig->
Trigger = EXTI_TRIGGER_NONE;
335 regaddr = (&EXTI->FTSR1 + (EXTI_CONFIG_OFFSET * offset));
339 if ((regval & maskline) != 0x00u)
341 pExtiConfig->
Trigger |= EXTI_TRIGGER_FALLING;
345 if ((pExtiConfig->
Line & EXTI_GPIO) == EXTI_GPIO)
349 regval = SYSCFG->EXTICR[linepos >> 2u];
350 pExtiConfig->
GPIOSel = ((regval << (SYSCFG_EXTICR1_EXTI1_Pos * (3uL - (linepos & 0x03u)))) >> 24);
359 pExtiConfig->
Trigger = EXTI_TRIGGER_NONE;
374 __IO uint32_t *regaddr;
390 offset = ((hexti->
Line & EXTI_REG_MASK) >> EXTI_REG_SHIFT);
391 linepos = (hexti->
Line & EXTI_PIN_MASK);
392 maskline = (1uL << linepos);
395 regaddr = (&EXTI->IMR1 + (EXTI_MODE_OFFSET * offset));
396 regval = (*regaddr & ~maskline);
400 regaddr = (&EXTI->EMR1 + (EXTI_MODE_OFFSET * offset));
401 regval = (*regaddr & ~maskline);
405 if ((hexti->
Line & EXTI_CONFIG) != 0x00u)
407 regaddr = (&EXTI->RTSR1 + (EXTI_CONFIG_OFFSET * offset));
408 regval = (*regaddr & ~maskline);
411 regaddr = (&EXTI->FTSR1 + (EXTI_CONFIG_OFFSET * offset));
412 regval = (*regaddr & ~maskline);
416 if ((hexti->
Line & EXTI_GPIO) == EXTI_GPIO)
420 regval = SYSCFG->EXTICR[linepos >> 2u];
421 regval &= ~(SYSCFG_EXTICR1_EXTI0 << (SYSCFG_EXTICR1_EXTI1_Pos * (linepos & 0x03u)));
422 SYSCFG->EXTICR[linepos >> 2u] = regval;
440 HAL_StatusTypeDef status =
HAL_OK;
477 hexti->
Line = ExtiLine;
507 __IO uint32_t *regaddr;
513 offset = ((hexti->
Line & EXTI_REG_MASK) >> EXTI_REG_SHIFT);
514 maskline = (1uL << (hexti->
Line & EXTI_PIN_MASK));
517 regaddr = (&EXTI->PR1 + (EXTI_CONFIG_OFFSET * offset));
518 regval = (*regaddr & maskline);
545 __IO uint32_t *regaddr;
557 offset = ((hexti->
Line & EXTI_REG_MASK) >> EXTI_REG_SHIFT);
558 linepos = (hexti->
Line & EXTI_PIN_MASK);
559 maskline = (1uL << linepos);
562 regaddr = (&EXTI->PR1 + (EXTI_CONFIG_OFFSET * offset));
565 regval = ((*regaddr & maskline) >> linepos);
581 __IO uint32_t *regaddr;
591 offset = ((hexti->
Line & EXTI_REG_MASK) >> EXTI_REG_SHIFT);
592 maskline = (1uL << (hexti->
Line & EXTI_PIN_MASK));
595 regaddr = (&EXTI->PR1 + (EXTI_CONFIG_OFFSET * offset));
609 __IO uint32_t *regaddr;
618 offset = ((hexti->
Line & EXTI_REG_MASK) >> EXTI_REG_SHIFT);
619 maskline = (1uL << (hexti->
Line & EXTI_PIN_MASK));
621 regaddr = (&EXTI->SWIER1 + (EXTI_CONFIG_OFFSET * offset));
void HAL_EXTI_ClearPending(EXTI_HandleTypeDef *hexti, uint32_t Edge)
Clear interrupt pending bit of a dedicated line.
EXTI Handle structure definition.
HAL_StatusTypeDef HAL_EXTI_GetConfigLine(EXTI_HandleTypeDef *hexti, EXTI_ConfigTypeDef *pExtiConfig)
Get configuration of a dedicated Exti line.
This file contains all the functions prototypes for the HAL module driver.
HAL_StatusTypeDef HAL_EXTI_SetConfigLine(EXTI_HandleTypeDef *hexti, EXTI_ConfigTypeDef *pExtiConfig)
Set configuration of a dedicated Exti line.
void HAL_EXTI_IRQHandler(EXTI_HandleTypeDef *hexti)
Handle EXTI interrupt request.
void(* PendingCallback)(void)
uint32_t HAL_EXTI_GetPending(EXTI_HandleTypeDef *hexti, uint32_t Edge)
Get interrupt pending bit of a dedicated line.
EXTI Configuration structure definition.
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_GenerateSWI(EXTI_HandleTypeDef *hexti)
Generate a software interrupt for a dedicated line.
HAL_StatusTypeDef HAL_EXTI_GetHandle(EXTI_HandleTypeDef *hexti, uint32_t ExtiLine)
Store line number as handle private field.
assert_param(IS_RTC_WAKEUP_CLOCK(WakeUpClock))