44b0x 开发板上的RTC调试经验
日期:2007年5月2日 作者: 查看:[大字体 中字体 小字体]-
当你在调试一块板子时,如果那个家伙对你的努力无动于衷时,你会怎么样。
说实在的,我会经常认为应该把这家伙好好安葬了,不该再在这家伙身上浪费时间了。心里这么想着,行动上却不这么做,因为这些家伙可都是用钱买来的,其能说下葬就下葬。
从昨天下午到今天早上3点多,我花了将近12个小时才把这个板子上的RTC程序调试完成,现在想把我的调试经验
跟大家谈一谈,希望对那些刚起步的人有点帮助。但请那些高手们不要笑我这么长时间才调一个RTC。
我在这里简单地介绍一下44b0x内部集成的RTC的功能:
1、支持闰年;
2、解决了2000;
3、独立的供电功能;
4、支持毫秒滴答(TICK)时间中断作为RTOS核的时间滴答;
5、报警功能。
6、循环复位功能。
当然对于我们现在的人来说,最关心的是其中的第4点和第5点(第一点也当然非常重要,但关于我们如何去调试,
与这个功能有或没有却没什么关系), 下面结合我的调试过程,来说明下RTC的调试要点。
第一步是要将我们的时间写入对应的BCD时间寄存器里,在写BCD寄存器之前我们要先写RTC控制寄存器
RTCCON因为RTCCON寄存器包含着RTC读写允许位
RTCCON 0x01D70040(little endian)
0x01D70043(Big endian) R/W(字节) RTC control Register 初始值0x0
位名称 BIT 描述
CLKRST [3] RTC 时钟计数复位
0 = No reset, 1 = Reset
CNTSEL [2] BCD计数复位
0 = Merge BCD counters
1 = 保留(Separate BCD counters)
CLKSEL [1] BCD 时钟选择
0 = XTAL 1/2 15 divided clock
1 = Reserved (XTAL clock only for test)
RTCEN [0] RTC读写允许
0 = Disable, 1 = Enable
这里应该注意的是,在对CLKRST写入1复位之后,应该马上将CLKRST写回0,因为该位是1时RTC的时钟计数器会一直复位,时间就会停在
你写入复位信号的那个时刻,刚开始时,我就是没有注意这一点,我还认为是我的RTC有问题,时间怎么就是启动不了。
还有一点就是在读写RTC完成后如果有一段时间不去读时,应该及时将读写允许位禁止掉。如果RTC 读写允许, STOP电
流将大大增大, 为了减少STOP 电流, 当不存取RTC时,设置该位为0,虽然为0,但RTC时钟仍运行.
第二步是初始化日历时间。
第三步,如果你要RTC滴答功能,你就得对TICNT寄存器进行初始化:
TICNT 0x01D7008C(little endian)
0x01D7008F(Big endian) R/W(字节) 时间滴答计数寄存器初始值0x00
位名称 BIT 描述
TICK INT ENABLE [7] 时间滴答中断允许
0 = disable 1 = enable
TICK TIME COUNT [6:0] 时间滴答计数值. (1-127)
这个计数值内部递减, 用户不能读它的实时值
要用这个功能,首先你要搞明白中断服务程序的写法,我在使用这个中断时,就是因为中断初始化搞错,还花了很长一段时间在观察TICK 计数器
因为通过存储区bank1的特殊功能寄存器区,只能看见可读的寄存器值,我还以为是我的RTC出了问题,结果浪费了许多时间。
这里的TICK中断的间隔时间=(n+1)/128,单位秒,其中n=TICK TIME COUNT ,也就是寄存器TICNT的低6位。
第四步,如果使用你要时钟报警功能的话,你还要对报警时间寄存器和报警控制寄存器进行初始化。
RTCALM 0x01D70050(little endian)
0x01D70053(Big endian) R/W(字节) RTC 报警控制寄存器初始值0x0
位名称 BIT 描述
Reserved [7]
ALMEN [6] Alarm全局允许
0 = Disable, 1 = Enable
YEAREN [5] 年alarm允许
0 = Disable, 1 = Enable
MONREN [4] 月alarm允许
0 = Disable, 1 = Enable
DAYEN [3] 天alarm允许
0 = Disable, 1 = Enable
HOUREN [2] 小时alarm允许
0 = Disable, 1 = Enable
MINEN [1] 分alarm允许
0 = Disable, 1 = Enable
SECEN [0] 秒alarm允许
0 = Disable, 1 = Enable
这里的报警允许是这样定义的:
首先要ALMEN=1才能产生报警。
再就是只有当BCD时间寄存器的时间和相应alarm允许位对应ALM时间寄存器的时间一样时才会产生报警
就是说:
如果你想要报警每分钟一次,那就令ALMEN=1,MINEN=1,SECEM=1,其他位都为0;
如果你想要报警每小时一次,那就令ALMEN=1,HOUREN=1,MINEN=1,SECEM=1, 其他位为0;
如果你想要每天一次,那就令ALMEN=1,DAYEN=1,HOUREN=1,MINEN=1,SECEM=1,其他位为0;
。。。。。。
注意不可能在YEAREN=1的情况下实现每个月或更频繁的报警,也不可能在MONREN=1的情况下实现每天或
更频繁的报警。。。 - [1] [2] 下一页
-
- 44b0x 开发板上的RTC调试经验 相关文章:
- ·44b0x 开发板上的RTC调试经验
- 44b0x 开发板上的RTC调试经验 相关软件
- 特别声明:本站除部分特别声明禁止转载的专稿外的其他文章可以自由转载,但请务必注明出处和原始作
- 者.文章版权归文章原始作者所有.对于被本站转载文章的个人和网站,我们表示深深的谢意。如果本站转
- 载的文章有版权问题请联系编辑人员,我们尽快予以更正. 转载请注明来源:http://www.hackhome.com
下一篇:ghost for unix
精品推荐
热点TOP10
- ·图象处理中的边缘检测------canny算子
- ·EZ-USB 68013A开发指南
- ·数值计算程序大放送-特征值和特征向量
- ·ARM的嵌入式Linux移植体验之BootLoader
- ·Visual C++ ADO数据库编程入门
- ·智能手机Smartphone开发导语
- ·利用 wordXP 实现自动排班
- ·[分形]DLA团簇模型的摸拟
- ·DENX U-Boot及Linux使用手册
- ·Static和Final修饰类属性变量及初始化
- ·BPEL的异常管理
- ·看Vue 5 Esprit函数的节点与链接详情
- ·初学者全面接触学习jquery(译文)
- ·LinQ学习之旅 从整型数组中找出偶数
- ·Enterprise Library 快速入门
- ·CVS源代码库服务器建立和权限配置
- ·Visual FoxPro 9.0 SP2正式版下载
- ·VS2005控件的问题解决办法
- ·Cookie是什么?用法是怎样?与SESSION有什么区别?
- ·J2SE API读取Properties文件的六种方法
