MSP430F5438A 的 P7.3接了个PWM输出的模块, 对应的是TA1.2, 请问如何用这个口捕捉方波? 我下面你的代码无法进入中断 Case 2.
另外, 请问Read函数如何写最好呢? 是根据标志位判断
Read()
{
1. 开启捕捉
2. 等待标志位=1, 得到结果
3. 关闭捕捉
}
这样写对吗? 还是让他一直捕捉?
ulong start= 0;
ulong end= 0;
ulong diff= 0;
uint overflow=0;
uchar cap_flag= 0;
#pragma vector=TIMER1_A1_VECTOR
__interrupt void TIMER1_A1(void)
{
switch(__even_in_range(TA1IV,14)) //向量查询
{
case 2: //捕获中断
{
if(TA1CCTL2&CM0) //上升沿
{
cap_flag= 0;
TA1CCTL2=(TA1CCTL2&(~CM0))|CM1; //更变设置为下降沿触发
start=TA1CCR2; //记录初始时间
overflow=0; //溢出计数变量复位
}
else if (TA1CCTL2&CM1) //下降沿
{
TA1CCTL2=(TA1CCTL2&(~CM1))|CM0; //更变设置为上升沿触发
end=TA1CCR2; //用start,end,overflow计算脉冲宽度
diff= end-start;
cap_flag= 1;
}
}
break;
case 10: //定时器溢出中断
overflow++;
break; //溢出计数加1
default:
break;
}
}
void Init_Timer1_A3(void)
{
P7SEL|=BIT3;//选择p7.3第二功能
P7DIR &=~BIT3;//选择p7.3方向为输入
TA1CCTL2&=~(CCIS1+CCIS0); // 捕获源为P7.3,即CCI0A(也是CCI0B)
TA1CCTL2|=CM0+SCS+CAP; //下降沿捕获,同步捕获,工作在捕获模式
// TA1CCTL0|=CCIE; //允许捕获比较模块提出中断请求
TA1CCTL2|=CCIE; //允许捕获比较模块提出中断请求
// TA1CCTL2|=CCIE; //允许捕获比较模块提出中断请求
// TA1CTL|=TASSEL_2; //选择时钟SMCLK
// TA1CTL|=TACLR; //定时器清零,
// TA1CTL|=MC_2;//定时器开始计数(连续计数模式0~0xFFFF) TBCTL|=MC_2;
TA1CTL = TASSEL_1 + MC_2 + TACLR + TAIE;
}
|