请教:计数器在翻转的情况下,如何正确取出两个时刻的...
要求:电平中断方式,对脉冲周期进行计数。方法:上升沿,第一次进中断,读一次计数器的值,第二次进中断时读取计数器的值,与前者相减,即得出脉冲周期。
问题:在第一次中断读计数器值时,清零,第二次中断读的值很准确。但由于计数器清零会影响到另外一路PWM的输出。故不能对其清零。
如何在不清零的情况下,正确取出计数器的值? 不清零就是了 y595906642 发表于 2017-1-20 15:09
不清零就是了
不清零,软件咋弄呢?,注释的两行就是没清零。得出的SpdInCnt的值乱跳。。。
void PTB2IE_ISR(void)
{
static U08 Flag = 0;
PTBSC_PTBACK = 1;
if(Flag == 0)
{
Flag = 1;
//SpdInCnt = TPM1CNT;
TPM1CNT = 0;
return;
}
if(Flag == 1)
{
Flag = 0;
// SpdInCnt = TPM1CNT - SpdInCnt;
SpdInCnt = TPM1CNT;
}
} 直接做减法,原理没问题 只要周期不超过定时器溢出时间就可以这么做,如果超过,还需要对溢出中断计数 wswh2o 发表于 2017-1-20 17:03
只要周期不超过定时器溢出时间就可以这么做,如果超过,还需要对溢出中断计数 ...
计数器周期设置2ms,脉冲周期1ms,直接做减法不清零的情况时,SpdInCnt的值不固定,乱跳,且与理论值相差太大。清零则为理论值,符合要求。
减之前做下比较大小么,不清零肯定有溢出么。 把溢出中断用上就行了 q457344370 发表于 2017-1-21 08:17
把溢出中断用上就行了
把TPM的溢出中断打开,然后在中断函数中怎么实现? 没想到好的办法。。。 fiddly 发表于 2017-1-21 08:00
减之前做下比较大小么,不清零肯定有溢出么。
TMP值比SpdInCnt大的话,肯定没问题。如果比较结果为小,是否是65536-TMR第一次进中断的值+第二次进中断的值。手上没有板子,明天去试试。 本帖最后由 zw_7627 于 2017-1-23 12:29 编辑
结贴。问题解决了:如果比较结果为小,TPMMOD-TMR第一次进中断的值+第二次进中断的值 定时器比较和溢出? 不要清零,直接减。如果当前值比前一次小,则加上理论周期再减前一次值。 zw_7627 发表于 2017-1-22 23:53
把TPM的溢出中断打开,然后在中断函数中怎么实现? 没想到好的办法。。。
记录一次计时中定时器溢出的次数
页:
[1]