微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > TIM2定时器中断与中断嵌套

TIM2定时器中断与中断嵌套

时间:11-11 来源:互联网 点击:

/*************************************************
Function: void NVIC_Config(void)
Description: 嵌套中断断配置函数
Input: 无
Output: 无
*************************************************/
void NVIC_Config(void)
{
/*配置外部中断线路0中断嵌套*/
NVIC_InitTypeDef NVIC_InitStructure;
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1); //嵌套分组为组0,均为响应优先级
NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQn; //中断通道为通道0
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; //抢断优先级为0
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; //响应优先级为0
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //开中断
NVIC_Init(&NVIC_InitStructure);

/*配置定时器TIM1中断嵌套*/
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);
NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQn;
/*抢断优先级为1,之所以设置为1,后面我做了一个中断的打断实验,
即在定时器中断服务程序里设置了一个死循环,而在外部中断0服务
程序里则进行了LED的翻转,实验表明高抢断优先级的中断可以打断
低抢断优先级的中断,即嵌套,但响应优先级不会打断,只会排队*/
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
}

/*************************************************
Function: void Delay(__IO uint32_t nTime)
Description: 精确延时函数,时基根据前面设定,当前
为1ms
Input: 需要延时的时间,单位ms
Output:无
*************************************************/
void Delay(__IO uint32_t nTime)
{
TimingDelay = nTime;
while (TimingDelay != 0);
}

/*************************************************
Function: void TimingDelay_Decrement(void)
Description: SysTick中断服务函数,加在_it.h中的
void SysTick_Handler(void)函数内
Input: 无
Output:无
*************************************************/
void TimingDelay_Decrement(void)
{
if (TimingDelay != 0x00)
{
TimingDelay--;
}
}

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top