分享
 
 
 

44b0x 开发板上的RTC调试经验

王朝other·作者佚名  2006-04-03
窄屏简体版  字體: |||超大  

当你在调试一块板子时,如果那个家伙对你的努力无动于衷时,你会怎么样。

说实在的,我会经常认为应该把这家伙好好安葬了,不该再在这家伙身上浪费时间了。心里这么想着,行动上却不这么做,因为这些家伙可都是用钱买来的,其能说下葬就下葬。

从昨天下午到今天早上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的情况下实现每天或

更频繁的报警。。。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有