实时时钟如何与计算机接口?

3
实时时钟设备如何与计算机进行接口?我正在使用内存映射IO和DMA设计自己的计算机,但我很好奇在这种情况下如何使用实时时钟而不会占用内存控制器的访问?
2个回答

4

例如,阅读 HPET PIC维基页面以及 实时时钟页面。

实际上,假设您的计算机足够快,您可以定期向计算机发送 中断

过去,以交流电电流频率(例如50Hz或60Hz)中断处理器一直非常有效。这个频率太低了,无法占用内存控制器的访问时间(因为现在大多数RAM的访问时间以数百纳秒计算,甚至非常便宜的微控制器也有至少10MHz的时钟速率。您笔记本电脑的处理器运行在GHz以上;还要阅读关于MegaHertz Myth的内容)。


2
你可以像现代的x86一样,包含一个将时间放在CPU寄存器中的CPU指令(rdtsc)。
在x86上,它实际上是自上次重启以来的“参考”周期的时间戳计数器,但它以固定的参考频率计数,无论电源节能停顿和实际CPU频率的变化如何。
因此,当计算机关闭时,您可能需要一个离线备份电池支持的RTC来保持时间,并让操作系统跟踪rdtsc的比例因子和偏移量,就像x86所做的那样,或者允许操作系统编程CPU的内部时间,使读取时钟指令直接给出纳秒级别的绝对时间(例如分成64位秒/ 64位纳秒值)。
无论如何,这提供了非常低的开销,以在用户空间获取当前时间(几十个周期,不切换到内核模式,也没有由多个核共享的I / O等资源争用)。 因此,实际的备份电池支持的RTC的访问速度很慢也没关系。
在x86上的参考频率是“额定”/贴标时钟速度,即i7-6700k的4.0 GHz,而不管其最大睿频或其他因素。 这是由于历史因素; rdtsc曾经计算核心时钟周期并直接用于性能,然后操作系统开始将其用作廉价的时间源。 但是,随后CPU供应商推出了具有节能功能的可变频率CPU,这打破了这一点,并且只有后来发明了这个参考周期的事情,并添加了非停止功能,使rdtsc时钟在CPU实际时钟停止时不会停止。
您可以通过设计它作为低开销的挂钟来规避所有这些问题,而不指望它与核心时钟速度相关联,除非这对您的设计方便(例如,让它计数时钟输入,并让操作系统和/或用户空间轻松找出该运行频率)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接