0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

armv7 generic timer使用笔记

冬至子 来源:小鳄鱼 作者:小鳄鱼 2023-09-27 15:10 次阅读

generic timer介绍

armv7-A架构中每个CPU核心都包含自己的私有定时器,所有cpu的定时器共享一个System counter, System counter负责产生计数,传递到每个核心的私有定时器,架构如下图所示:

1.jpg

该定时器可以产生中断,作为系统心跳使用,类似于cortex-M的systick,详细的中断号在DDI0471B_gic400_r0p1_trm.pdf中有说明,下面PPI中断号的截图说明:

1.jpg

gtimer寄存器介绍

armv7-A架构中generic timer寄存器如下图所示:

1.jpg

在ARMv7-A中定义了不同的特权级别,分别是PL0, PL1, PL2,PL0是普通用户模式,在PL1、PL2模式下分别有对应的定时器。

下面介绍PL1模式下的定时器,也就是svc、FIQ模式下的定时器,rt-thread的宏内核版本运行在svc模式下,所以我们着重研究PL1物理定时器的使用。

关键寄存器说明

CNTFRQ寄存器是定时器频率值,这个需要根据实际的硬件情况设置,在全志平台上是24M,这个必须设置, 操作寄存器的内联汇编代码:

asm volatile("MCR p15, 0 , %0, c14, c0, 0" : : "r" (Rt) : "memory" )

CNTPCT是物理计数器寄存器,这个寄存器是64位的,寄存器值会一直累加,根据CNTFRQ寄存器中的频率进行累加,所以这个值可以作为时间tick来使用,在一些需要简短的延时场景可以借助这个计数器。获取计数器值的代码:

