TI中文支持网
TI专业的中文技术问题搜集分享网站

Temperature Sensor例子中的按键中断如果发生在温度平均计算中间会影响么?

当作休闲,整理官方和我的改编的程序的注释和框图,想起之前的一个疑惑,写下来问问,怕忘了

主程序循环中:
for (i = 0; i < 8; i++)
tempAverage += tempMeasured;
tempAverage >>= 3; // Divide by 8 to get average

按键中断:
if (applicationMode == APP_APPLICATION_MODE)
{
tempCalibrated = tempAverage;
calibrateUpdate = 1;
}

如果中断发生在for循环中间会有影响么?

官方主程序没有或者一下在找不到的可到http://bbs.eeworld.com.cn/thread-308725-1-1.html,其中有官方链接,附件里也有

Young Hu:

不会有影响,编译器在会生产将context中相应的通用寄存器压入堆栈的汇编代码。如果不放心的话,可以手动压栈

我查看了工程文件下的一个函数的汇编代码如图所示。。

Fuchong Wang:

回复 Young Hu:

啊!

难道这的如此?

我说的是tempCalibrated的值呀,按键的作用应该就是将tempCalibrated值设为当前的平均温度empAverage值呀,如果在主程序for循环中发生中断,tempCalibrated可能就是近似于平均温度的倍数了

我开始还是故意发这个帖子认为肯定是bug无疑呢,虽然委婉地有点过分,不过还是可以看看德州仪器是否够大气,应该是给个奖品给我比遮掩强的

看来我还得想想

Fuchong Wang:

回复 Fuchong Wang:

我开始还想着肯定是德州的错了,这也没有什么大不了的,德州那么多产品,工程师可能也很忙,再说这个小东西也不是什么,工程师也不一定放在心上,最多是管理还待进一步加紧不能懈怠,所以发这个帖子也不能算多丢德州的面子,再说不都说老外不怎么讲面子么?

可笑我

Peter_Zheng:

显然这程序是有bug存在,可以在ad中断里做,也可以用其他方法fix掉.

Young Hu:

回复 Fuchong Wang:

是我理解错了。那如果像你说的那样,这个值的显示是要出错了。

没什么可遮掩的!欢迎你多发现bug!

Fuchong Wang:

回复 Peter_Zheng:

我也以为是,不过这也没什么大不了的,工程师出错也是常有的事,火星车还趴在那儿好一段时间呢

Fuchong Wang:

回复 Young Hu:

可不能说多发现bug呀,我也是初接触430,没那么大水平呀

要是说要我多提建议,倒是可能有时候会斗胆说几句不一定对的

既然您这么说了,那我就就这个lauchpad的Temperature Sensor例子再疑问一个问题:

void PreApplicationMode(void)

{    

 LED_DIR |= LED1 + LED2;

 LED_OUT |= LED1;                          // To enable the LED toggling effect

 LED_OUT &= ~LED2;

 BCSCTL1 |= DIVA_1;                        // ACLK/2

 BCSCTL3 |= LFXT1S_2;                      // ACLK = VLO

 TACCR0 = 1200;                             //  

 TACTL = TASSEL_1 | MC_1;                  // TACLK = SMCLK, Up mode.  

 TACCTL1 = CCIE + OUTMOD_3;                // TACCTL1 Capture Compare

 TACCR1 = 600;  

 __bis_SR_register(LPM3_bits + GIE);          // LPM0 with interrupts enabled

}

其中TACCTL1 = CCIE + OUTMOD_3; 这一句的OUTMOD_3加上是什么意思?TACCTL1 的功能输出是否对应p1.6脚?当然虽然p1.6接着一个LED但P1.6并没有打开特殊功能,所以应该对LED没有作用,那么添上这个模式定义有什么意义呢?我确定不了,能不能麻烦指教一下?我有点怀疑那是多余的,当然对程序的运行功能没有影响。如果确实是多余的,对作为一个第一次接触430的初学者,是否会起到误导的作用呢?导致初学者就demo源码学习msp430的定时器功能产生额外的困惑,以为德州加上这个模式肯定是有意义的,是自己没有理解。如果是这样,能否修正掉以利于初学者呢?

当然我的怀疑不一定对,那请您指教我一次,加上这个OUTMOD_3的作用,谢谢!

Fuchong Wang:

回复 Fuchong Wang:

应该是这个函数中,复制错了:

void ConfigureTimerPwm(void)

{

 timerMode = TIMER_PWM_MODE;

 TACCR0 = TIMER_PWM_PERIOD;                              //  

 TACTL = TASSEL_2 | MC_1;                  // TACLK = SMCLK, Up mode.

 TACCTL0 = CCIE;

 TACCTL1 = CCIE + OUTMOD_3;                // TACCTL1 Capture Compare

 TACCR1 = 1;

}

不过上面一个帖子中的也应该是一样的问题吧

Jason Guo:

回复 Fuchong Wang:

关于这个OUTMOD_3你说的很对。在这个程序中是没有作用的。

赞(0)
未经允许不得转载:TI中文支持网 » Temperature Sensor例子中的按键中断如果发生在温度平均计算中间会影响么?
分享到: 更多 (0)