首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >QEMU中CPU的定时器供给

QEMU中CPU的定时器供给
EN

Stack Overflow用户
提问于 2019-07-02 21:23:08
回答 3查看 1.4K关注 0票数 2

我正在尝试用CPU cortex m4来模拟STM32机器的时钟控制。它是在

STM32参考手册

提供给内核的时钟由HCLK提供。

RCC向皮层系统定时器( SysTick )的外部时钟馈送AHB时钟(HCLK)除以8。SysTick既可以使用该时钟工作,也可以使用可在SysTick控制和状态寄存器中配置的Cortex时钟(HCLK)工作。

现在,QEMU已经模拟了Cortex m4,我正在使用相同的STM32模拟。我的困惑是,我应该提供" HCLK“的时钟频率,我已经为STM32开发,以发送时钟脉冲到皮质m4或皮质-m4本身管理有自己的时钟HCLK时钟频率168 My?或者时钟频率不同?

如果我必须将这个频率传递给cortex m4,我该怎么做?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-07-03 01:49:04

QEMU的仿真通常不会试图仿真以兆赫速率发送脉冲的实际时钟线(这将是令人难以置信的低效)。相反,当来宾操作系统对定时器设备进行编程时,定时器设备的模型设置一个内部QEMU定时器,使其在适当的持续时间之后触发(然后处理程序引发中断行,或者执行模拟硬件行为所需的任何操作)。持续时间是根据访客写入设备寄存器的值以及时钟频率的值计算得出的。

QEMU没有任何基础设施来处理诸如可编程时钟分频器或在SoC中路由时钟信号的“时钟树”之类的事情(可以添加一个,但还没有人使用它)。取而代之的是,定时器设备通常被写入硬编码的频率,或者可以被写入具有QOM属性,该属性允许由电路板或创建它们的SoC模型代码来设置频率。

特别是,对于Cortex-M模型中的SysTick设备,当前的实现将对其使用的QEMU计时器进行编程,其持续时间对应于以下频率:

1 1MHz,如果客户已将CLKSOURCE位设置为1(处理器时钟)

主板模型通过'system‘配置的内容

_

时钟

_

如果客户已将CLKSOURCE设置为0(外部参考时钟),则scale‘全局变量(例如mps2板的25 the )

(系统

_

时钟

_

全局缩放应设置为纳秒

_

_

秒/时钟

_

frq

_

_

赫兹。)

1 1MHz只是一个愚蠢的硬编码值,还没有人费心去改进它,因为我们还没有遇到关心它的客户代码。系统

_

时钟

_

scale global虽然笨拙,但却很管用。

所有这些都不会影响模拟的QEMU CPU的速度(即在给定的时间段内执行多少指令)。默认情况下,QEMU CPU将“尽可能快”地运行。您可以使用-icount选项来指定您希望CPU以相对于实时的特定速率运行,这在某种程度上隐含地设置了“cpu频率”,但这只是粗略地设置了一个平均值--一些指令将以一种不可预知的方式比其他指令运行得快得多。一般来说,QEMU的理念是“尽可能快地运行客户代码”,我们不会尝试任何接近周期的精确或严格定时的仿真。

2020年更新: QEMU现在有一些用于建模时钟树的API和基础设施,这在源代码树的docs/devel/clocks.rst中有记录。这基本上是上述概念的正式版本,使一台设备更容易告诉另一台设备“我的时钟频率现在是20 the”,而不需要像“系统”这样的黑客攻击。

_

时钟

_

scale“全局变量或即席QOM属性。

票数 5
EN

Stack Overflow用户

发布于 2019-07-02 22:00:53

Systick通过多路复用器提供,您可以选择AHB总线时钟或除以8系统定时器时钟

票数 1
EN

Stack Overflow用户

发布于 2021-03-02 10:22:23

一个旧的线程和一个经常被问到的问题,所以这应该会帮助你们中的一些人试图模仿皮层系统。

如果在启动时使用定时器,那么在你的.dts中,你可以在‘.dtb’块中添加一行

然后重新编译它。这确实会提高cortex处理器的速度。显然,值是一个很大的数字。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56853507

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档