0

可悲的是,我被迫使用和模糊基于 ARM Cortex-M1 内核的微控制器。我刚刚发现最新的 CMSIS (5.2) 不支持它,官方 CMSIS文档这样说:

CMSIS 支持全系列的 Cortex-M 处理器(Cortex-M1 除外)和 ARMv8-M 架构,包括安全扩展。

我猜 Cortex-M1 不是很受欢迎。但是没有 CMSIS 我该怎么办?我的供应商提供的支持包很奇怪,其中包含此核心的 CMSIS 文件,即 core_cm1.h;它充满了 ARM 版权,并且似乎不是由所述供应商直接编写的。文件注释列出了 2013 年 2 月 25 日的 CMSIS V3.20 版本。但我在其他任何地方都找不到它,无论是在更高版本的 CMSIS 中还是在更低版本中。

在 Joseph Yiu 的“ARM Cortex-M0 权威指南”中,我发现了这句话:

由于执行时间差异,软件需要进行微调的可能性也很小。在撰写本文时,没有可用于 Cortex-M1 的 CMSIS 软件包。但是,您可以在 Cortex-M1 编程中使用相同的 CMSIS 文件,因为它们基于相同版本的 ARMv6-M 架构。

我比较了 CMSIS 4.0 中的 core_cm0.h 和我的供应商的 core_cm1.h,发现只有非常小的差异(比如,1 << smthn 在几个地方变成了 1u << smthn)。比我从 CMSIS 5.0.2 中区分 core_cm0.h 和来自供应商的 core_cm1.h 发现了很多差异,结构不同,NVIC 的内联函数不同等等。

所以我的问题是:即使对于最新的 CMSIS,将 core_cm0 用于 Cortex-M1 真的安全吗?还是我应该安全行事并坚持我的供应商文件(即使我不知道它从哪里得到它们)?

4

2 回答 2

1

您可以在 Cortex-M1 上使用 Cortex-M0 CMSIS-CORE 标头。您需要注意以下几点: - WFI、WFE 和 SEV 指令在 Cortex-M1 中不可用。- Cortex-M1 有一个用于 I-TCM 启用控制的辅助控制寄存器。如果需要启用 I-TCM,则需要手动声明。- CPU ID 寄存器的值不同 - 指令执行时间不同 - 中断延迟不是恒定的。

从 CMSIS-CORE 4 到 CMSIS-CORE 5 有很多代码更改。但这些更改的重点是支持附加工具、通用编码样式以及 CMSIS 的未来扩展。希望这可以帮助。

于 2018-02-01T13:47:48.207 回答
0

从软件的角度来看,Cortex-M1 与 Cortex-M0 非常相似。在 CMSIS 级别,使用 core_cm0.h(最新的 CMSIS)可以正常工作。

您可能还会发现编译器开关不支持 Cortex-M1 - 在这种情况下,将其视为 M0。

于 2018-02-07T08:35:18.420 回答