📄 stm8l15x_exti.c
字号:
assert_param(IS_EXTI_HALFPORT(EXTI_HalfPort));
assert_param(IS_FUNCTIONAL_STATE(NewState));
if ((EXTI_HalfPort & 0x80) == 0x00)
{
if (NewState != DISABLE)
{
/* Enable port interrupt selector */
EXTI->CONF1 |= (uint8_t)EXTI_HalfPort;
}
else /*NewState == DISABLE */
{
/* Disable port interrupt selector */
EXTI->CONF1 &= (uint8_t)(~(uint8_t)EXTI_HalfPort);
}
}
else
{
if (NewState != DISABLE)
{
/* Enable port interrupt selector */
EXTI->CONF2 |= (uint8_t)(EXTI_HalfPort & (uint8_t)0x7F);
}
else /*NewState == DISABLE */
{
/* Disable port interrupt selector */
EXTI->CONF2 &= (uint8_t)(~(uint8_t) (EXTI_HalfPort & (uint8_t)0x7F));
}
}
}
/**
* @brief Sets the external interrupt sensitivity of the selected port.
* @note Global interrupts must be disabled before calling this function.
* @note The modification of external interrupt sensitivity is only possible
* when the interrupts are disabled.
* @note The normal behavior is to disable the interrupts before calling this
* function, and re-enable them after.
* @param EXTI_Port : The port number to access.
* This parameter can be one of the following values:
* @arg EXTI_Port_B: GPIO Port B
* @arg EXTI_Port_D: GPIO Port D
* @arg EXTI_Port_E: GPIO Port E
* @arg EXTI_Port_F: GPIO Port F
* @arg EXTI_Port_G: GPIO Port G
* @arg EXTI_Port_H: GPIO Port H
* @param EXTI_Trigger : The external interrupt sensitivity value to set.
* This parameter can be one of the following values:
* @arg EXTI_Trigger_Falling_Low: Interrupt on Falling edge and Low level
* @arg EXTI_Trigger_Rising: Interrupt on Rising edge only
* @arg EXTI_Trigger_Falling: Interrupt on Falling edge only
* @arg EXTI_Trigger_Rising_Falling: Interrupt on Rising and Falling edges
* @retval None
*/
void EXTI_SetPortSensitivity(EXTI_Port_TypeDef EXTI_Port,
EXTI_Trigger_TypeDef EXTI_Trigger)
{
/* Check function parameters */
assert_param(IS_EXTI_PORT(EXTI_Port));
assert_param(IS_EXTI_TRIGGER(EXTI_Trigger));
/* Ceck if selected port is in EXTI_CR3 register */
if ((EXTI_Port & 0xF0) == 0x00)
{
/* Reset the trigger bits corresponding to EXTI_Port */
EXTI->CR3 &= (uint8_t) (~(uint8_t)((uint8_t)0x03 << EXTI_Port));
/* Write EXTI port trigger */
EXTI->CR3 |= (uint8_t)((uint8_t)(EXTI_Trigger) << EXTI_Port);
}
else /* selected port is in EXTI_CR4 register */
{
/* Reset the trigger bits corresponding to EXTI_Port */
EXTI->CR4 &= (uint8_t) (~(uint8_t)((uint8_t)0x03 << (EXTI_Port & 0x0F)));
/* Write EXTI port trigger */
EXTI->CR4 |= (uint8_t)(EXTI_Trigger << (EXTI_Port & 0x0F));
}
}
/**
* @brief Gets the external interrupt sensitivity of the selected pin.
* @param EXTI_Pin : The pin number to access.
* This parameter can be one of the following values:
* @arg EXTI_Pin_0: GPIO Pin 0
* @arg EXTI_Pin_1: GPIO Pin 1
* @arg EXTI_Pin_2: GPIO Pin 2
* @arg EXTI_Pin_3: GPIO Pin 3
* @arg EXTI_Pin_4: GPIO Pin 4
* @arg EXTI_Pin_5: GPIO Pin 5
* @arg EXTI_Pin_6: GPIO Pin 6
* @arg EXTI_Pin_7: GPIO Pin 7
* @retval The external interrupt sensitivity of the selected port.
*/
EXTI_Trigger_TypeDef EXTI_GetPinSensitivity(EXTI_Pin_TypeDef EXTI_Pin)
{
uint8_t value = 0;
/* Check function parameters */
assert_param(IS_EXTI_PINNUM(EXTI_Pin));
switch (EXTI_Pin)
{
case EXTI_Pin_0:
value = (uint8_t)(EXTI->CR1 & EXTI_CR1_P0IS);
break;
case EXTI_Pin_1:
value = (uint8_t)((uint8_t)(EXTI->CR1 & EXTI_CR1_P1IS) >> EXTI_Pin_1);
break;
case EXTI_Pin_2:
value = (uint8_t)((uint8_t)(EXTI->CR1 & EXTI_CR1_P2IS) >> EXTI_Pin_2);
break;
case EXTI_Pin_3:
value = (uint8_t)((uint8_t)(EXTI->CR1 & EXTI_CR1_P3IS) >> EXTI_Pin_3);
break;
case EXTI_Pin_4:
value = (uint8_t)(EXTI->CR2 & EXTI_CR2_P4IS);
break;
case EXTI_Pin_5:
value = (uint8_t)((uint8_t)(EXTI->CR2 & EXTI_CR2_P5IS) >> ((uint8_t)EXTI_Pin_5 & (uint8_t)0x0F));
break;
case EXTI_Pin_6:
value = (uint8_t)((uint8_t)(EXTI->CR2 & EXTI_CR2_P6IS) >> ((uint8_t)EXTI_Pin_6 & (uint8_t)0x0F));
break;
case EXTI_Pin_7:
value = (uint8_t)((uint8_t)(EXTI->CR2 & EXTI_CR2_P7IS) >> ((uint8_t)EXTI_Pin_7 & (uint8_t)0x0F));
break;
default:
break;
}
return((EXTI_Trigger_TypeDef)value);
}
/**
* @brief Gets the external interrupt sensitivity of the selected port.
* @param EXTI_Port : The port number to access.
* This parameter can be one of the following values:
* @arg EXTI_Port_B: GPIO Port B
* @arg EXTI_Port_D: GPIO Port D
* @arg EXTI_Port_E: GPIO Port E
* @arg EXTI_Port_F: GPIO Port F
* @arg EXTI_Port_G: GPIO Port G
* @arg EXTI_Port_H: GPIO Port H
* @retval The external interrupt sensitivity of the selected port.
*/
EXTI_Trigger_TypeDef EXTI_GetPortSensitivity(EXTI_Port_TypeDef EXTI_Port)
{
uint8_t portsensitivity = 0;
/* Check function parameters */
assert_param(IS_EXTI_PORT(EXTI_Port));
/* Check if selected port is in EXTI_CR3 */
if ((EXTI_Port & 0xF0) == 0x00)
{
/* Get port sensitivity */
portsensitivity = (uint8_t)((uint8_t)0x03 & (uint8_t)(EXTI->CR3 >> EXTI_Port));
}
/* selected port is in EXTI_CR4 */
else
{
/* Get port sensitivity */
portsensitivity = (uint8_t)((uint8_t)0x03 & (uint8_t)(EXTI->CR4 >> (EXTI_Port & 0x0F)));
}
return((EXTI_Trigger_TypeDef)portsensitivity);
}
/**
* @}
*/
/** @defgroup EXTI_Group2 EXTI Interrupt status management functions
* @brief EXTI Interrupt status management functions
*
@verbatim
===============================================================================
EXTI Interrupt status management functions
===============================================================================
@endverbatim
* @{
*/
/**
* @brief Gets the external interrupt status.
* @param EXTI_IT : Specifies the interrupt to read.
* This parameter can be one of the following values:
* @arg EXTI_IT_Pin0: GPIO Pin 0
* @arg EXTI_IT_Pin1: GPIO Pin 1
* @arg EXTI_IT_Pin2: GPIO Pin 2
* @arg EXTI_IT_Pin3: GPIO Pin 3
* @arg EXTI_IT_Pin4: GPIO Pin 4
* @arg EXTI_IT_Pin5: GPIO Pin 5
* @arg EXTI_IT_Pin6: GPIO Pin 6
* @arg EXTI_IT_Pin7: GPIO Pin 7
* @arg EXTI_IT_PortB: GPIO Port B
* @arg EXTI_IT_PortD: GPIO Port D
* @arg EXTI_IT_PortE: GPIO Port E
* @arg EXTI_IT_PortF: GPIO Port F
* @arg EXTI_IT_PortG: GPIO Port G
* @arg EXTI_IT_PortH: GPIO Port H
* @retval The status of the specified interrupt.
* This parameter can be a SET or RESET
*/
ITStatus EXTI_GetITStatus(EXTI_IT_TypeDef EXTI_IT)
{
ITStatus status = RESET;
/* Check function parameters */
assert_param(IS_EXTI_ITPENDINGBIT(EXTI_IT));
if (((uint16_t)EXTI_IT & (uint16_t)0xFF00) == 0x0100)
{
status = (ITStatus)(EXTI->SR2 & (uint8_t)((uint16_t)EXTI_IT & (uint16_t)0x00FF));
}
else
{
status = (ITStatus)(EXTI->SR1 & ((uint8_t)((uint16_t)EXTI_IT & (uint16_t)0x00FF)));
}
return((ITStatus)status);
}
/**
* @brief Clears the specified interrupt pending bit
* @param EXTI_IT : Specifies the interrupt to clear
* This parameter can be one of the following values:
* @arg EXTI_IT_Pin0: GPIO Pin 0
* @arg EXTI_IT_Pin1: GPIO Pin 1
* @arg EXTI_IT_Pin2: GPIO Pin 2
* @arg EXTI_IT_Pin3: GPIO Pin 3
* @arg EXTI_IT_Pin4: GPIO Pin 4
* @arg EXTI_IT_Pin5: GPIO Pin 5
* @arg EXTI_IT_Pin6: GPIO Pin 6
* @arg EXTI_IT_Pin7: GPIO Pin 7
* @arg EXTI_IT_PortB: GPIO Port B
* @arg EXTI_IT_PortD: GPIO Port D
* @arg EXTI_IT_PortE: GPIO Port E
* @arg EXTI_IT_PortF: GPIO Port F
* @arg EXTI_IT_PortG: GPIO Port G
* @arg EXTI_IT_PortH: GPIO Port H
* @retval None
*/
void EXTI_ClearITPendingBit(EXTI_IT_TypeDef EXTI_IT)
{
uint16_t tempvalue = 0;
/* Check function parameters */
assert_param(IS_EXTI_ITPENDINGBIT(EXTI_IT));
tempvalue = ((uint16_t)EXTI_IT & (uint16_t)0xFF00);
if ( tempvalue == 0x0100)
{
EXTI->SR2 = (uint8_t)((uint16_t)EXTI_IT & (uint16_t)0x00FF);
}
else
{
EXTI->SR1 = (uint8_t) (EXTI_IT);
}
}
/**
* @}
*/
/**
* @}
*/
/**
* @}
*/
/**
* @}
*/
/******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -