/**
|
******************************************************************************
|
* @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.
|
*
|
* <h2><center>© COPYRIGHT 2019 Chipways</center></h2>
|
******************************************************************************
|
*/
|
#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 */
|