徽州骆驼 · 9月26日 · 广东

Arm Cortex-R52+ Generic Timer分析

目录

1.Generic Timer初识
2.R52+的Generic Timer
3.如何配置Timer中断
4.小结

1.Generic Timer初识

Arm Cortex-R52+内部实现了Generic Timer(通用计时器),它可以基于递增计数来产生中断和事件流。

事实上,该计时器和Armv8-R AArch32中的定义完全一致,故所有细节需要查看如下文档:

  • 《_Arm__®_ _Architecture Reference Manual _Supplement Armv8, for the Armv8-R AArch32 architecture profile__》
  • 《_Arm__® _Architecture Reference Manual Armv8, for Armv8-A architecture profile__》

那么什么是通用计时器呢?

根据Arm文档描述,Generic Timer主要给Arm内核提供了基础的计时器框架,该模块包含了1个System Counter、每个PE一组Timer,整体结构如下:

image.png

一般来说,System Counter不由CPU实现,而是从Always-Powered域实现,如下图:

image.png

System Counter只是单调递增,并不能反映真实世界的时间。它将计数值通过System Timer Bus分发给每个PE的Timer中,当这个Timer配置比较值到达后,会触发相应的系统事件,发送给到GIC(Interrupt Controller),由GIC产生FIQ\IRQ给到内核进行响应。如下图所示:

image.png

2.R52+的Generic Timer

 R52+每个核都有一组计时器,分为是:

  • 一个EL1物理计时器
  • 一个EL2物理计时器
  • 一个虚拟计时器

每个计时器都有一个PPI(Private Peripheral Interrupts)提供给Core,这也是我们用这个计时器做滴答最方便快捷的原因。

计时器有三类寄存器,分别为:

  • CTL:控制寄存器,Control register
  • CVAL:比较值寄存器,Comparator value register
  • TVAL:计时器寄存器,Timer Value register 

上述三类寄存器根据不同计时器有不同的前缀,分别为:

  • CNTP:Counter-timer Physical Timer
  • CNTV:Counter-timer Virtual Timer
  • CNTHP:Counter-timer Hyp Physical Timer

所以这个表就很明确了,CNTP_CTL表示EL1等级下的物理计时器的控制寄存器,后面以此类推。

image.png

3.如何配置Timer中断

首先要配置计时器让它产生事件,然后通过配置产生中断。

配置计时器有两种方式:

  • 使用CVAL寄存器:通过写入某些值到比较寄存器,一旦System Counter大于等于该值,就会产生对应事件,如下:image.png
  • 使用TVAL寄存器:通过写入某些值到TVAL寄存器,CVAL = TVAL+System Counter,一旦大于等于,就会产生对应事件,如下:image.png

如何产生中断?

通过设置CTL寄存器, 位域如下:

image.png

  • ENABLE - 使能计时器
  • IMASK - 中断掩码. 使能或者抑制中断产生
  • ISTATUS - 计时器事件是否满足(CVAL <= System Count),需配合ENABLE =1使用

因此要产生中断就很容易了,ENABLE = 1,IMASK = 0。

那我们就只需要在GIC注册中断函数,即可实现Generic Timer的中断。

需要特别注意的是,当处理完该中断时,需要软件去清一下GIC对应中断标记,否则又会产生相同中断。

4.小结

没有总结,感觉没用的知识又增加了,哈哈哈。

作者:快乐的肌肉
来源:汽车MCU软件设计

推荐阅读:

更多汽车电子干货请关注汽车电子与软件专栏。欢迎添加极术小姐姐微信(id:aijishu20)加入技术交流群,请备注研究方向。)
推荐阅读
关注数
5690
内容数
423
汽车电子与软件行业的相关技术报道及解读。
目录
极术微信服务号
关注极术微信号
实时接收点赞提醒和评论通知
安谋科技学堂公众号
关注安谋科技学堂
实时获取安谋科技及 Arm 教学资源
安谋科技招聘公众号
关注安谋科技招聘
实时获取安谋科技中国职位信息