cortex-M4中的时钟指令使用哪个时钟源

Ken*_*Lin 2 arm stm32 cortex-m

在此处输入图片说明

在我的 Cortex-M4 中,我使用 8Mhz 振荡器作为 HSE,然后使用 PLL 将其倍增至 72Mhz,然后驱动 SYSCLK。这让我想到,哪个时钟是用来执行指令的?换句话说,如果我们的 CPI 为 1(当然是理想值),那是否意味着我们将每秒执行 800 万条指令或 7200 万条指令?

我还发现这个DWT可用于测量时钟周期,从而测量 CPI。所以我猜测用于执行指令的哪个时钟与 DWT 使用的时钟相同?

P__*_*J__ 5

它由 HCLK 驱动(不是为系统定时器计时的 SYSCLK,它不必等于 HCLK)。HCLK 的源由程序员设置。

如果我们的 CPI 为 1(当然是理想值),那是否意味着我们将每秒执行 800 万条指令或每秒 7200 万条指令?

你可以看到每条指令需要多少个周期:http : //infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.ddi0439b/CHDDIGAC.html

实际速度取决于许多因素,但主要取决于您的代码和数据所在的位置以及高级 uC 功能。

如果您从内部 TCM SRAM 执行代码并将数据放置在 SRAM 中(或者甚至在 TCI 和 TCD SRAM 中的某些 uC 上更好),您可以存档理论执行效率,因为这些存储器以核心时钟频率工作,没有等待状态或总线等待状态。理想情况下,如果 uC 具有 TC 内存并且使用单独的总线获取指令和数据。

如果您的代码驻留在闪存中 - 此内存可能会引入一些等待状态。STM uC(ART 加速器)以较大的块读取闪存并获取前面的指令。它允许这些 uC 几乎以最大速度运行。问题是分支指令需要刷新流水线并再次提取指令。