177 lines
4.0 KiB
C
177 lines
4.0 KiB
C
#include "Bsp.h"
|
|
|
|
SYSTEM_INT_REG SystemIntReg;
|
|
|
|
/**
|
|
* @brief 禁止中断
|
|
* @param
|
|
* @retval void
|
|
* @note void
|
|
* @example void
|
|
*/
|
|
void DisAllowInt(void)
|
|
{
|
|
__set_PRIMASK(1);
|
|
}
|
|
|
|
/**
|
|
* @brief 允许中断
|
|
* @param
|
|
* @retval void
|
|
* @note void
|
|
* @example void
|
|
*/
|
|
void AllowInt(void)
|
|
{
|
|
__set_PRIMASK(0);
|
|
}
|
|
|
|
/**
|
|
* @brief 中断回调函数初始化为空
|
|
* @param
|
|
* @retval void
|
|
* @note void
|
|
* @example void
|
|
*/
|
|
void IntCbInit(void)
|
|
{
|
|
NVIC_PriorityGroupConfig(NVIC_GROUP_LEVEL);
|
|
//memset(&SystemIntReg,NULL,sizeof(SYSTEM_INT_REG));
|
|
}
|
|
/**
|
|
* @brief 中断回调函数注册
|
|
* @param
|
|
* @retval void
|
|
* @note void
|
|
* @example void
|
|
*/
|
|
void IntCbReg(uint32_t Vector, void(*Func)(uint32_t))
|
|
{
|
|
switch (Vector)
|
|
{
|
|
#ifdef USE_USART1
|
|
case USART1_IRQn:
|
|
SystemIntReg.Usart1.CallBack = Func;
|
|
SystemIntReg.Usart1.IntId = USART1_BASE;
|
|
break;
|
|
#endif
|
|
#ifdef USE_USART2
|
|
case USART2_IRQn:
|
|
SystemIntReg.Usart1.CallBack = Func;
|
|
SystemIntReg.Usart1.IntId = USART2_BASE;
|
|
break;
|
|
#endif
|
|
#ifdef USE_USART3
|
|
case USART3_IRQn:
|
|
SystemIntReg.Usart1.CallBack = Func;
|
|
SystemIntReg.Usart1.IntId = USART3_BASE;
|
|
break;
|
|
#endif
|
|
#ifdef USE_USART4
|
|
case UART4_IRQn:
|
|
SystemIntReg.Usart1.CallBack = Func;
|
|
SystemIntReg.Usart1.IntId = UART4_BASE;
|
|
break;
|
|
#endif
|
|
#ifdef USE_USART5
|
|
case UART5_IRQn:
|
|
SystemIntReg.Usart1.CallBack = Func;
|
|
SystemIntReg.Usart1.IntId = UART5_BASE;
|
|
break;
|
|
#endif
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* @brief 中断NVIC配置
|
|
* @param
|
|
* @retval void
|
|
* @note void
|
|
* @example void
|
|
*/
|
|
void IntSetLevel(uint32_t Vector, uint8_t NvicPrePriority, uint8_t NvicSubPriority)
|
|
{
|
|
NVIC_InitTypeDef NVIC_InitStructure;
|
|
|
|
NVIC_InitStructure.NVIC_IRQChannel = Vector;
|
|
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = NvicPrePriority;
|
|
NVIC_InitStructure.NVIC_IRQChannelSubPriority = NvicSubPriority;
|
|
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
|
|
NVIC_Init(&NVIC_InitStructure);
|
|
}
|
|
|
|
/**
|
|
* @brief 关闭中断
|
|
* @param
|
|
* @retval void
|
|
* @note void
|
|
* @example void
|
|
*/
|
|
void SetIntDisable(uint32_t Vector)
|
|
{
|
|
NVIC_InitTypeDef NVIC_InitStructure;
|
|
|
|
NVIC_InitStructure.NVIC_IRQChannel = Vector;
|
|
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
|
|
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
|
|
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
|
|
NVIC_Init(&NVIC_InitStructure);
|
|
}
|
|
|
|
#ifdef USE_USART1
|
|
void USART1_IRQHandler(void)
|
|
{
|
|
if (USART_GetFlagStatus(USART1, USART_FLAG_ORE) == SET)
|
|
{
|
|
USART_ClearFlag(USART1, USART_FLAG_ORE);
|
|
}
|
|
(*SystemIntReg.Usart1.CallBack)(SystemIntReg.Usart1.IntId);
|
|
}
|
|
#endif
|
|
|
|
#ifdef USE_USART2
|
|
void USART2_IRQHandler(void)
|
|
{
|
|
if (USART_GetFlagStatus(USART2, USART_FLAG_ORE) == SET)
|
|
{
|
|
USART_ClearFlag(USART2, USART_FLAG_ORE);
|
|
}
|
|
(*SystemIntReg.Usart2.CallBack)((void*)SystemIntReg.Usart2.IntId);
|
|
}
|
|
#endif
|
|
|
|
#ifdef USE_USART3
|
|
void USART3_IRQHandler(void)
|
|
{
|
|
if (USART_GetFlagStatus(USART3, USART_FLAG_ORE) == SET)
|
|
{
|
|
USART_ClearFlag(USART3, USART_FLAG_ORE);
|
|
}
|
|
(*SystemIntReg.Usart3.CallBack)((void*)SystemIntReg.Usart3.IntId);
|
|
}
|
|
#endif
|
|
|
|
#ifdef USE_USART4
|
|
void USART4_IRQHandler(void)
|
|
{
|
|
if (USART_GetFlagStatus(UART4, USART_FLAG_ORE) == SET)
|
|
{
|
|
USART_ClearFlag(UART4, USART_FLAG_ORE);
|
|
}
|
|
(*SystemIntReg.Usart4.CallBack)((void*)SystemIntReg.Usart4.IntId);
|
|
}
|
|
#endif
|
|
|
|
#ifdef USE_USART5
|
|
void USART5_IRQHandler(void)
|
|
{
|
|
if (USART_GetFlagStatus(UART5, USART_FLAG_ORE) == SET)
|
|
{
|
|
USART_ClearFlag(UART5, USART_FLAG_ORE);
|
|
}
|
|
(*SystemIntReg.Usart5.CallBack)((void*)SystemIntReg.Usart5.IntId);
|
|
}
|
|
#endif
|