这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » MCU » R8C2A实时时钟问题

共7条 1/1 1 跳转至

R8C2A实时时钟问题

菜鸟
2008-05-30 16:07:08     打赏

主时钟20MHz,外接副时钟接32。768KHz做实时时钟频率,在程序运行中,发现每一分钟,时间要慢2秒,请问是怎么回事?下面是RE做RTC的部分程序,请帮忙解决
#pragma interrupt INT_timer_re();
void Clock_Init (void)
{
  uCHAR detectTime=10;
  prcr=0x01;         
  cm13=1;             
  cm15=1;            
  cm05=0;            
  while(0!=detectTime)
  {
   if(ocd3) twdDelay(50);
   detectTime--;
  }
  if(ocd3)       
  {
   fra00=1;    
   twdDelay(50);
   fra1=0;     
   twdDelay(50);
     fra01=1;      
   ocd=1;      
  }
  else
      ocd=0;     
   cm16=0;   
   cm17=0;    
   cm06=0;   
   prcr=0;          
}
void Sub_Clock_Init (void)
{
  uCHAR detectTime=10;
  pd4_3 = 0;            //P4_3(XCIN), P4_4(XCOUT): Set input port
  pd4_4 = 0;            //P4_3(XCIN), P4_4(XCOUT): Set input port
  prc0=1;               //System control register protect disabled       
  cm04=1;               //XCIN-XCOUT oscillation function
  prc0=0;               //System control register protect                  
  while(0!=detectTime)
  {
   twdDelay(50);
   detectTime--;
  }   
}
void timer_re_init(void)
{
 uCHAR detectTime=10;
 tstart_trecr1 = 0;     /* Stop Timer RE operation */
    while(0!=detectTime)
    {
   if(tcstf_trecr1 == 0)    
     break;
   twdDelay(50);
   detectTime--;
    }  
 treic = 0x00;      /* Disable Timer RE Interrupt */
 
 trerst_trecr1 = 1;     /* Timer RE Register and Control Circuit Reset */
 trerst_trecr1 = 0;
  
 rcs0_trecsr = 0;     /*Set to 0 in real-time clock mode */
 rcs1_trecsr = 0;                    //Set to 0 in real-time clock mode
 rcs2_trecsr = 0;     //Set to 0 in real-time clock mode
 rcs3_trecsr = 1;     /* Set to "1" real-time clock mode */
    
 tresec = 0x00;                      //Second data, 00 second set
    tremin = 0x00;                      //Minute data, 00 minute set
    trehr = 0x00;                       //Hour data, 00 hour set
    trewk = 0x00;                       //Day of week data, Sunday set

    toena_trecr1 = 0;                   //Disable clock output
 h12_h24_trecr1 = 1;                 //Operating mode, 24-hour mode set
 
 pm_trecr1 = 0;                      //A.M./P.M. bit, a.m. set
 int_trecr1 = 1;                     //Set to 1 in real-time clock mode
 seie_trecr2 = 1;                    //Period of the second interrupt enabled
  
 treic = 0x07;      /* Timer RE interrupt enabled (level 2) */
  
 tstart_trecr1 = 1;     /* Start Timer RE operation */
 detectTime=10;
    while(0!=detectTime)
    {
   if(tcstf_trecr1)   
     break;
   twdDelay(50);
   detectTime--;
    }  
}

void hdwinit( void )
{
 _DisbleInt;
 /* Clock generator initiate */
 Clock_Init();
 /* Port initiate */
 Port_Init();
 /* INT initiate */
 INT_Init();
 /* WDT initiate */
 //WDT_Init();
 /* AD initiate */
 AD_Init();
 /* TM00 initiate */
 timer_ra_init();
 /* TM01 initiate */
 timer_rc_init();
 //real time clock initate
 Sub_Clock_Init();
 timer_re_init();
 /*IIC initate*/
 Iic_init();
 _EnableInt;   //开中断
}

void main(void)
{   
 hdwinit();
 while(1)
 {
 }
}
void INT_timer_re(void)
{
 TimeData[0] = tresec&0x7f;      //Second data backed up
 TimeData[1] = tremin&0x7f;      //Minute data backed up
 TimeData[2] = trehr&0x3f;       //Hour data backed up
 TimeData[3] = trewk&0x07;       //Week data backed up
 TimeData[4] = trecr1;           //A.M./P.M. bit backed up
}




关键词: R8C2A     实时     时钟     问题     trecr1    

菜鸟
2008-06-02 10:35:39     打赏
2楼
感觉您的副时钟初始化函数 void Sub_Clock_Init (void)里面的延时有点问题,实时时钟起振需要的时间比较长,所以建议初始化副时钟之后的延时等待时间要长些,建议应该大于1秒。

菜鸟
2008-06-04 15:57:50     打赏
3楼

把副时钟延时改2秒,还是有同样的问题.
除了延时,还有其它地方会影响吗?
请教一下,32。768KHz的晶振直接接在芯片副时钟的两脚上,会有影响吗?测了一下引脚,输出脚有32。768的频率,输入脚无波形。


菜鸟
2008-06-04 18:19:52     打赏
4楼
方便把您的工程上传吗?我有个板子可以跑一下看看

菜鸟
2008-06-05 10:28:15     打赏
5楼
R8C2A_T118.rar
剪下一部分程序请帮忙看看,

菜鸟
2008-06-05 14:42:54     打赏
6楼
我把您程序里面的副时钟初始化部分和Timer RE初始化部分在我的一块R8C/2D的板子跑了一下(手头没有2A的板子,2D和2A寄存器基本上兼容),连续记了三分钟,没有发现您说的每分钟慢两秒问题。我把程序上传了,您参考一下。有两点建议:
1. 新建一个工程,只单独测试Timer RE的功能。
2. 检测一下您所使用的石英晶振的精度。
good luck~

菜鸟
2008-06-05 14:46:36     打赏
7楼

共7条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]