uint64_t get_arch_counter(void)
{
uint32_t low=0, high = 0;
asm volatile("mrrc p15, 0, %0, %1, c14"

: "=r" (low), "=r" (high)
: "memory");
return (((uint64_t)high)<<32
}

CNTP_TVAL寄存器, 这个寄存器一般在开启gtimer的中断时使用。

写入CNTP_TVAL寄存器时,硬件会自动把该值加上System Counter的值,一并写入CNTP_CVAL寄存器中,作为下一次中断的时基。内联汇编伪代码如下:

asm volatile("MCR p15, 0 , %0, c14, c2, 0" : : "r" (Rt) : "memory" )

特别说明

CNTP_CVAL = CNTP_TVAL + System Counter。

CNTP_CVAL寄存器,该寄存器是比较寄存器,当System Counter的值大于等于CNTP_CVAL的值时产生中断,如果需要改写此寄存器的值可以,通过写入CNTP_TVAL来实现,避免读改写寄存器的繁琐操作。

CNTP_CTL是PL1物理定时器的控制寄存器, 操作的内联汇编代码如下:

asm volatile("MCR p15, 0 , %0, c14, c2,

CNTP_CTL寄存器控制位说明:

1.jpg

其中bit0负责使能定时器,bit1是否打开中断信号

PL1物理定时器的中断号,在全志平台是29,其他CPU平台待验证。

详细gtimer操作代码可以参考rt-thread源码目录中libcpu->cortex-a中的gtimer.c文件。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 计数器
    +关注

    关注

    32

    文章

    2123

    浏览量

    92985
  • ARM处理器
    +关注

    关注

    6

    文章

    346

    浏览量

    41323
  • 定时器
    +关注

    关注

    23

    文章

    3147

    浏览量

    112040
  • 控制寄存器
    +关注

    关注

    0

    文章

    34

    浏览量

    11432
  • RT-Thread
    +关注

    关注

    31

    文章

    1149

    浏览量

    38892
收藏 人收藏

    评论

    相关推荐

    arm7 armv7 cortexm3它们是什么关系请问?

    arm7 armv7 cortexm3它们是什么关系请问?
    发表于 11-15 21:21

    Armv8-M应用笔记上使用TrustZone

    本应用笔记介绍CMSIS和MDK中可用的功能,以利用ARMv8-M体系结构中的安全域和非安全域。它包含几个编程示例,其中包括一个RTOS应用程序,该应用程序显示了非安全线程执行与ARMv8-M系统安全域提供的库之间的交互。
    发表于 05-11 13:26

    基于ARMv7架构的Cortex系列

    基于ARMv7架构的Cortex系列由ARM公司在2006年推出,Cortex系列的推出满足人们对性能日渐复杂的设计要求,根据不同需求,Cortex系列共三个不同的子系列...
    发表于 08-09 06:37

    ARMv7系列芯片算法的NEON优化耗时异常的原因是什么

    目前正在做ARMv7 系列芯片算法的NEON优化,发现一个耗时异常的地方,现象描述如下:首先主循环里会处理三类数据,三类数据分开存放在DDR上,每次循环分别处理三类数据的8个uchar数据,存储数据
    发表于 08-16 15:22

    Cortex-A53使用AArch32 Kernel,可以直接使用ARMv7的所支持的CPU吗?

    CA53 run 32bit linux kernel, 发现arch/arm/kernel/perf_event_v7.c 只支持ARMv7 的 ca17, ca15, ca12, ca9
    发表于 08-29 14:11

    请问怎么理解ARMv7的Secure和Non-secure状态

    我在看ARMv7异常部分,看到Vector tables发现和以前不一样了,有Secure和Non-secure状态(还有Hyp和Monitor),请问怎么理解这两种状态?读那个寄存器可以知道当前ARM处于哪种状态?
    发表于 09-01 15:46

    如何在arm32 arch和armv7中打印堆栈框架的框架指针地址呢

    我正在尝试在arm32 arch和armv7中打印堆栈框架的框架指针的地址。为了找到先前的堆栈帧地址,我正在arch_prev_frame()中执行(frame-12),并在
    发表于 09-05 16:01

    Armv7Armv8系统中跟踪的高级视图详解

    本指南主要介绍Armv7系统和Armv8系统中跟踪的高级视图,最高可达Armv8.4版本。 该指南涵盖: •跟踪是什么以及如何使用 •跟踪体系结构是如何定义的,以及它如何映射到不同的跟踪组件实现 •在Arm系统中可以看到哪些跟踪
    发表于 08-02 06:11

    ARM体系结构参考手册ARMv7-A和ARMv7-R版本

    本手册介绍ARM®架构v7ARMv7的A和R配置文件。 其中包括以下内容的描述: ·处理器指令集: -原始ARM®指令集-高代码密度Thumb®指令集-ThumbEE指令集,包括对实时(JIT)或
    发表于 08-12 07:46

    在基于ARMv7的平台1.0版上使用CSAT进行低级调试

    此教程提供了使用 CoreSight Access 工具在基于 Armv7 的平台上执行某些基本调试操作的信息。 此教程侧重于使用与 DS-5 一起运输的核心Sight Access 工具在
    发表于 08-28 06:50

    如何将软件应用程序从ARMv5迁移到ARMv7-A/R

    5。 本应用笔记还假设您具有ARMv5的软件开发经验。 假设主目标平台是围绕ARMv7-A处理器构建的。 由于ARMv7-A和ARMv7-R
    发表于 08-29 06:51

    ARMv7的Cortex系列微处理器技术特点

    ARMv7的Cortex系列微处理器 随着嵌入式技术应用领域的不断扩展,对嵌入式系统的要求越来越高,而作为嵌入式系统核心的微处理器也面临日益严竣的挑
    发表于 10-17 09:17 2933次阅读
    <b class='flag-5'>ARMv7</b>的Cortex系列微处理器技术特点

    ARMv7ARMv7的体系结构参考手册免费下载

    ARM® Architecture Reference Manual ARMv7-A and ARMv7-R edition
    发表于 09-28 08:00 25次下载
    <b class='flag-5'>ARMv7</b>和<b class='flag-5'>ARMv7</b>的体系结构参考手册免费下载

    HK32MCU应用笔记(十六)| HK32F103xC/D/E-Timer的应用及注意事项

    HK32MCU应用笔记(十六)| HK32F103xC/D/E-Timer的应用及注意事项
    的头像 发表于 09-18 10:58 482次阅读

    ARMv7安全引导的过程

    对于安全引导功能的实现和验证过程各家芯片公司的方案都不一样,这是由该芯片的启动流程以及启动所需镜像文件来决定的,但都会遵循链式验签启动的原则。 ARMv7架构并没有使用ATF,系统的启动流程与以前
    的头像 发表于 11-07 15:25 332次阅读
    <b class='flag-5'>ARMv7</b>安全引导的过程