in boards/STM32L475_Discovery/gpio-board.c [133:235]
void GpioMcuSetInterrupt( Gpio_t *obj, IrqModes irqMode, IrqPriorities irqPriority, GpioIrqHandler *irqHandler )
{
if( obj->pin < IOE_0 )
{
uint32_t priority = 0;
IRQn_Type IRQnb = EXTI0_IRQn;
GPIO_InitTypeDef GPIO_InitStructure;
if( irqHandler == NULL )
{
return;
}
obj->IrqHandler = irqHandler;
GPIO_InitStructure.Pin = obj->pinIndex;
if( irqMode == IRQ_RISING_EDGE )
{
GPIO_InitStructure.Mode = GPIO_MODE_IT_RISING;
}
else if( irqMode == IRQ_FALLING_EDGE )
{
GPIO_InitStructure.Mode = GPIO_MODE_IT_FALLING;
}
else
{
GPIO_InitStructure.Mode = GPIO_MODE_IT_RISING_FALLING;
}
GPIO_InitStructure.Pull = obj->pull;
GPIO_InitStructure.Speed = GPIO_SPEED_FREQ_HIGH;
HAL_GPIO_Init( obj->port, &GPIO_InitStructure );
switch( irqPriority )
{
case IRQ_VERY_LOW_PRIORITY:
case IRQ_LOW_PRIORITY:
priority = 3;
break;
case IRQ_MEDIUM_PRIORITY:
priority = 2;
break;
case IRQ_HIGH_PRIORITY:
priority = 1;
break;
case IRQ_VERY_HIGH_PRIORITY:
default:
priority = 0;
break;
}
switch( obj->pinIndex )
{
case GPIO_PIN_0:
IRQnb = EXTI0_IRQn;
break;
case GPIO_PIN_1:
IRQnb = EXTI1_IRQn;
break;
case GPIO_PIN_2:
IRQnb = EXTI2_IRQn;
break;
case GPIO_PIN_3:
IRQnb = EXTI3_IRQn;
break;
case GPIO_PIN_4:
IRQnb = EXTI4_IRQn;
break;
case GPIO_PIN_5:
case GPIO_PIN_6:
case GPIO_PIN_7:
case GPIO_PIN_8:
case GPIO_PIN_9:
IRQnb = EXTI9_5_IRQn;
break;
case GPIO_PIN_10:
case GPIO_PIN_11:
case GPIO_PIN_12:
case GPIO_PIN_13:
case GPIO_PIN_14:
case GPIO_PIN_15:
IRQnb = EXTI15_10_IRQn;
break;
default:
break;
}
GpioIrq[( obj->pin ) & 0x0F] = obj;
HAL_NVIC_SetPriority( IRQnb , priority, 0 );
HAL_NVIC_EnableIRQ( IRQnb );
}
else
{
#if defined( BOARD_IOE_EXT )
// IOExt Pin
GpioIoeSetInterrupt( obj, irqMode, irqPriority, irqHandler );
#endif
}
}