#CC2540# 我把P1_7作外部中断,采集两个上升沿之间的时间,每次采集到的数据值都相差较大,不知道为何?
这两次上升沿之前大约是90us(因为会随环境变化而变化,所以要采集)。
timer1设定: 跑 Tick frequency/8,Free-running,Tick freq我没定,应该是32M吧,所以每个最小单位0.25us。
外部中断设定:把p1_7设成上升沿外部中断,第一来时,启动timer1,第二次来时,停止timer1,读出来counter值。
附上部分代码:
#pragma vector=P1INT_VECTOR
__interrupt void P1INT_ISR(void)
{
uint8 value;
P1IFG = 0;
P1IF = 0;
if (triggers == 0)
{
///start timer 1
COUNTER_TxCNTL = 0;
COUNTER_TxCTL &= ~((3<<0)|(3<<2));
COUNTER_TxCTL |= (COUNTER_TxCTLdivBIT | COUNTER_TxCTLMODEBIT0);
triggers ++;
}
else
{
P1IEN = 0;
IEN2 &= ~DATA_PxENBIT;
dataHeadT = COUNTER_TxCNTL;
value = COUNTER_TxCNTH;
dataHeadT += (value<<8);
///halt
COUNTER_TxCTL &= ~(3<<0);
triggers = 0;
}
}
启动外部中断是这样的,
P1IFG = 0;
P1IF = 0;
PICTL &= ~DATA_PxICTLBIT;
P1IEN |= DATA_Px;
IEN2 |= DATA_PxENBIT;
IEN0 |= DATA_PxEN0BIT;
由于是第一次使用,搞了很久,不知道问题出在哪里?TI FAE一定要帮我这个忙了!十分感谢,万分感激!
这个问题,当初是由于开了POWER_SAVING,进休眠了的原因。