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



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

例如阅读HPET和PIC维基页面和实时时钟页面。

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

过去,以交流电流的频率(例如 50Hz 或 60Hz)中断处理器非常有效。该频率太低,无法占用内存控制器的访问(因为今天,大多数RAM的访问时间以数百纳秒为单位,即使是非常便宜的微控制器,今天的时钟速率也至少为10MHz。笔记本电脑的处理器在 GHz 以上运行;另请阅读有关兆赫兹神话的信息)。

您可以执行现代 x86 所做的操作,并包含一个将时间放入 CPU 寄存器(rdtsc)的 CPU 指令。

在 x86 上,它实际上是自上次重新启动以来"参考"周期的时间戳计数器,但它以固定的参考频率计数,而不管节能停止和实际 CPU 频率的变化如何。

因此,您可能希望使用片外电池备份的RTC在计算机关闭时保持时间,并且让操作系统像x86一样跟踪rdtsc的比例因子和偏移量,或者允许操作系统对CPU的内部时间进行编程,以便读取时钟指令直接以纳秒为单位提供绝对时间(例如,分成64位秒/64位纳秒值)。

无论如何,这为在用户空间中获取当前时间提供了非常低的开销(几十个周期,没有切换到内核模式,也没有争用多个内核共享的 I/O 等资源)。 因此,访问实际电池备份的RTC的速度很慢并不重要。


x86 上的参考频率是"额定"/贴纸时钟速度,即 i4.0-6700k 的 6700 GHz,无论其最大涡轮增压器或其他什么。 这是由于历史因素;rdtsc用于计算内核时钟周期并直接用于性能,然后操作系统开始将其用作廉价的时间源。 但后来 CPU 供应商推出了具有省电功能的变频 CPU,打破了这一局面,后来才发明了这种参考周期的东西,并添加了不间断功能,因此当 CPU 的时钟实际时钟停止时,rdtsc时钟不会停止。

你可以通过首先将其设计为低架空挂钟来避开所有这些,除非你方便设计,否则不要期望它与核心时钟速度相关。 (例如,让它计算时钟输入,并让操作系统和/或用户空间轻松找出运行的频率。

最新更新