这个芯片的RTCC寄存器是没有RTCVHLL和RTCVALH的,只有RTCVAL,只能通过操作在RCFGCAL的RTCPTR<1:0>位来控制。11 年
10 月和日
01 星期和小时
00 分钟和秒
而且只要对RTCVAL的高八位写值 则RTCPTR就会自减一次。
我的初始化程序是void RTCC_Init()
{
RTCCUnlock();
_RTCEN = 1;//使能RTCC模块
_PWCEN = 1; //RTCC电源控制位使能
_RTCOE = 1;//RTCC 输出使能位
// _RTCWREN = 1;//RTCVALH 和RTCVALL 寄存器可被用户写入
_PWCPOL =1 ;//电源极性控制位
_SOSCEN = 1;//使能32.768kHz晶振提供时钟源
_RTCLK = 0; //选择SOSC振荡器
_RTCOUT = 3 ; //RTCC秒时电源控制
PADCFG1 = 0x02;
}
解锁程序是void RTCCUnlock()
{
asm volatile("disi #5");
asm volatile("mov #0x55, w7");
asm volatile("mov w7, _NVMKEY");
asm volatile("mov #0xAA, w8");
asm volatile("mov w8, _NVMKEY");
asm volatile("bset _RCFGCAL, #13");
asm volatile("nop");
asm volatile("nop");
}
我测试的方法是先
_RTCPTR0 = 1;//设置时间到年
_RTCPTR1 = 1;//设置时间到年
RTCVAL = 0x0015 | RTCVAL; //年
USART_TXD_Char(RTCVAL);
RTCVAL = 0x0400 | RTCVAL; //月
USART_TXD_Char((RTCVAL<<4)>>12);
RTCVAL = 0x0024 | RTCVAL; //日
USART_TXD_Char((RTCVAL<<8)>>12);
USART_TXD_Char((RTCVAL<<12)>>12);
RTCVAL = 0x0500 | RTCVAL ;//星期
USART_TXD_Char((RTCVAL<<4)>>12);
RTCVAL = 0x0015 | RTCVAL;//小时
USART_TXD_Char((RTCVAL<<8)>>12);
USART_TXD_Char((RTCVAL<<12)>>12);
出现的问题是修改年份,不会发生变化,而且小时在串口调试中也是错误的,把上面测试得部分注释了,转用下面这段程序。年份就可以修改,为什么会出现这种情况呢,求帮助!!!感谢!!
// RTCVAL = 0;
// _RTCPTR0 = 1;//设置时间到年
// _RTCPTR1 = 1;//设置时间到年
// RTCVAL = 0x15 | RTCVAL;
// USART_TXD_Char(RTCVAL);
//
// RTCVAL = 0;
// _RTCPTR0 = 0;//设置时间到月
// _RTCPTR1 = 1;//设置时间到日
// RTCVAL = 0x0400 | RTCVAL;
// RTCVAL = 0x0024 | RTCVAL;
// USART_TXD_Char((RTCVAL<<4)>>12);
// USART_TXD_Char((RTCVAL<<8)>>12);
// USART_TXD_Char((RTCVAL<<12)>>12);
而且发现注释了
// _RTCPTR0 = 0;//设置时间到月
// _RTCPTR1 = 1;//设置时间到日
这样一部分,也是修改不了年份。
此帖出自
小平头技术问答
一周热门 更多>