发新帖我要提问
12
返回列表
打印

RTC中的ALR寄存器复位时不保存,怎么回事

[复制链接]
楼主: E精灵小店
手机看帖
扫描二维码
随时随地手机跟帖
21
E精灵小店|  楼主 | 2009-2-19 18:37 | 只看该作者 回帖奖励 |倒序浏览

嗯,你们也测测,什么板子应该都可以调通。

把自己发的库发上。
还有一个是官方的库,就不用上传了。
相关链接:https://bbs.21ic.com/upfiles/img/20092/2009219183232397.rar

使用特权

评论回复
22
E精灵小店|  楼主 | 2009-2-20 00:30 | 只看该作者

我的ALR寄存器不能保存,其它均可以

使用特权

评论回复
23
香水城| | 2009-2-20 17:41 | 只看该作者

我忽略了一个问题,刚刚与同事讨论了一下,ALR寄存器不可

这是一个只写寄存器,不可读,所以你读出什么值都是有可能的。

至于ALR的内容是否在复位后还能保存,我将做一个实验,看看复位后,在安排好的闹钟时间是否能产生闹钟中断,如果可以在要求的时间产生中断,则说明ALR内容没有丢失。

使用特权

评论回复
24
E精灵小店|  楼主 | 2009-2-20 23:59 | 只看该作者

不能读?可是我程序里是直接读的寄存器,运行OK

使用特权

评论回复
25
E精灵小店|  楼主 | 2009-2-21 00:08 | 只看该作者

呵呵,要麻烦香主请自测试一下了,!

使用特权

评论回复
26
ST_ARM| | 2009-2-23 09:50 | 只看该作者

你是可以读

读的操作并不影响系统的运行,因为读该寄存器没有任何实际意义。

使用特权

评论回复
27
E精灵小店|  楼主 | 2009-2-23 10:53 | 只看该作者

我只是实现上下位机同步而已,检查设置是否有效!

使用特权

评论回复
28
香水城| | 2009-2-23 11:08 | 只看该作者

既然手册上说不可读,读该寄存器就没有意义

如果你一定要读,读出什么数据都有可能。

如果要实现上下位机同步,请使用其它方法,如保存ALR数值在后备寄存器中。或干脆在每次上电时,重新写一遍ALR。

使用特权

评论回复
29
E精灵小店|  楼主 | 2009-2-23 11:18 | 只看该作者

可以后备域实现存储。只是这样不知存储ALR是否成功!

嗯,只是觉得奇怪,不知每个芯片或系统是不是都是这样的!真要解决这个问题当然办法多啦!只是没根本解决而已,感觉不能读,设计不够合理!

使用特权

评论回复
30
lut1lut| | 2009-2-23 15:21 | 只看该作者

ALR寄存器的值,肯定是可以保存的。

试验如下:
设置prescaler产生1S的秒中断,并在中断中toggle LD7
于是,RTC的counter就每秒一次的开始往上计数;

设置alarm=5,则当counter的值等于5时,产生报警中断,并在中断中toggle LD6。

如果不做进一步处理,counter就会0,1,2,3,4,5,6,7,这样的计数下去,直到0xffffffff才产生溢出中断。于是,在秒中断里处理:如果counter计数值等于6时,就set counter为0;让counter又从0开始计数;于是再等5秒,又会触发报警中断。

reset或者电池供电的况下,给板子断电,再跑。可以从LD6和LD7的闪烁情况看出来,PRL和ALR的值都还是保持第一次设置好的值。

该测试跑在万历EK-STM32F103ZET6上。

使用特权

评论回复
31
lut1lut| | 2009-2-23 15:25 | 只看该作者

上传测试代码

请自己制定驱动的地址


相关链接:https://bbs.21ic.com/upfiles/img/20092/2009223152041840.zip

使用特权

评论回复
32
E精灵小店|  楼主 | 2009-3-17 12:33 | 只看该作者

呵呵,之前太忙!

这两天终天抽出时间将之前我所存在的问题调了一下。
总结:
  经验证,RTC闹钟ALR寄存器不能读,只可写。读出的数据会有误。如果需要读,可用备份域寄存器实现存储和读取。我上面的问题,就在于读了ALR寄存器了。只要设定了,不需读取,复位后,CPU会按最后一次设定值进行闹钟。经验证正确。
   谢谢各位!

使用特权

评论回复
33
香水城| | 2009-3-17 13:58 | 只看该作者

谢谢楼主的反馈

这说明注意看手册是多么的重要,注意看手册可以少走很多弯路。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则