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

时间:2018-04-10 04:21:41

标签: assembly cpu-architecture

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

2 个答案:

答案 0 :(得分:4)

例如,阅读HPET& PIC wikipages和Real-time clock个。

在实践中,假设您的计算机足够快,您可以定期向计算机发送interrupts

过去,以AC电流(例如50Hz或60Hz)的频率中断处理器已经非常有效。该频率太低,无法阻止来自内存控制器的访问(从今天开始,大多数RAM的访问时间在几百纳秒内测量,甚至非常便宜microcontrollers今天至少有10 {3} clock rates你的笔记本电脑的处理器工作在GHz以上;另请阅读MegaHertz Myth)。

答案 1 :(得分:2)

你可以做现代x86所做的事情,并包含一个CPU指令,将时间放入CPU寄存器(rdtsc)。

在x86上,它实际上是自上次重启以来“参考”周期的时间戳计数器,但无论节能停止和实际CPU频率如何变化,它都会以固定的参考频率计数。

所以你可能想要一个片外电池支持的RTC来保持计算机关闭的时间,并让操作系统跟踪缩放因子和x rdtsc的偏移量,或者允许操作系统用于编程CPU的内部时间,因此读时钟指令直接以纳秒为单位给出绝对时间(例如,分成64位秒/ 64位纳秒值。)

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

x86上的参考频率是“额定”/贴纸时钟速度,即i7-6700k的4.0 GHz,无论其最大涡轮增压等等。这是由于历史因素; rdtsc用于计算核心时钟周期并直接用于性能,然后操作系统开始将其用作廉价时间源。但后来CPU供应商引入了省电的变频CPU,打破了这一点,后来发明了这个参考周期的东西,并添加了不间断的功能,因此当CPU的时钟实时时钟rdtsc时钟不会停止停了。

您可以首先将其设计为低开销的挂钟,而不要期望它与核心时钟速度相关,除非您方便设计。 (例如,让它计算一个时钟输入,并让操作系统和/或用户空间轻松找出运行的频率。)