CH558 TIMER2捕捉模式的几个问题?

问题1 CH558 TIMER2捕捉模式时,对T2EX引脚的脉冲进行捕捉,请问如何对TIMER2计数器的计数溢出进行计数?

我做试验时,在timer2中断程序中用UINT8 cnt对溢出中断计数,但发现cnt计数经常溢出且TIMER2溢出中断频率很快.中断程序如下:

/*******************************************************************************
* Function Name  : mTimer2Interrupt()
* Description    : CH559定时计数器2定时计数器中断处理函数
*******************************************************************************/
void    mTimer2Interrupt( void ) interrupt INT_NO_TMR2 using 2     //timer2中断服务程序,使用寄存器组1
{
     mTimer2RunCTL( 0 );                                                       //关定时器
     cnt++;
      LED=!LED;
    if(EXF2)        //T2ex电平变化中断中断标志
    {
      EXF2 = 0;                                                             //清空T2ex捕捉中断标志        
      count0 = count1;            //备份上一次的捕获值
       ((UINT8 *)&count1)[3] = RCAP2L;  //保存本次的捕获值
       ((UINT8 *)&count1)[2] = RCAP2H;
       ((UINT8 *)&count1)[1] = cnt;
       ((UINT8 *)&count1)[0] = 0;

       length = count1 - count0;   //计算两次捕获的差值,即得到时间长度
         ((UINT8 *)&length)[0] = 0;
         finshFlag=1;    
    }

   mTimer2RunCTL(1 );   

 }


问题2:选用内部12M 时钟,如果不用CfgFsys( ) 函数配置,是否Fsys=Fosc=12M? 另外请问MASK_PLL_MULT如何设置PLL时钟倍频系数?因为复位值是11000b=18(hex),如果我要PLL倍频2倍,如何设置MASK_PLL_MULT?

谢谢!


您好,捕获功能采集的脉宽最好是在一个合理范围内,如果经常溢出,可以尝试将定时器分频调大,有4分频和12分频可选,同时可以调整主频来配合。

系统时钟默认来自内部12M,时钟分频和PLL倍频相同,主频是12M.

如果要获得48M的PLL时钟,倍频写2就行


谢谢你的回复!

我还有个问题请教一下,我用官网的CH559EVT 里的TIMER2程序进行的试验,

#ifndef TIMER
#define TIMER    0    //T2作为定时器
#define T2EX_CAP 1    //T2ex捕捉引脚电平
#define T2_CAP   0    //T2捕捉引脚电平
#endif

单独测试T2EX_CAP功能,期间有一个现象令我不解,

图片.png

如果注释掉第205行程序,定时器可以运行的并且能产生中断,我不知道定时器2是根据什么标志产生的中断?


可能是T2exCaptureSetup这个函数会设置捕获模式的有效边沿,导致在实际的测试中边沿变化和默认的不同了。


只有登录才能回复,可以选择微信账号登录