Board logo

标题: [求助] 关于9s12EP100 的 ECT使用 [打印本页]

作者: buyan    时间: 2008-11-27 13:59     标题: [求助] 关于9s12EP100 的 ECT使用

我目前正在用9S12EP100的ECT的输入捕捉功能.

现在遇到一个问题:我要用ECT的IOC0,IOC1,IOC2三个通道来捕捉PWM波输入,需要精确计算每个方波的时间.

在实际使用中IOC1和IOC2通道要考虑定时器溢出的问题(方波频率很低时).

目前状态:还没有用IOC2通道,对IOC1通道的溢出是通过定时器溢出中断累积溢出次数来计算方波时间,这样处理程序没有问题.

但是如果要IOC2通道的话,这样就和IOC1通道的溢出中断有点冲突,请问高手们这个问题怎么解决,

很急,谢谢了.


作者: strongchen    时间: 2008-11-27 14:36

不同的通道的基准计数器是公用的,它们的溢出也是同时发生的,怎么会冲突呢?


作者: buyan    时间: 2008-11-27 14:58

恩,

7个IOC通道共用一个计数器TCNT;

另外我想问下,这个TCNT计数器在IOC中断来时是否自动清零?

谢谢


作者: strongchen    时间: 2008-12-1 09:54

它溢出后就重新开始计数了。
作者: iehome    时间: 2008-12-5 16:01

应该在每个通道设置一个定时器溢出次数累加变量,每个变量在中断中计算出方波的时间后清零。如:

#pragma CODE_SEG NON_BANKED


void interrupt 10 ISR1(void)
{


C1CapTimeNew =TC2;


C1IntTimeNew=65536*C1TovCount + C1CapTimeNew - C1CapTimeOld ;


C1TovCount=0;


C1CapTimeOld=C1CapTimeNew;


}


void interrupt 9 ISR2(void)
{


C2CapTimeNew=TC1;


C2IntTimeNew = 65536*C2TovCount + C2CapTimeNew - C2CapTimeOld ;


C2TovCount=0;


C2CapTimeOld=C2CapTimeNew;




}


void interrupt 16 Timer_Overflow_ISR(void)
{




C1TovCount++;
C2TovCount++;
(void)TCNT;

}
#pragma CODE_SEG DEFAULT

[此贴子已经被作者于2008-12-5 16:01:38编辑过]






欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) Powered by Discuz! 7.0.0