122 lines
2.8 KiB
C
122 lines
2.8 KiB
C
#include "ls1x_exti.h"
|
|
#include "ls1x.h"
|
|
|
|
|
|
void EXTI_DeInit(EXTI_TypeDef* exti)
|
|
{
|
|
exti->EXINT_SRC = 0x00000000;
|
|
exti->EXINT_EDGE = 0x00000000;
|
|
exti->EXINT_POL = 0x00000000;
|
|
exti->EXINT_EN = 0x00000000;
|
|
}
|
|
|
|
void EXTI_Init(EXTI_TypeDef* exti, EXTI_InitTypeDef* EXTI_InitStruct)
|
|
{
|
|
INT32U tmp = 0;
|
|
|
|
/* Check the parameters */
|
|
assert_param(IS_EXTI_MODE(EXTI_InitStruct->EXTI_Mode));
|
|
assert_param(IS_EXTI_TRIGGER(EXTI_InitStruct->EXTI_Trigger));
|
|
assert_param(IS_EXTI_GPIO(EXTI_InitStruct->EXTI_GPIO));
|
|
assert_param(IS_FUNCTIONAL_STATE(EXTI_InitStruct->EXTI_LineCmd));
|
|
|
|
if (EXTI_InitStruct->EXTI_GpioCmd != DISABLE)
|
|
{
|
|
|
|
/* enable external interrupt cpu */
|
|
PMU_CMDSTS &=~((INT32U)(1<<25));
|
|
PMU_CMDSTS |=(INT32U)(1<<25);
|
|
if(EXTI_InitStruct->EXTI_Mode == EXTI_Mode_Level)
|
|
{
|
|
CLEAR_BIT(exti->EXINT_EDGE,EXTI_InitStruct->EXTI_GPIO);
|
|
}
|
|
else
|
|
{
|
|
SET_BIT(exti->EXINT_EDGE,EXTI_InitStruct->EXTI_GPIO);
|
|
}
|
|
|
|
SET_BIT(exti->EXINT_EN,EXTI_InitStruct->EXTI_GPIO);
|
|
|
|
/* Clear exint pol configuration */
|
|
exti->EXINT_POL &= ~EXTI_InitStruct->EXTI_GPIO;
|
|
/* Select the trigger for the selected external interrupts */
|
|
if (EXTI_InitStruct->EXTI_Trigger == EXTI_Trigger_Rising_High)
|
|
{
|
|
SET_BIT(exti->EXINT_POL,EXTI_InitStruct->EXTI_GPIO);
|
|
}
|
|
else
|
|
{
|
|
CLEAR_BIT(exti->EXINT_POL,EXTI_InitStruct->EXTI_GPIO);
|
|
}
|
|
|
|
SET_BIT(exti->EXINT_SRC,EXTI_InitStruct->EXTI_GPIO);
|
|
}
|
|
else
|
|
{
|
|
CLEAR_BIT(exti->EXINT_EN,EXTI_InitStruct->EXTI_GPIO);
|
|
}
|
|
}
|
|
|
|
void EXTI_StructInit(EXTI_InitTypeDef* EXTI_InitStruct)
|
|
{
|
|
EXTI_InitStruct->EXTI_GPIO = EXTI_GPIONONE;
|
|
EXTI_InitStruct->EXTI_Mode = EXTI_Mode_Edge;
|
|
EXTI_InitStruct->EXTI_Trigger = EXTI_Trigger_Rising_High;
|
|
EXTI_InitStruct->EXTI_GpioCmd = DISABLE;
|
|
}
|
|
|
|
FlagStatus EXTI_GetFlagStatus(EXTI_TypeDef* exti, INT32U EXTI_GPIO)
|
|
{
|
|
FlagStatus bitstatus = RESET;
|
|
/* Check the parameters */
|
|
assert_param(IS_EXTI_GPIO(EXTI_GPIO));
|
|
|
|
if ((exti->EXINT_SRC & EXTI_GPIO) != (INT32U)RESET)
|
|
{
|
|
bitstatus = SET;
|
|
}
|
|
else
|
|
{
|
|
bitstatus = RESET;
|
|
}
|
|
return bitstatus;
|
|
}
|
|
|
|
void EXTI_ClearFlag(EXTI_TypeDef* exti, INT32U EXTI_GPIO)
|
|
{
|
|
/* Check the parameters */
|
|
assert_param(IS_EXTI_GPIO(EXTI_GPIO));
|
|
|
|
exti->EXINT_SRC |= EXTI_GPIO;
|
|
}
|
|
|
|
ITStatus EXTI_GetITStatus(EXTI_TypeDef* exti, INT32U EXTI_GPIO)
|
|
{
|
|
ITStatus bitstatus = RESET;
|
|
INT32U enablestatus = 0;
|
|
/* Check the parameters */
|
|
assert_param(IS_EXTI_GPIO(EXTI_GPIO));
|
|
|
|
enablestatus = exti->EXINT_EN & EXTI_GPIO;
|
|
|
|
if (((exti->EXINT_SRC & EXTI_GPIO) != (INT32U)RESET) && (enablestatus != (INT32U)RESET))
|
|
{
|
|
bitstatus = SET;
|
|
}
|
|
else
|
|
{
|
|
bitstatus = RESET;
|
|
}
|
|
return bitstatus;
|
|
}
|
|
|
|
void EXTI_ClearITPendingBit(EXTI_TypeDef* exti, INT32U EXTI_GPIO)
|
|
{
|
|
/* Check the parameters */
|
|
assert_param(IS_EXTI_GPIO(EXTI_GPIO));
|
|
|
|
exti->EXINT_SRC |= EXTI_GPIO;
|
|
}
|
|
|
|
|