现在 想用MSP430F4152 TIMERA 捕捉P.12端口的脉冲宽度,现在是在捕捉到第一个脉冲上升源后进入 LPM3,等待下一个下降源后唤醒,计算两个源之间的时间,目前的问题是唤醒不能可靠唤醒,上升源和下降源直接的时间不对,想请教一下 在进入LPM3低功耗模式后,捕捉模式是否可以有效唤醒?时间差是否会准确?谢谢!
初始化如下
P1DIR &=~(BIT2); // P1.2(TA1)设为输入(可省略)
P1SEL |= BIT2; // P1.2设为第二功能(TA1) //设置这个位后 P1.2的中断功能就失效
TACTL = TASSEL_1 +ID_0+ MC_2 + TAIE + TACLR; // TA连续计数,开始计时,SMCLK,开中断
TACCTL1 = CAP + CM_1 + SCS + CCIE; //CCIxA and CCIxB are connected to external pins or internal signals
//Key=0; //
#pragma vector=TIMERA1_VECTOR //定时器A中断处理
__interrupt void timer_a(void)
{
LPM3_EXIT;
switch(TAIV) //向量查询
{ case 2: //捕获中断
if(CCTL1&CM0) //上升沿
{
CCTL1=(CCTL1&(~CM0))|CM1; //更变设置为下降沿触发
// start=TAR; //记录初始时间
start=0;
// overflow=0; //溢出计数变量复位
temp=temp+temp_add;
if(fangxiang==0) //反转
F_zong=F_zong+temp_add;
if(plus_UP==1)
{
start=TAR;
// start=TACCR1;
TAR=0;
// TACTL = TACTL| TACLR;
TACCR1=0;
plus_UP=0;
maikuan= overflow<<16+start;
overflow=0;
flow_N[N_count]=maikuan;
N_count++;
if(N_count>7)
N_count=0;
}//temp++;
}
else if (CCTL1&CM1) //下降沿
{
CCTL1=(CCTL1&(~CM1))|CM0; //更变设置为上升沿触发
end_D=TAR; //用start,end,overflow计算脉冲宽度
TAR=0;
// end_D=TACCR1;
// TACCR1=0;
temp=temp+temp_add;
if(fangxiang==0) //反转
F_zong=F_zong+temp_add;
if(N_count==0)
F_count=0;
if(plus_UP==0)
{
plus_UP=1;
overflow= overflow<<16;
maikuan= overflow+start;
overflow=0;
flow_F[F_count]=maikuan;
F_count++;
if(F_count>7)
F_count=0;
}
}
break;
case 10: //定时器溢出中断
overflow++;
if(overflow>30); //时钟连续溢出30次 ,脉宽滑差值赋值0
shunshi_C=0;
// time_over++;
break; //溢出计数加1
default:break;
}
}