微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 无线和射频 > TI蓝牙设计交流 > 关于CC2540低功耗情况下系统的enent的时间计算准确,但是ACMP比较器中断获取的时间就不准确,假如把低功耗power saving去掉就没问题

关于CC2540低功耗情况下系统的enent的时间计算准确,但是ACMP比较器中断获取的时间就不准确,假如把低功耗power saving去掉就没问题

时间:10-02 整理:3721RD 点击:

ACMP获取时间间隔函数

#pragma vector = P0INT_VECTOR //analog comparator
__interrupt void P0_INT(void)
{
if ((P0IFG&&(1<<5))) //边沿触发中断
{
IRCON = 0x00; //清中断标志,也可由硬件自动完成
P0IF = 0;
P0IFG = 0;
HalLedSet(HAL_LED_1,HAL_LED_MODE_TOGGLE);
uint8 i = 0,j = 0;
float average_rate = 0.0;
uint32 sum = 0;

last_val_flg = 1;

time2 = osal_GetSystemClock();

timeinterval = time2 - time1;

time1 = time2;
//算法................

timeinterval = 0;
}
}

用HEART PROFILE的发送notification时间获取时间间隔却很准确

static void heartRatePeriodicTask( void )
{
uint32 timeinterval_t = 0;

time_2 = osal_GetSystemClock();
timeinterval_t = time_2 - time_1;

time_1 = time_2;
//算法...........................
if (gapProfileState == GAPROLE_CONNECTED)
{
// static char buf[10];
// send heart rate measurement notification
heartRateMeasNotify();

// Restart timer
osal_start_timerEx( heartRate_TaskID, HEART_PERIODIC_EVT, DEFAULT_HEARTRATE_PERIOD );
}
}

两个都是用time2 -time1,然后再把time2的值赋给time1,把osal_GetSystemClock();的值赋给time2,以此计算每次ACMP中断的间隔,以准确的信号源产生中断,在没有低功耗的情况下准确,但是有低功耗的情况下就不准确了,例如本来应该是1200ms的时间间隔,但是在我的数组里面实际上的是1145,1250,1145,1250。。。。这样的数据,有规律,但不准确,又例如应该是600ms的间隔,数组缺位630,630,529,630,630,529.。。。。,假如把低功耗power saving去掉,则很正常,完全没误差

还有一种情况,在低功耗的情况下,刚刚广播时候时间间隔是不准的,然后过了几秒钟后,广播稳定了后,时间间隔又很正常了,但是一但建立连接,数据立马如上面所说的那样。

会不会是LL层的中断优先级比acmp的中断优先级高导致的呢?为什么只有在低功耗的情况下才会发生?求解答,谢谢

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top