中级会员
- 积分
- 303
- 金钱
- 303
- 注册时间
- 2016-5-9
- 在线时间
- 70 小时
|
20金钱
本帖最后由 黄洪文 于 2017-3-24 19:40 编辑
先指定上升沿触发捕获,当发生捕获事件时读取CCR寄存器的值,再改变为下降沿捕获,当再次中断时读取CCR的值与上次的捕获值相减,,,,,这样做对吗?[mw_shl_code=applescript,true]//TIM2捕获中断服务函数
INTERRUPT_HANDLER(TIM2_CAP_COM_IRQHandler, 14)
{
uint8_t CC2IF;
static uint8_t TIM2CH2_CAPTURE_STA=0;
CC2IF=TIM2->SR1;//第二位是 CC2IF: 捕获/比较2 中断标志 0000 0000
static uint8_t cnt_capture=0;
if(CC2IF&0x04)//捕获2发生捕获事件
{
if(TIM2CH2_CAPTURE_STA==0) //捕获到一个上升沿
{
TIM2CH2_CAPTURE_STA=1; //下次捕获的是下降沿
TIM2CH2_CAPTURE_VAL_High=TIM2->CCR2H;//获取捕获到上升沿时候的值
TIM2CH2_CAPTURE_VAL_High<<=8;
TIM2CH2_CAPTURE_VAL_High+=TIM2->CCR2L;
TIM2->CCER1 |=1<<5; //CC2P=1 设置为下降升沿捕获
cnt_capture++;
}
else //还未开始,第一次捕获下降沿
{
TIM2CH2_CAPTURE_VAL_Low=TIM2->CCR2H;//获取捕获到下降沿时候的值
TIM2CH2_CAPTURE_VAL_Low<<=8;
TIM2CH2_CAPTURE_VAL_Low+=TIM2->CCR2L;
TIM2CH2_CAPTURE_STA =0;
TIM2->CCER1&=~(1<<5); //CC2P=1 设置捕获上升沿
cnt_capture++;
}
if(cnt_capture==2)
{
TIM2CH2_CAPTURE_VAL= abs(TIM2CH2_CAPTURE_VAL_Low-TIM2CH2_CAPTURE_VAL_High);
cnt_capture=0;
}
}
TIM2->SR1&=~(1<<2);//清除捕获中断标志位
}[/mw_shl_code]
但是测试结果不对!!!
|
|