我们用的是APPRO的DM8127的IPNC.经查,原TPS659113的RTC时钟为RC时钟,每24小时会有约十分钟的误差。通过查寄存器DEVCTRL_REG其值为0X34.现在UBOOT中修改这个寄存器的值,无论是在配置中,还是在UBOOT最后端切换,UBOOT都无法执行下去,程序就定在那里。初始是在电源和时钟配置完成后,直接进行切换,发现死机。后根据一些单片机切换外部时钟的常识,对该时钟切换:即先掉时钟,用rtc_freeze函数,然后切换外部时钟。EXTERNEL_RTC_SOUCE.并延时等待相当长时间后,开启RTC时钟,RTC_RUN();结果发现仍然死机。代码如下:
rtc_freeze();
externel_rtc_clock();//zjq20140901
for (i = 0; i<0xffff; i++)
{
for(j = 0; j<0xfffff; j++){
}
// printf("%c",ti814x[i][j]);
// printf("\n");
}
rtc_run();
这些代码放在UBOOT那里,就死在那里,请问如何才能从RC切换到外部晶体而死机?
另:我在UBOOT正常启动的情况下,直接修改DEVCTRL_REG为0x14后,可以切换到外部晶体,且RTC时钟24小时为秒级误差。
Eason Wang:
基于上面的试验,我觉得修改应该没有那么复杂,你试过在代码里面直接修改这一位不行吗?
jq zzz:
回复 Eason Wang:
直接用RUN_COMMAND()函数调用执行I2C WRITE 0X2D 0X3F 0X14即可。在tps659113_rtc中处任意修改函数,会导致电源都无法起来。而在UBOOT的MAIN函数里修改POWER_control函数,增加切换功能,都会死机。所以最的还是采用了直接调用命令脚本的方式。