WCH沁恒单片机
直播中

李晓鹏

7年用户 1302经验值
私信 关注
[问答]

请问如何对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?
谢谢!



回帖(3)

李皓圳

2022-6-6 14:23:33
您好,捕获功能采集的脉宽最好是在一个合理范围内,如果经常溢出,可以尝试将定时器分频调大,有4分频和12分频可选,同时可以调整主频来配合。
系统时钟默认来自内部12M,时钟分频和PLL倍频相同,主频是12M.
如果要获得48M的PLL时钟,倍频写2就行
举报

何洁萍

2022-6-6 14:23:42
谢谢你的回复!
我还有个问题请教一下,我用官网的CH559EVT 里的TIMER2程序进行的试验,
#ifndef TIMER
#define TIMER    0    //T2作为定时器
#define T2EX_CAP 1    //T2ex捕捉引脚电平
#define T2_CAP   0    //T2捕捉引脚电平
#endif
单独测试T2EX_CAP功能,期间有一个现象令我不解,

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

黄鸿江

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

更多回帖

发帖
×
20
完善资料,
赚取积分