如何在 ARMv8 系统中获取以微秒为单位的计时器?
How can I get timer in microsecond in ARMv8 system?
我正在用 ARMv8 RTOS 编写一部分内核代码。
我正在尝试在 Linux 中执行类似 gettimeofday() 的函数,它可以 return 以秒和微秒为单位的系统时间。
但我没有这样做。
ARMv8 支持 PL031,我认为它在 freq 下工作。 1Hz,我无法得到微秒的时间。
我不确定我是否 reading/doing PL031 有问题,在 ARMv8 中有没有什么方法可以获取微秒的系统时间?
ARMv8 有“通用定时器”用于此目的。
您可以在“ARM Architecture Reference Manual.ARMv8, for ARMv8-A architecture profile”(搜索“Generic Timer”)中找到描述。
还有程序员指南 (link)
问题是您需要用系统频率值写入 CNTFRQ_EL0
寄存器。这个'frequency'寄存器不是硬件填充的,有异常级别的限制。
但是既然你做了你的 RTOS,那应该不是问题。
通过阅读 CNTPCT_EL0
,您可以获得 'system ticks',在 'frequency' 的帮助下,可以将其转换为时间。
我正在用 ARMv8 RTOS 编写一部分内核代码。
我正在尝试在 Linux 中执行类似 gettimeofday() 的函数,它可以 return 以秒和微秒为单位的系统时间。
但我没有这样做。
ARMv8 支持 PL031,我认为它在 freq 下工作。 1Hz,我无法得到微秒的时间。
我不确定我是否 reading/doing PL031 有问题,在 ARMv8 中有没有什么方法可以获取微秒的系统时间?
ARMv8 有“通用定时器”用于此目的。
您可以在“ARM Architecture Reference Manual.ARMv8, for ARMv8-A architecture profile”(搜索“Generic Timer”)中找到描述。
还有程序员指南 (link)
问题是您需要用系统频率值写入 CNTFRQ_EL0
寄存器。这个'frequency'寄存器不是硬件填充的,有异常级别的限制。
但是既然你做了你的 RTOS,那应该不是问题。
通过阅读 CNTPCT_EL0
,您可以获得 'system ticks',在 'frequency' 的帮助下,可以将其转换为时间。