bank741236 发表于 2012-4-19 23:27:15

RTC中的寄存器读/写的原子性.

在手册中没有提及怎么保证读/写24位寄存器的原子性. 如果单片机是参考atmal的话,是否是有不可见的临时寄存器存放高位的寄存器值?

logicgreen 发表于 2012-4-19 23:49:53

仁兄说24bit寄存器的RTC,貌似没有。

millwood0 发表于 2012-4-19 23:56:45

the usual solution is to continue to read the rtc until two consecutive reads return the same value.

gycsy963 发表于 2012-4-20 00:08:24

没有读取24位寄存器的指令吧? 或者读的时候停止计数一下?

V1.1 P79:
$D3 RTCTOPH          RTC 定时寄存器中间字节

错了吧?

LGT 发表于 2012-4-20 00:40:41

本帖最后由 LGT 于 2012-4-20 00:41 编辑

RTC中没有实现LZ所说的shadow registers. 安全的做法如3、4楼所言:
1. 连续读2次, 相同为有效
2. 读之前关闭RTC

建议操作之前关闭系统中断使能 (CLI)

因为系统RTC的时钟为1KHz左右, 远远低于系统时钟, 所以以上两种做法都是可行的。
另外, RTC的时钟精度并不高, 不建议用于精确定时。

to 楼上, 请参考V1.2, 已经修正。

uc_c++ 发表于 2012-4-20 07:20:59

RTC 1K HZ,正好把寄存器的值作为时钟节拍。
不过就是24位有点难操作,换成32位更好。

millwood0 发表于 2012-4-20 08:08:10

不过就是24位有点难操作,换成32位更好。

agreed. with 32-bit rtc registers, you can use the standard timing functions in time.h, making the code infinitely more portable.

bank741236 发表于 2012-4-20 09:25:25

logicgreen 发表于 2012-4-19 23:49 static/image/common/back.gif
仁兄说24bit寄存器的RTC,貌似没有。

没有吗?我看到编程手册上有描述. v1.2版的 81页.

logicgreen 发表于 2012-4-20 10:26:49

bank741236 发表于 2012-4-20 09:25 static/image/common/back.gif
没有吗?我看到编程手册上有描述. v1.2版的 81页.

可用于定时唤醒功能,不过精度有待测试。

bank741236 发表于 2012-4-20 10:27:08

另外文档中有些内容貌似前后矛盾. 引脚说明中PB3-0,PC3-0,PD5-0, 但是在封装图上却看到 PC6(5) PD6(16) PD7(15)
还有个问题,当作为通用输出时,引脚最大输出电流有多大?

CC: LGT
没有shadow register?那么读取T1值就必须暂停然后才读取或者设置了,而且这个是唯一的可靠方法了,因为在Fsys/1的情况下,读2次比较相同行不通. 我的理解对吗?

uc_c++ 发表于 2012-4-20 10:32:53

bank741236 发表于 2012-4-20 10:27 static/image/common/back.gif
另外文档中有些内容貌似前后矛盾. 引脚说明中PB3-0,PC3-0,PD5-0, 但是在封装图上却看到 PC6(5) PD6(16) PD7 ...

读两次相同 行得通。

关闭中断,读两次,两次相同,就为 寄存器的值。
如果两次的值不同,再度一次,就为 寄存器的值。

LGT 发表于 2012-4-20 10:43:40

1. 多谢提醒, 引脚说明部分是有遗漏, 请以封装图为准。 我们将在下一版本中改正。
    在手册V1.2的19页, PMCR寄存器描述中, 参考CFDS控制位的介绍。

2. 可以连续读两次,比较高位(高16位)相同即有效。 即使在Fsys/1的情况下, 也是可以的。 不用关闭RTC

3. 此RTC设计的目的是用于Power/off之后的定时唤醒, 不建议将RTC时钟用于系统工作。

bank741236 发表于 2012-4-20 11:44:10

LGT 发表于 2012-4-20 10:43 static/image/common/back.gif
1. 多谢提醒, 引脚说明部分是有遗漏, 请以封装图为准。 我们将在下一版本中改正。
    在手册V1.2的19页 ...

我看到了谢谢,最大输出是25mA.

关于第二点,你应该指的是不用关TIMER1吗?

另外精调内部时钟,有什么方案可以在量产时快速调整时钟?

LGT 发表于 2012-4-20 12:56:24

恩, 是指的不用关闭Timer1/0

我们量产的芯片都是经过校准的, 用户不需要自己校准。
用户通过读取OSCCAL ($66), 可以得到这个出厂的校准值。

bank741236 发表于 2012-4-20 17:31:49

通用输出脚能并联起来输出以增加驱动能力吗?
页: [1]
查看完整版本: RTC中的寄存器读/写的原子性.