/**
******************************************************************************
* @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 */