void TIM6_IRQHandler(void)
{
#define setbit(x,y) x|=(1<<y) //把X的第Y位置1
#define clrbit(x,y) x&=!(1<<y) //把X的第Y位置0
clrbit(TIM2->CR1,0); //关闭所有定时器
clrbit(TIM3->CR1,0);
clrbit(TIM4->CR1,0);
clrbit(TIM5->CR1,0);
clrbit(TIM1->CR1,0);
clrbit(TIM8->CR1,0);
clrbit(TIM6->CR1,0);
if(RT_Mode_Flag)
{
if(RT_Times < RT_Action_Times_Max )
{
setbit(TIM2->EGR,0); //复位计数器并产生更新事件
setbit(TIM3->EGR,0);
setbit(TIM4->EGR,0);
setbit(TIM5->EGR,0);
setbit(TIM1->EGR,0);
setbit(TIM8->EGR,0);
TIM1->ARR = ARR[0]; //重装值
TIM1->CCR3 = CCR[0];
TIM2->ARR = ARR[1];
TIM2->CCR3 = CCR[1];
TIM3->ARR = ARR[2];
TIM3->CCR1 = CCR[2];
TIM4->ARR = ARR[3];
TIM4->CCR1 = CCR[3];
TIM5->ARR = ARR[4];
TIM5->CCR4 = CCR[4];
TIM8->ARR = ARR[5];
TIM8->CCR2 = CCR[5];
setbit(TIM2->CR1,0); //打开所有定时器
setbit(TIM3->CR1,0);
setbit(TIM4->CR1,0);
setbit(TIM5->CR1,0);
setbit(TIM1->CR1,0);
setbit(TIM8->CR1,0);
setbit(TIM6->CR1,0);
... ...
自关闭定时器到打开定时器......这段时间一共花了6-8us(用示波器看的)
怎么优化代码让时间更短些 |