为什么读取定时器的SR = 0,但是却能进中断,
在主函数printf打印tmp的
初始化代码[C] 纯文本查看 复制代码void TIM5_Cap_Init(u16 arr,u16 psc)//ch3 pa2
{
RCC->APB1ENR|=1<<3; //TIM5 时钟使能
RCC->APB2ENR|=1<<2; //使能PORTA时钟
GPIOA->CRL&=0XFFFFF0FF; //PA2 清除之前设置
GPIOA->CRL|=0X00000800; //PA2 输入
GPIOA->ODR|=0<<2; //PA2 下拉
TIM5->ARR=arr; //设定计数器自动重装值
TIM5->PSC=psc-1; //预分频器
TIM5->CCMR1=0x0101; //捕获通道1,2,3,4分别映射到CH1,2,3,4,不滤波,不分频
TIM5->CCMR2=0x0101;
// TIM5->CCMR2|=1<<0; //CC3S=01 选择输入端 IC3映射到TI3上
// TIM5->CCMR2|=0<<4; //IC3F=0000 配置输入滤波器 不滤波
// TIM5->CCMR2|=0<<2; //IC3PS=00 配置输入分频,不分频
TIM5->CCER|=0<<9; //CC3P=0 上升沿捕获
TIM5->CCER|=1<<8; //CC3E=1 捕获使能
TIM5->DIER|=1<<3; //允许捕获中断
TIM5->DIER|=1<<0; //允许更新中断
TIM5->CR1|=0x01; //使能定时器5
MY_NVIC_Init(2,0,TIM5_IRQn,2);//抢占2,子优先级0,组2
}中断代码
[C] 纯文本查看 复制代码void TIM5_IRQHandler(void) //CH3 PA2
{
// u16 tsr;
// tsr=TIM5->SR; //状态寄存器
if((TIM5->SR & 0X0008) == 1)
{
// tmp = TIM5->CNT;
// debug ++;
}
tmp = TIM5->SR;
debug ++;
TIM5->SR = 0; //清楚中断标志
// TIM5->SR&=~(1<<0);//清除更新中断标志位
// TIM5->SR&=~(1<<3);//清除捕获3中断标志位
} |