论坛元老
 
- 积分
- 3347
- 金钱
- 3347
- 注册时间
- 2013-4-10
- 在线时间
- 333 小时
|
发表于 2016-9-30 22:20:30
|
显示全部楼层
/********************************************************************************************
函数名: 定时器1配置输入捕获
调 用: TIM1_IRD_StartWork_int(void)
参 数: 无
********************************************************************************************/
void TIM1_IRD_StartWork_int(void)
{
RCC->APB2ENR |= 1<<11; //TIM1时钟使能
//RCC->APB2ENR |= 1<<2; //使能PORTA时钟
// GPIOA->CRH &= 0xFFFF0000;
// GPIOA->CRH |= 0x0000BBBB; //PA8,PA9,PA10,PA11 复用功能
TIM1->ARR = 60000; //设定计数器自动重装值
TIM1->PSC = 72 ; //预分频器72,得到1MHZ的计数时钟
BIT_ADM(TIM1->CR1,7) = 1;
BIT_ADM(TIM1->CR1,4) = 0;
BIT_ADM(TIM1->CCMR2,15) = 0; //IC4F = 0100; N=6 配置输入捕获2滤波
BIT_ADM(TIM1->CCMR2,14) = 1;
BIT_ADM(TIM1->CCMR2,13) = 0;
BIT_ADM(TIM1->CCMR2,12) = 0;
BIT_ADM(TIM1->CCMR2,11) = 0; //IC4PSC = 00;不分频
BIT_ADM(TIM1->CCMR2,10) = 0;
BIT_ADM(TIM1->CCMR2, 9) = 0; //CC4S = 10;选择输入端口IC4映谢到 TI3上
BIT_ADM(TIM1->CCMR2, 8) = 1;
BIT_ADM(TIM1->CCER, 12) = 1; //OC4 输入捕获使能
BIT_ADM(TIM1->CCER, 13) = 0; //高电平有效P =0;
BIT_ADM(TIM1->DIER, 4) = 1; //充许捕获4中断
BIT_ADM(TIM1->DIER, 0) = 1; //定时器更新中断使能
// BIT_ADM(TIM1->DIER, 6) = 1; //充许触发中断(定时器1需要开这个中断才能使用)
MY_NVIC_Init(6,0,TIM1_UP_IRQn,4); //抢占3,子优先级0,组4
BIT_ADM(TIM1->CR1,0)=1; //使能定时器1
}
/********************************************************************************************
函 数 名: TIM1_IRQHandler: 定时器1中断函数
调 用: 无
参 数: 无
返 回 值: 无
********************************************************************************************/
void TIM1_UP_IRQHandler(void)
{
if(BIT_ADM(TIM1->SR ,0) ==1)
{//溢出中断
BIT_ADM(TIM1->SR ,0) = 0; //清溢出中断标志位
if((STATUS & 0x0f)< 14) STATUS ++;
else{ //输入脉冲变有变化时间太长了
STATUS = 0;
MOTOR_SHOULUN = 0;
}
}
if(BIT_ADM(TIM1->SR ,4)==1)
{//CC4IE中断
BIT_ADM(TIM1->SR ,4) = 0; //清捕获中断标志位
if(STATUS & 0x80)
{//已置下降沿捕获标志计算输入脉冲时间
MOTOR_SHOULUN = TIM1->CCR4; //读取CCR2也可以清CC1IF标志位
TIM1->CNT = 10; //清空定时器值
}
else{
STATUS |= 0x80; //初始化捕获标志位
TIM1->CNT = 10; //清空定时器值
}
}
// TIM1->SR = 0; //清除所有中断标志
}
|
|