CMSIS for Cortex-M1

时间:2018-01-19 15:59:50

标签: arm embedded cortex-m cmsis

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

  

CMSIS支持全系列的Cortex-M处理器(带有   除了Cortex-M1和ARMv8-M架构之外   安全扩展。

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

在Joseph Cort的“ARM Cortex-M0权威指南”中,我找到了这样的引用:

  

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

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

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

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

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

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