您的位置: OpenADSP社区论坛 -> Blackfin专区 -> 新手上路 -> 关于RTC时钟不准的问题
本帖共有622个阅读者
发表帖子 发表投票 回复主题
关于RTC时钟不准的问题
xuanjinjin(论坛新手)
xuanjinjin
头衔:社区公民
帮派:无帮无派
帖数:57
金钱:562
积分:72
注册时间:2013/9/23
楼主信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
关于RTC时钟不准的问题
我设置了RTC时钟的分钟中断,就是每分钟中断一次进入中断服务程序,在仿真环境下,我怎么发现还没有半分钟,中断服务函数就执行一次,请问这是怎么回事?外部的时钟是32.768Khz的。代码如下
void Init_RTC(void)
{
unsigned int times;
times=*pRTC_STAT;
asm("nop;");
*pRTC_PREN = 1;
asm("nop;");
*pRTC_ISTAT = 0xffff;
asm("nop;");
*pRTC_ICTL = 0x0008;//启动每天中断和分钟中断
asm("nop;");
asm("nop;");


/********************************************************
*
* 函数名        : EX_INTERRUPT_HANDLER(RTC_interrupt)
* 函数功能      : RTC中断
* 函数输入参数  : 无
* 函数输出      : 无
* 说明          : 无
*
********************************************************/
EX_INTERRUPT_HANDLER(RTC_interrupt)
{
static uint16 sec,min=0;
// printf("\n          sec=%d  %d %x\n",*pRTC_STAT&0x1f,*pRTC_STAT,*pRTC_ISTAT);
// printf("\nyihuo===%d\n",*pRTC_ISTAT&0x8);
//char *str;
if(*pRTC_ISTAT&0x8)//秒中断
{
sec=*pRTC_STAT&0x1f;
min=(*pRTC_STAT>>6)&0x1f;
//GUI_PutHZG(20,40,str,16, 16);
min++;
GUI_Point(min,120,BLACK);
*pRTC_ISTAT=0xc;
// printf("\nmin=%d sec=%d  %d %x\n",min,sec,*pRTC_STAT,*pRTC_ISTAT);
// printf("\nRTC_ICTL==%x",*pRTC_ICTL);
}
}
/********************************************************
*
* 函数名        : Init_Interrupts
* 函数功能      : 初始化配置BF531的中断寄存器
* 函数输入参数  : 无
* 函数输出      : 无
* 说明          :该函数必须放在两个中断函数之后,否则SPORT0_Rx因为无法提前定义而不能通过
*
********************************************************/
void Init_Interrupts(void)
{
*pSIC_IAR0 = 0x1fffffff;
*pSIC_IAR1 = 0xf3fff22f;     // UART 中断定义
*pSIC_IAR2 = 0xfffFFffF;
//register_handler(ik_ivg9, SPORT0_Tx);      // SPORT0_Tx ->IVG 12
register_handler(ik_ivg8, RTC_interrupt);
register_handler(ik_ivg9, SPORT0_Rx);      // SPORT0_Rx ->IVG 12
register_handler(ik_ivg10, UART_ISR_RX); // UART ISR -> IVG 10

*pSIC_IMASK = 0x00004080;//屏蔽寄存器;使能UART_ISR_RX中断;RTC中断,其它中断仍然屏蔽
}

请指教?

我的底牌是什么
等级:论坛新手 参考IP地址:*.*.*.*
2014/3/5 20:59:28
尊贵身份标志
andy(论坛版主)
andy
头衔:社区公民
帮派:无帮无派
帖数:2287
金钱:11132
积分:2263
注册时间:2011/6/8
1信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
你单独读取时间,走秒正常吗?

这家伙很懒,什么也没有留下!
等级:论坛版主 参考IP地址:*.*.*.*
2014/3/7 8:31:16
xuanjinjin(论坛新手)
xuanjinjin
头衔:社区公民
帮派:无帮无派
帖数:57
金钱:562
积分:72
注册时间:2013/9/23
2信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
按常理来说,*pRTC_STAT的值是每秒递增一个数,而我在软件上用一个死循环一直读取开发板*pRTC_STAT的数据,发现一秒的时间*pRTC_STAT要增加30.。难道外部的晶振离着芯片太远的原因吗?外部的晶振离着大概有2cm

我的底牌是什么
等级:论坛新手 参考IP地址:*.*.*.*
2014/3/7 15:54:25
尊贵身份标志
andy(论坛版主)
andy
头衔:社区公民
帮派:无帮无派
帖数:2287
金钱:11132
积分:2263
注册时间:2011/6/8
3信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
你看看晶体之间有没有增加一个10M的电阻,BF533上如果没有电阻,可能晶体不起振,还有就是通常这个晶体都是柱状的,两个管脚离得很近,如果中间有杂质,会出现这个问题,你用个东西把两个角中间刮刮,洗干净。

这家伙很懒,什么也没有留下!
等级:论坛版主 参考IP地址:*.*.*.*
2014/3/9 10:01:56
xuanjinjin(论坛新手)
xuanjinjin
头衔:社区公民
帮派:无帮无派
帖数:57
金钱:562
积分:72
注册时间:2013/9/23
4信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
发现我加的是1M电阻,看来是加大太小了,就是电容我用的是30PF的。
谢谢andy,我这就去尝试一下


我的底牌是什么
等级:论坛新手 参考IP地址:*.*.*.*
2014/3/9 11:12:39
尊贵身份标志
andy(论坛版主)
andy
头衔:社区公民
帮派:无帮无派
帖数:2287
金钱:11132
积分:2263
注册时间:2011/6/8
5信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
电容换18p或者22pf试试。通常RTC外围只有晶振,走时不准只有晶振出了问题,BF533的RTC对晶振要求较高。

这家伙很懒,什么也没有留下!
等级:论坛版主 参考IP地址:*.*.*.*
2014/3/11 22:56:59
Powered by OpenADSP Copyright © 2010 www.Openadsp.com. All rights reserved.159143 Call, 1 Queries, Processed in 0.015625 second(s),