#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; }