【ARMv8/v9 系统寄存 3 -- system counter CNTPCT_EL0】

ARMv8/v9 system counter

所有使用Arm处理器的系统中都会包含一个标准化的通用定时器(Generic Timer)框架。这个通用定时器系统提供了一个系统计数器(System Counter)和一组定时器(Timer)。其结构类似下图:
在这里插入图片描述
系统计数器是全局唯一的,并且全局共享,对系统中的所有Arm核心进行广播。

  • ARMv8.0 到 ARMv8.5(含):位宽:至少56位宽。任何64位读取的计数器值都会被零扩展到64位。频率:以固定频率递增,该频率通常在1-50MHz范围内。它可以支持一个或多个备选操作模式,在这些模式中,计数器以较大的数额递增,频率较低,通常用于节能。
  • 从 ARMv8.6 开始 位宽:必须是64位宽,频率:以固定的1GHz频率递增,翻转时间:不少于40年。

这个系统计数器还是一直存在的,哪怕系统处于待机状态,所有内核都被关闭了,它仍然可以工作。

需要注意的是system counter必须实现于always-on power domian. 在 ARMv8.0 到 ARMv8.5期间,为了配合低功耗的工作,system counter 如果运行低频率下,那么每个时钟周期可以增长一个相对较大的值,例如:在10M的时候每个时钟周期增长步长为1,但是在低功耗模式下运行在20KHz的时候,每个时钟周期增长步长为500。

从ARMv8.6 开始system counter运在固定的1GHz, ARM 解释说 尽管它的时钟周期为1ns,但是这并不需要每过1ns counter的值就增加1,它的增长步长不能低于200。

system counter读取函数实现

global syscnt
syscnt:
    STP X29, X30, [SP, #-16]!
    MOV X29, SP
	MRS X0, CNTPCT_EL0
    LDP X29, X30, [SP], #16
	RET

最近更新

  1. 基于go 1.19的站点模板爬虫

    2024-05-02 08:50:02       0 阅读
  2. Pandas在生物信息学中的应用详解

    2024-05-02 08:50:02       0 阅读
  3. DOM XMLHttpRequest

    2024-05-02 08:50:02       1 阅读
  4. nginx详解

    2024-05-02 08:50:02       1 阅读
  5. vue实现表单输入框数字类型校验功能

    2024-05-02 08:50:02       1 阅读
  6. Perl 语言入门学习

    2024-05-02 08:50:02       1 阅读

热门阅读

  1. XML:简介

    2024-05-02 08:50:02       14 阅读
  2. 数据库(MySQL)基础:函数

    2024-05-02 08:50:02       11 阅读
  3. Acwing 35. 反转链表

    2024-05-02 08:50:02       16 阅读
  4. 深入理解C++中的仿函数(Functors)

    2024-05-02 08:50:02       11 阅读
  5. 实现通讯录(顺序表)

    2024-05-02 08:50:02       13 阅读
  6. maya可视化blendshape

    2024-05-02 08:50:02       15 阅读
  7. 使用C#与Unity实现Windows平台下的文件选择器

    2024-05-02 08:50:02       15 阅读
  8. 嵌入式一些面试题

    2024-05-02 08:50:02       10 阅读
  9. 6.k8s中的secrets资源-初识secret

    2024-05-02 08:50:02       11 阅读