标签:
最近客户反映我们提供的WINCE7系统的RTC时钟设置后,掉电不能保存,总是回到2000年的起始年份,
我们的工业触摸屏使用的是AM3354方案,查看了原来的WINCE7系统源码,打开文件:
C:\WINCE700\PLATFORM\AM33X_BSP\SRC\OAL\OALLIB\init.c
发现在OEMInit函数中调用的是TI自己的RTC驱动函数OAL3XX_RTCInit,这个函数在路径为:
C:\WINCE700\PLATFORM\COMMON\src\soc\COMMON_TI_V1\COMMON_TI_AMXX\OAL\OALRTC
中的:oalrtc.c文件被定义,调试发现该文件中RTC_GetTime函数读出的寄存器值一直是0,查看网上资料也有
很多人反映TI的AM3354的RTC时钟有问题,后来进一步检查了硬件,备用纽扣电池正常3.0V,32.768的晶振
没有直接接入到AM3354,而是接入到了BQ32000这款RTC芯片,BQ32000以I2C的方式与AM3354连接,从
地址为0X68,于是只能自己编写BQ32000的WINCE7驱动了,
1.创建目录和makefile,首先在目录:
C:\WINCE700\PLATFORM\COMMON\src\soc\COMMON_TI_V1\COMMON_TI_AMXX\OAL
下创建文件夹:BQ32K_OALRTC
拷贝目录:
C:\WINCE700\PLATFORM\COMMON\src\soc\COMMON_TI_V1\COMMON_TI_AMXX\OAL\OALRTC
中的makefile到BQ32K_OALRTC
2.编写sources文件,在BQ32K_OALRTC目录下创建并编写sources文件,内容如下:
!INCLUDE "..\..\sources.inc"
TARGETNAME=am33x_bq32krtc
TARGETTYPE=LIBRARY
SOURCES= oalrtc.c
3.编写源码文件,在BQ32K_OALRTC目录下编写oalrtc.c文件,完成驱动的开发
该文件需要实现函数:OALBQ32KRTCInit
4.修改文件:
C:\WINCE700\PLATFORM\COMMON\src\soc\COMMON_TI_V1\COMMON_TI_AMXX\OAL\dirs
增加目录BQ32K_OALRTC,内容如下;
DIRS=\
CPUIDLE\
OALI2C\
TIMER\
OALRTC\
BQ32K_OALRTC\
5.创建头文件,在目录:
C:\WINCE700\PLATFORM\COMMON\src\soc\COMMON_TI_V1\COMMON_TI_AMXX\INC
下创建头文件:
bq32k_rtc.h
导出函数:OALBQ32KRTCInit
6.修改上述init.c文件,注释掉语句:
OAL3XX_RTCInit(AM33X_RTCSS_REGS_PA, IRQ_RTCALARM);
新增语句:
OALBQ32KRTCInit(....);//(内容略过)
7.编辑文件:
C:\WINCE700\PLATFORM\AM33X_BSP\SRC\OAL\OALEXE\sources
注释掉以下语句:
# $(_PLATCOMMONLIB)\$(_CPUINDPATH)\am3xx_oalrtc.lib \
在下一行添加如下语句:
$(_PLATCOMMONLIB)\$(_CPUINDPATH)\am33x_bq32krtc.lib \
修改完成后,打开VS2008的SLN工程,重新编译解决方案即可。
有需要这部分源码的朋友可以+我QQ2362317758
标签:
原文地址:http://my.oschina.net/armsky/blog/490101