全部学习汇总:https://github.com/GreyZhang/g_arm_cores
CORTEX-M0的内核是一个32bit的RISC指令集架构。
早期的ARM设计其实是在PC领域的,但是随着ARM在比如说手机这样的电池供电的系统中越来越流行的时候,ARM也开始向MCU转换。ARM7可能是最早用于设计MCU的一个内核,自带RAM、Flash以及一些其他的外设。而Atmel AT91以及ST的STR7可能是最早一批使用ARM核做MCU设计的。
由于最初的目的是PC,ARM在设计上其实跟8051等架构有很大的区别。ARM只是一个内核而不是一个完整的MCU。
由于最初的设计目标是微处理器而不是MCU,ARM7TDMI-S不包含任何GPIO、ADC、UART等外设的设计。采用这个内核做高端MCU的半导体厂商不得不去把大量的外设集成到ARM AHB总线上去。
基于这样的条件,飞思卡尔以及ST都是借用了大量自己单片机的外设设计而atmel则是从头重新设计。ST在外设设计上,定时器是经过了重新设计的。
如果在不同厂商的ARM MCU之间做切换,基本上没有什么兼容性,甚至说外设会是完全不一样的。
M0系列只支持16bit精简指令集的一个子集,因此大小只有M3的三分之一,但是有一个完整的32bit ALU以及硬件乘法器。
M0+是M0的一个改进,支持更快的两循环分支,因为流水线从3级改成了2级。可选择单循环的GPIO以及MPU等。此外还有一个Micro Trace Buffer,MTB,这是一个我之前没接触过的概念。
ARM MCU的两大问题:1,代码的密度太低,这意味着同样的功能设计可能需要更多的存储。 2,ISR的延迟比较高,72MHz的32bit ARM甚至不如16MHz的八位机。后面这一条的确是让我吃惊了一下,没想到这部分做的这么弱。
这下子似乎又多了一个理由,为什么Arduino会依然活着而且活得这么好,毕竟在实时性上还是有优势的。