[P]调试过程有遇到问题了[/P][P]我现在要用P4.0-P4.3,同时捕获4路外来的PWM.计算脉宽,但是我同时开启4路捕获,1,2,3路就不工作[/P][P] //TB0[/P][P] TBCCTL0&=~(CCIS1+CCIS0); // 捕获源为P4.0,即CCI0A(也是CCI0B) TBCCTL0|=CM_2+SCS+CAP; //下降沿捕获,同步捕获,工作在捕获模式 TBCCTL0|=CCIE; //允许捕获比较模块提出中断请求 //TB1 TBCCTL1&=~(CCIS1+CCIS0); // 捕获源为P4.1,即CCI0A(也是CCI0B) TBCCTL1|=CM_2+SCS;//+CAP; //下降沿捕获,同步捕获,工作在捕获模式 //TBCCTL1|=CCIE; //允许捕获比较模块提出中断请求 //TB2 TBCCTL2&=~(CCIS1+CCIS0); // 捕获源为P4.2,即CCI0A(也是CCI0B) TBCCTL2|=CM_2+SCS;//+CAP; //下降沿捕获,同步捕获,工作在捕获模式 //TBCCTL2|=CCIE; //允许捕获比较模块提出中断请求 //TB3 TBCCTL3&=~(CCIS1+CCIS0); // 捕获源为P4.3,即CCI0A(也是CCI0B) TBCCTL3|=CM_2+SCS;//+CAP; //下降沿捕获,同步捕获,工作在捕获模式 //TBCCTL3|=CCIE; //允许捕获比较模块提出中断请求 TBCTL|=ID_3; TBCTL|=TBSSEL_2; //选择时钟MCLK TBCTL|=TBCLR; //定时器清零, TBCTL|=MC_2; //定时器开始计数(连续计数模式0~0xFFFF) _EINT();[/P][P]我原版TB1,TB2,TB3的CCIE 和CAP是没有屏蔽掉的,1,2,3的捕获功能不起作用,[/P][P]后面我把1,2,3屏蔽掉,检测完0路,关闭0路,然后开启1路,检测完1路,再关闭1路,开启2路,依次这样,只能一路一路的检测,这是什么原因,贴一段代码[/P][P]//―――――定时器TB的CCR0的中断:用于检测脉冲上升与下降沿――――
#pragma vector=TIMERB0_VECTOR
__interrupt void TimerB0(void)
{ if(TBCCTL0&CM_2) //捕获到下降沿 {
TBCTL|=TBCLR;
TBCCTL0=(TBCCTL0&(~CM_2))|CM_1; //改为上升沿捕获:CM1置零,CM0置一[/P][P] } else if(TBCCTL0&CM_1) //捕获到上升沿 {
width[i++]=TBCCR0; //记录下结束时间
TBCCTL0=(TBCCTL0&(~CM_1))|CM_2; //改为下降沿捕获:CM0置零,CM1置一
if(i==10)
{
i=0;
sample_flag0=1;
TBCCTL0&=~CCIE; //[COLOR=#ff0000]关闭TB0
[/COLOR] TBCCTL1|=CCIE+CAP; //[COLOR=#ff0000]开启TB1
[/COLOR] TBCTL|=TBCLR;
} }[/P][P] [/P][P]// Timer_B7 Interrupt Vector (TBIV) handler
#pragma vector=TIMERB1_VECTOR
__interrupt void Timer_B(void)
{ switch( TBIV ) { case 2:
if(TBCCTL1&CM_2)
{
TBCTL|=TBCLR;
TBCCTL1=(TBCCTL1&(~CM_2))|CM_1; //改为上升沿捕获:CM1置零,CM0置一
}
else if(TBCCTL1&CM_1) //捕获到上升沿
{
width[i++]=TBCCR1; //记录下结束时间
TBCCTL1=(TBCCTL1&(~CM_1))|CM_2; //改为下降沿捕获:CM0置零,CM1置一
if(i==10)
{
i=0;
sample_flag0=1;
TBCCTL1&=~CCIE; //[COLOR=#ff0000]关闭TB1
[/COLOR] TBCCTL2|=CCIE+CAP; //[COLOR=#ff0000]开启TB2
[/COLOR] TBCTL|=TBCLR;
}
}
break; // CCR1 case 4:
if(TBCCTL2&CM_2)
{
TBCTL|=TBCLR;
TBCCTL2=(TBCCTL2&(~CM_2))|CM_1; //改为上升沿捕获:CM1置零,CM0置一
}
else if(TBCCTL2&CM_1) //捕获到上升沿
{
width[i++]=TBCCR2; //记录下结束时间
TBCCTL2=(TBCCTL2&(~CM_1))|CM_2; //改为下降沿捕获:CM0置零,CM1置一
if(i==10)
{
i=0;
sample_flag0=1;
TBCCTL2&=~CCIE;
TBCCTL3|=CCIE+CAP;
TBCTL|=TBCLR;
}
}
break; // CCR2 case 6:
if(TBCCTL3&CM_2)
{
TBCTL|=TBCLR;
TBCCTL3=(TBCCTL3&(~CM_2))|CM_1; //改为上升沿捕获:CM1置零,CM0置一
}
else if(TBCCTL3&CM_1) //捕获到上升沿
{
width[i++]=TBCCR3; //记录下结束时间
TBCCTL3=(TBCCTL3&(~CM_1))|CM_2; //改为下降沿捕获:CM0置零,CM1置一
if(i==10)
{
i=0;
sample_flag0=1;
TBCCTL3&=~CCIE;
}
}
break; // CCR3 case 14: P1OUT ^= 0x01; // overflow
break; }
}[/P][P] [/P][P]}[/P] |