/** ****************************************************************************** * @file xl_irq.c * @author Kirk ,xu.wang * @version 4.5.2 * @date Fri Mar 26 17:29:12 2021 * @brief This file provide function about IRQ firmware program ****************************************************************************** * @attention * * 2019 by Chipways Communications,Inc. All Rights Reserved. * This software is supplied under the terms of a license * agreement or non-disclosure agreement with Chipways. * Passing on and copying of this document,and communication * of its contents is not permitted without prior written * authorization. * *

© COPYRIGHT 2019 Chipways

****************************************************************************** */ #if defined(__cplusplus) extern "C" { #endif /* __cplusplus */ /* Includes ---------------------------------------------------------------*/ #include "xl_irq.h" /** @addtogroup XL6600_StdPeriph_Driver * @{ */ /** @defgroup IRQ IRQ Module * @brief IRQ Driver Modules Library * @{ */ /* Private typedef -----------------------------------------------------------*/ /* Private define ------------------------------------------------------------*/ /* Private macro -------------------------------------------------------------*/ /* Private variables ---------------------------------------------------------*/ /* Private function prototypes -----------------------------------------------*/ /* Private functions ---------------------------------------------------------*/ /** @defgroup IRQ_Private_Functions * @{ */ /** * @brief IRQĬÈϳõʼ»¯ * @param IRQx: Ñ¡ÔñIRQÍâÉè¡£ * @param IRQ_Channel: Ñ¡ÔñIRQͨµÀ * Õâ¸ö²ÎÊý¿ÉÒÔÈ¡ÏÂÃæµÄÖµ: * @arg EXTI0: ÍⲿÖжÏͨµÀ0 * @arg EXTI1: ÍⲿÖжÏͨµÀ1 * @arg EXTI2: ÍⲿÖжÏͨµÀ2 * @arg EXTI3: ÍⲿÖжÏͨµÀ3 * @arg EXTI4: ÍⲿÖжÏͨµÀ4 * @arg EXTI5: ÍⲿÖжÏͨµÀ5 * @arg EXTI6: ÍⲿÖжÏͨµÀ6 * @arg EXTI7: ÍⲿÖжÏͨµÀ7 * @arg EXTI8: ÍⲿÖжÏͨµÀ8 * @arg EXTI9: ÍⲿÖжÏͨµÀ9 * @arg EXTI19: ÍⲿÖжÏͨµÀ10 * @arg EXTI11: ÍⲿÖжÏͨµÀ11 * @arg EXTI12: ÍⲿÖжÏͨµÀ12 * @arg EXTI13: ÍⲿÖжÏͨµÀ13 * @arg EXTI14: ÍⲿÖжÏͨµÀ14 * @arg EXTI15: ÍⲿÖжÏͨµÀ15 * @retval None. */ void IRQ_DeInit(IRQ_Type *IRQx,uint8_t IRQ_Channel) { /* Reset all the register to a known state. */ IRQx->SC[IRQ_Channel] = 0x00u ; } /** * @brief IRQ³õʼ»¯ * @param IRQx: Ñ¡ÔñIRQÍâÉè * @param IRQ_Channel: Ñ¡ÔñIRQͨµÀ. * Õâ¸ö²ÎÊý¿ÉÒÔÈ¡ÏÂÃæµÄÖµ: * @arg EXTI0: ÍⲿÖжÏͨµÀ0 * @arg EXTI1: ÍⲿÖжÏͨµÀ1 * @arg EXTI2: ÍⲿÖжÏͨµÀ2 * @arg EXTI3: ÍⲿÖжÏͨµÀ3 * @arg EXTI4: ÍⲿÖжÏͨµÀ4 * @arg EXTI5: ÍⲿÖжÏͨµÀ5 * @arg EXTI6: ÍⲿÖжÏͨµÀ6 * @arg EXTI7: ÍⲿÖжÏͨµÀ7 * @arg EXTI8: ÍⲿÖжÏͨµÀ8 * @arg EXTI9: ÍⲿÖжÏͨµÀ9 * @arg EXTI19: ÍⲿÖжÏͨµÀ10 * @arg EXTI11: ÍⲿÖжÏͨµÀ11 * @arg EXTI12: ÍⲿÖжÏͨµÀ12 * @arg EXTI13: ÍⲿÖжÏͨµÀ13 * @arg EXTI14: ÍⲿÖжÏͨµÀ14 * @arg EXTI15: ÍⲿÖжÏͨµÀ15 * @param IRQ_InitStuct: Ö¸Ïò°üº¬Ö¸¶¨IRQÍâÉèÅäÖÃÐÅÏ¢µÄIRQ_InitTypeDef½á¹¹. * @retval None. */ void IRQ_Init(IRQ_Type *IRQx,uint8_t IRQ_Channel, const IRQ_InitTypeDef *IRQ_InitStuct) { uint32_t tmpreg; /* cconfigure the register */ /* Get the CS Register. */ tmpreg = IRQx->SC[IRQ_Channel]; /* Cleat the IRQEDG bit,IRQMOD bit*/ tmpreg &= ~(IRQ_SC_IRQEDG_MASK | IRQ_SC_IRQMOD_MASK); /* Set the IRQEDG bit,IRQMOD bit*/ tmpreg |= ((IRQ_InitStuct->IRQ_EdgeSelect) | (IRQ_InitStuct->IRQ_ModeSelect)); /* Write to IRQ SC */ IRQx->SC[IRQ_Channel] = tmpreg ; } /** * @brief IRQÒý½Å½ûÓÃÄÚ²¿ÉÏÀ­É豸 * @param IRQx: Ñ¡ÔñIRQÍâÉè¡£ * @param IRQ_Channel: Ñ¡ÔñIRQͨµÀ. * Õâ¸ö²ÎÊý¿ÉÒÔÈ¡ÏÂÃæµÄÖµ: * @arg EXTI0: ÍⲿÖжÏͨµÀ0 * @arg EXTI1: ÍⲿÖжÏͨµÀ1 * @arg EXTI2: ÍⲿÖжÏͨµÀ2 * @arg EXTI3: ÍⲿÖжÏͨµÀ3 * @arg EXTI4: ÍⲿÖжÏͨµÀ4 * @arg EXTI5: ÍⲿÖжÏͨµÀ5 * @arg EXTI6: ÍⲿÖжÏͨµÀ6 * @arg EXTI7: ÍⲿÖжÏͨµÀ7 * @arg EXTI8: ÍⲿÖжÏͨµÀ8 * @arg EXTI9: ÍⲿÖжÏͨµÀ9 * @arg EXTI19: ÍⲿÖжÏͨµÀ10 * @arg EXTI11: ÍⲿÖжÏͨµÀ11 * @arg EXTI12: ÍⲿÖжÏͨµÀ12 * @arg EXTI13: ÍⲿÖжÏͨµÀ13 * @arg EXTI14: ÍⲿÖжÏͨµÀ14 * @arg EXTI15: ÍⲿÖжÏͨµÀ15 * @param NewState:IRQÉÏÀ­Ê§ÄÜ״̬ * Õâ¸ö²ÎÊý¿ÉÒÔΪÒÔÏÂÖµ: * Õâ¸ö²ÎÊý¿ÉÒÔÈ¡ÏÂÃæµÄÖµ: * @arg ENABLE: ʧÄÜÄÚ²¿ÉÏÀ­É豸 * @arg DISABLE: ʹÄÜÄÚ²¿ÉÏÀ­É豸 * @retval None. */ void IRQ_PullDevDisableCmd(IRQ_Type *IRQx,uint8_t IRQ_Channel,FunctionalState NewState) { if(NewState != DISABLE ) { /* RQ pull device disabled if IRQPE = 1. */ IRQx->SC[IRQ_Channel] |= IRQ_SC_IRQPDD_MASK; } else { /* IRQ pull device enabled if IRQPE = 1. */ IRQx->SC[IRQ_Channel] &= ~IRQ_SC_IRQPDD_MASK; } } /** * @brief IRQʹÄÜ * @param IRQx: Ñ¡ÔñIRQÍâÉè¡£ * @param IRQ_Channel: Ñ¡ÔñIRQͨµÀ. * Õâ¸ö²ÎÊý¿ÉÒÔÈ¡ÏÂÃæµÄÖµ: * @arg EXTI0: ÍⲿÖжÏͨµÀ0 * @arg EXTI1: ÍⲿÖжÏͨµÀ1 * @arg EXTI2: ÍⲿÖжÏͨµÀ2 * @arg EXTI3: ÍⲿÖжÏͨµÀ3 * @arg EXTI4: ÍⲿÖжÏͨµÀ4 * @arg EXTI5: ÍⲿÖжÏͨµÀ5 * @arg EXTI6: ÍⲿÖжÏͨµÀ6 * @arg EXTI7: ÍⲿÖжÏͨµÀ7 * @arg EXTI8: ÍⲿÖжÏͨµÀ8 * @arg EXTI9: ÍⲿÖжÏͨµÀ9 * @arg EXTI19: ÍⲿÖжÏͨµÀ10 * @arg EXTI11: ÍⲿÖжÏͨµÀ11 * @arg EXTI12: ÍⲿÖжÏͨµÀ12 * @arg EXTI13: ÍⲿÖжÏͨµÀ13 * @arg EXTI14: ÍⲿÖжÏͨµÀ14 * @arg EXTI15: ÍⲿÖжÏͨµÀ15 * @param NewState:IRQʹÄÜ״̬ * Õâ¸ö²ÎÊý¿ÉÒÔÈ¡ÏÂÃæµÄÖµ: * @arg ENABLE: ʹÄÜIRQ¹¦ÄÜ * @arg DISABLE: ʧÄÜIRQ¹¦ÄÜ * @retval None. */ void IRQ_PinEnableCmd(IRQ_Type *IRQx,uint8_t IRQ_Channel,FunctionalState NewState) { if(NewState != DISABLE) { /* Enable IRQ pin function. */ IRQx->SC[IRQ_Channel] |= IRQ_SC_IRQPE_MASK; } else { /* Disable IRQ pin function. */ IRQx->SC[IRQ_Channel] &= ~IRQ_SC_IRQPE_MASK; } } /** * @brief IRQÖжÏʹÄÜ * @param IRQx: Ñ¡ÔñIRQÍâÉè¡£ * @param IRQ_Channel: Ñ¡ÔñIRQͨµÀ. * Õâ¸ö²ÎÊý¿ÉÒÔÈ¡ÏÂÃæµÄÖµ: * @arg EXTI0: ÍⲿÖжÏͨµÀ0 * @arg EXTI1: ÍⲿÖжÏͨµÀ1 * @arg EXTI2: ÍⲿÖжÏͨµÀ2 * @arg EXTI3: ÍⲿÖжÏͨµÀ3 * @arg EXTI4: ÍⲿÖжÏͨµÀ4 * @arg EXTI5: ÍⲿÖжÏͨµÀ5 * @arg EXTI6: ÍⲿÖжÏͨµÀ6 * @arg EXTI7: ÍⲿÖжÏͨµÀ7 * @arg EXTI8: ÍⲿÖжÏͨµÀ8 * @arg EXTI9: ÍⲿÖжÏͨµÀ9 * @arg EXTI19: ÍⲿÖжÏͨµÀ10 * @arg EXTI11: ÍⲿÖжÏͨµÀ11 * @arg EXTI12: ÍⲿÖжÏͨµÀ12 * @arg EXTI13: ÍⲿÖжÏͨµÀ13 * @arg EXTI14: ÍⲿÖжÏͨµÀ14 * @arg EXTI15: ÍⲿÖжÏͨµÀ15 * @param NewState:IRQÖжÏʹÄÜ״̬ * Õâ¸ö²ÎÊý¿ÉÒÔÈ¡ÏÂÃæµÄÖµ: * @arg ENABLE: ʹÄÜIRQÖÐ¶Ï * @arg DISABLE: ʧÄÜIRQÖÐ¶Ï * @retval None */ void IRQ_InterruptEn(IRQ_Type *IRQx,uint8_t IRQ_Channel,FunctionalState NewState) { IRQx->SC[IRQ_Channel] |= IRQ_SC_IRQACK_MASK; if(NewState != DISABLE ) { /* Enable IRQ Interrupt. */ IRQx->SC[IRQ_Channel] |= IRQ_SC_IRQIE_MASK; } else { /* Disable IRQ Interrupt. */ IRQx->SC[IRQ_Channel] &= ~IRQ_SC_IRQIE_MASK; } } /** * @brief »ñÈ¡ÖжÏÇëÇó±êÖ¾¡£ * @param IRQx: Ñ¡ÔñIRQÍâÉè¡£ * @param IRQ_Channel: Ñ¡ÔñIRQͨµÀ. * Õâ¸ö²ÎÊý¿ÉÒÔÈ¡ÏÂÃæµÄÖµ: * @arg EXTI0: ÍⲿÖжÏͨµÀ0 * @arg EXTI1: ÍⲿÖжÏͨµÀ1 * @arg EXTI2: ÍⲿÖжÏͨµÀ2 * @arg EXTI3: ÍⲿÖжÏͨµÀ3 * @arg EXTI4: ÍⲿÖжÏͨµÀ4 * @arg EXTI5: ÍⲿÖжÏͨµÀ5 * @arg EXTI6: ÍⲿÖжÏͨµÀ6 * @arg EXTI7: ÍⲿÖжÏͨµÀ7 * @arg EXTI8: ÍⲿÖжÏͨµÀ8 * @arg EXTI9: ÍⲿÖжÏͨµÀ9 * @arg EXTI19: ÍⲿÖжÏͨµÀ10 * @arg EXTI11: ÍⲿÖжÏͨµÀ11 * @arg EXTI12: ÍⲿÖжÏͨµÀ12 * @arg EXTI13: ÍⲿÖжÏͨµÀ13 * @arg EXTI14: ÍⲿÖжÏͨµÀ14 * @arg EXTI15: ÍⲿÖжÏͨµÀ15 * @retval IRQ flag bit.·µ»ØIRQ±ê־λ¡£ */ FlagStatus IRQ_GetFlag(const IRQ_Type *IRQx,uint8_t IRQ_Channel) { return ((IRQx->SC[IRQ_Channel] & IRQ_SC_IRQF_MASK ) == IRQ_SC_IRQF_MASK); } /** * @brief Çå³ýÖжÏÇëÇó±êÖ¾¡£ * @param IRQx: Ñ¡ÔñIRQÍâÉè¡£ * @param IRQ_Channel: Ñ¡ÔñIRQͨµÀ. * Õâ¸ö²ÎÊý¿ÉÒÔÈ¡ÏÂÃæµÄÖµ: * @arg EXTI0: ÍⲿÖжÏͨµÀ0 * @arg EXTI1: ÍⲿÖжÏͨµÀ1 * @arg EXTI2: ÍⲿÖжÏͨµÀ2 * @arg EXTI3: ÍⲿÖжÏͨµÀ3 * @arg EXTI4: ÍⲿÖжÏͨµÀ4 * @arg EXTI5: ÍⲿÖжÏͨµÀ5 * @arg EXTI6: ÍⲿÖжÏͨµÀ6 * @arg EXTI7: ÍⲿÖжÏͨµÀ7 * @arg EXTI8: ÍⲿÖжÏͨµÀ8 * @arg EXTI9: ÍⲿÖжÏͨµÀ9 * @arg EXTI19: ÍⲿÖжÏͨµÀ10 * @arg EXTI11: ÍⲿÖжÏͨµÀ11 * @arg EXTI12: ÍⲿÖжÏͨµÀ12 * @arg EXTI13: ÍⲿÖжÏͨµÀ13 * @arg EXTI14: ÍⲿÖжÏͨµÀ14 * @arg EXTI15: ÍⲿÖжÏͨµÀ15 * @retval None. */ void IRQ_ClrFlag(IRQ_Type *IRQx,uint8_t IRQ_Channel) { IRQx->SC[IRQ_Channel] |= IRQ_SC_IRQACK_MASK; } /** * @} */ /** * @} */ /** * @} */ #ifdef __cplusplus } #endif /* __cplusplus */