实际测试电路如附图所示,实际使用电池为镍氢充电电池,电压为3.6V。
大家问题的焦点是:LPC213x内部RTC在CPU处于掉电模式或者芯片未上电时,使用后备电池和外部晶振能否正常工作。此文不讨论如何为备用电池充电的问题,这属于外围电路设计。
//时钟初始化函数
void RTC_Ini(void)
{
//PREINT = Fpclk / 32768 - 1;// 使用内部时钟,设置基准时钟分频器
//PREFRAC = Fpclk - (Fpclk / 32768) * 32768;
YEAR = 2004;// 初化年
MONTH = 11;// 初化月
DOM = 1;// 初化日
CIIR = 0x01;// 设置秒值的增量产生一次中断
ILR= 0x03;
CCR= 0x11;// 启动RTC,使用独立时钟源
VICIntSelect = 0x00;
VICVectCntl3 = 0x20 | 13;
VICVectAddr3 = (int)RTC_Int;
VICIntEnable |= (1 << 13);
}
这个RTC初始化函数摘自一个使用LPC213x内部RTC作日历时钟的例子。
在初始化代码中,只设置了年月日寄存器,没有设置时分秒寄存器,这样在芯片上电时如果RTC正常工作的话那么其时分秒是正确的,而年月日会恢复到初始值。
实际测试结果是,设置好当前年月日、时分秒,然后拔除开发板电源后,再上电时,时钟的年月日恢复到初始值,时分秒走时正确。无论断电时间长短,测试结果相同。
也就是说,芯片掉电后内部RTC使用外部电源和晶振依然可以工作,而且芯片复位并不会影响RTC的工作。
内部RTC使用外部电源供电时需要注意:
=============选择外部晶体振荡器为RTC时钟源=============
如果要使用内部RTC,那么Vbat引脚必须有电源供电。如果不使用内部RTC,那么将该引脚接地。
|