可悲的是,我被迫使用和模糊基于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是否真的安全?或者我应该安全地玩它并坚持我的供应商的文件(即使我不知道它从哪里得到它们)?
答案 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 - 在这种情况下将其视为M0。