zw_7627 发表于 2017-1-20 13:56:59

请教:计数器在翻转的情况下,如何正确取出两个时刻的...

要求:电平中断方式,对脉冲周期进行计数。
方法:上升沿,第一次进中断,读一次计数器的值,第二次进中断时读取计数器的值,与前者相减,即得出脉冲周期。
问题:在第一次中断读计数器值时,清零,第二次中断读的值很准确。但由于计数器清零会影响到另外一路PWM的输出。故不能对其清零。
如何在不清零的情况下,正确取出计数器的值?

y595906642 发表于 2017-1-20 15:09:45

不清零就是了

zw_7627 发表于 2017-1-20 15:16:41

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:02:13

直接做减法,原理没问题

wswh2o 发表于 2017-1-20 17:03:22

只要周期不超过定时器溢出时间就可以这么做,如果超过,还需要对溢出中断计数

zw_7627 发表于 2017-1-20 21:54:21

wswh2o 发表于 2017-1-20 17:03
只要周期不超过定时器溢出时间就可以这么做,如果超过,还需要对溢出中断计数 ...

计数器周期设置2ms,脉冲周期1ms,直接做减法不清零的情况时,SpdInCnt的值不固定,乱跳,且与理论值相差太大。清零则为理论值,符合要求。

fiddly 发表于 2017-1-21 08:00:11

减之前做下比较大小么,不清零肯定有溢出么。

q457344370 发表于 2017-1-21 08:17:11

把溢出中断用上就行了

zw_7627 发表于 2017-1-22 23:53:59

q457344370 发表于 2017-1-21 08:17
把溢出中断用上就行了

把TPM的溢出中断打开,然后在中断函数中怎么实现? 没想到好的办法。。。

zw_7627 发表于 2017-1-22 23:58:14

fiddly 发表于 2017-1-21 08:00
减之前做下比较大小么,不清零肯定有溢出么。

TMP值比SpdInCnt大的话,肯定没问题。如果比较结果为小,是否是65536-TMR第一次进中断的值+第二次进中断的值。手上没有板子,明天去试试。

zw_7627 发表于 2017-1-23 09:25:12

本帖最后由 zw_7627 于 2017-1-23 12:29 编辑

结贴。问题解决了:如果比较结果为小,TPMMOD-TMR第一次进中断的值+第二次进中断的值

jiamingz 发表于 2017-1-23 12:28:06

定时器比较和溢出?

lly10011 发表于 2017-1-23 14:15:18

不要清零,直接减。如果当前值比前一次小,则加上理论周期再减前一次值。

q457344370 发表于 2017-1-23 14:42:40

zw_7627 发表于 2017-1-22 23:53
把TPM的溢出中断打开,然后在中断函数中怎么实现? 没想到好的办法。。。

记录一次计时中定时器溢出的次数
页: [1]
查看完整版本: 请教:计数器在翻转的情况下,如何正确取出两个时刻的...