牛卧堂MCU技术交流

标题: 请教一个关于RTC中断的问题 [打印本页]

作者: lussby    时间: 2014-2-24 11:16
标题: 请教一个关于RTC中断的问题
本帖最后由 lussby 于 2014-2-24 11:20 编辑

是这样的,我的硬件是外部接了12M晶振,以及RTC时钟的两个引脚接了32.768K的晶振,用官网的RTC例程测试,时钟和中断都可以。我用了我们之前新唐供应商给的库程序,时钟显示跟实际时间比较,显示正确。但是要进入RTC中断(中断函数里面用了点亮一个灯和串口打印字符"OK"没反应)进入不了。在这求大神指点一下,看我是那里出错了,在此先谢谢您的帮忙了。另外说明一下下面的程序中,int32_t RTC_EnableInt()这个函数是我参考官网的例程添加进去的,RTC中断我是放在TimeProcess.c文件里面的,我上传一下我的程序,以及下载程序后的截图如下:

QQ.png (31.43 KB, 下载次数: 351)

这里显示时间正确,但是RTC函数没打印出来文件

这里显示时间正确,但是RTC函数没打印出来文件

Test.rar

1.7 MB, 下载次数: 2136

供应商给的库程序


作者: lussby    时间: 2014-2-25 11:21
本帖最后由 lussby 于 2014-2-25 11:25 编辑

终于把问题解决了,我上面的程序参考官网例程在int32_t RTC_EnableInt()函数中的设置没有问题。但是在TimeProcess.c里面的程序因为我用的不是跟官网同一个库,虽然编译通过了,但实际上中断函数入口是有问题的,经过昨天一天的研究,最后把Drv_RTC里面的中断函数进行修改后,发现1/128s. 1/64s,1/32s,1/16s,1/8s,1s等的中断都可以了。把TimeProcess.c里面的中断函数改为
void RTC_IRQHandler(void)
{
   
        if (RTC->RIIR.TI ==0x1)                         /* tick interrupt occurred */
        {
                   RTC->RIIR.TI = 1;
                  
                  g_u32RTC_Count++;                                            /* maintain RTC tick count */

                  printf ("\nOK!\n");

          if (g_pfnRTCCallBack_Tick != NULL)                           /* execute tick callback function */
          {
              g_pfnRTCCallBack_Tick();
          }

    }

}就可以了。另外也顺便测试了闹钟中断也是可以的。

qq.png (28.88 KB, 下载次数: 347)

我设置时钟1S中断一次打印OK!时钟显示和打印结果正确

我设置时钟1S中断一次打印OK!时钟显示和打印结果正确

作者: rejoice818    时间: 2014-2-28 14:36
DS1302驱动过,貌似没用中断~
作者: lussby    时间: 2014-3-18 15:05
rejoice818 发表于 2014-2-28 14:36
DS1302驱动过,貌似没用中断~

恩恩,我必须用里面1/128s的中断来处理pwm的值。以前用的实时时钟都是用外部芯片DS1302做的。




欢迎光临 牛卧堂MCU技术交流 (http://www.nuvoton-mcu.com/) Powered by Discuz! X3.2