找回密码
 立即注册

QQ登录

只需一步,快速开始

打印 上一主题 下一主题
开启左侧

[NUC] 请教一个关于RTC中断的问题

[复制链接]
跳转到指定楼层
楼主
lussby 发表于 2014-2-24 11:16:57 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 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, 下载次数: 472)

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

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

Test.rar

1.7 MB, 下载次数: 2307

供应商给的库程序

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 顶1 踩
回复

使用道具 举报

沙发
 楼主| lussby 发表于 2014-2-25 11:21:11 | 只看该作者
本帖最后由 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, 下载次数: 461)

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

我设置时钟1S中断一次打印OK!时钟显示和打印结果正确
回复 支持 反对

使用道具 举报

板凳
rejoice818 发表于 2014-2-28 14:36:09 | 只看该作者
DS1302驱动过,貌似没用中断~
http://smartmcu.com/
http://smartmcu.taobao.com/
回复 支持 反对

使用道具 举报

地板
 楼主| lussby 发表于 2014-3-18 15:05:55 | 只看该作者
rejoice818 发表于 2014-2-28 14:36
DS1302驱动过,貌似没用中断~

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

使用道具 举报

高级模式
B Color Image Link Quote Code Smilies |上传

本版积分规则

新唐MCU