原文链接:http://www.zlgmcu.com/luminary/Stellaris/ARM-Cortex-M3.pdf
首先谈谈我对这个系列先入为主的感觉。 Cortex-M3是ARM7的升级版本。 个人认为:ARM7本身并不是完全针对MCU来设计的,但是众多芯片厂家以ARM7为内核做了很多32位MCU芯片。例如Atmel和NXP的ARM7系列。Cortex-M3是真正针对MCU应用来设计的,这一点在功能取舍和性能偏向上得到反映。
那么与ARM7相比较,Cortex-M3有哪些区别和特点呢?
加速设计: 哈佛结构替代ARM7的冯.诺伊曼结构。 哈佛结构就是指令和数据总线分开。 这样取指令和取数据可以同时进行。 很适合将指令放在片内FLASH,将数据放在片内SRAM的MCU结构。 在ARM7的3级流水线之上增加了分支预测。 减少了程序跳转时流水线被打断的时间消耗。 ALU支持硬件乘法和硬件除法。数学计算能力增强。 单周期32位乘法。 Bit-Band技术: 简单地说,就是增强了位操作性能。 SRAM中有专门的Bit-Band区域,可以按位进行寻址(使用别名地址)。 而且,这样的位操作是原子操作。这在实现互斥功能时有用。 一些DSP运算专用的位操作指令,比如bit翻转。
节省存储器使用量的技术: 位寻址是可以节省bool型变量的存储器使用的。 ARM7的short变量要16位对齐、int变量要32位对齐。Cortex-M3不用对齐。 这个问题,一般看法是,对齐可以简化设计。 个人认为这个好处有限。 指令集的优化。现在叫Thumb-2了。 ARM7有两种指令集:ARM和Thumb,两种指令模式可以切换。个人感觉比较怪。
处理器模式的简化: 我们知道ARM7有很多种处理器模式,目的主要应该是支持复杂的操作系统。 Cortex-M3的处理器模式现在有两个:Thread模式和handler模式。 Thread模式相当于用户模式了,有两种访问方式:有特权方式和无特权方式。
结构区别: ARM7是个纯内核,中断控制器和存储器接口是芯片厂家扩展的。 Cortex-M3包含了中断控制器(NVIC)和存储器接口单元。当然,在结构上仍然可以看作核心和外围两个部分。
最最重要的改变:中断处理 ARM7只有两个中断请求信号:IRQ和FIQ。 对多个外部中断请求的支持是通过不属于ARM7的外部的中断控制器实现的。 不直接支持基于优先级的中断抢占。 Cortex-M3的中断控制器叫NVIC,是Cortex-M3的一个完整的部分。 可以支持一个NMI和32个物理中断。可抢占,有优先级。 中断向量表可重定位。 中断处理时的寄存器保护采用基于堆栈的方式,在响应中断和退出中断时,硬件自动对寄存器进行压栈和出栈。 在连续处理两个中断时,通过末尾连锁(tail_chaining)技术,减少压栈和出栈的操作。 所以,中断响应的延时显著减少了。这个对控制系统来说很重要。 当然,增加复杂性容易出BUG。有待观察。
存储器保护单元MPU: 可支持操作系统对进程空间的保护。 个人对此持保留态度。 关于操作系统: 个人认为,linux和wince在这个处理器上是无法运行的。这是它的产品定位。 其它喜欢在扁平(flat)内存模式下运行的RTOS,要看怎么移植了。未必能充分使用Cortex-M3的特性。
总线接口: 有说法它目前不支持外部存储器接口。这个好象有点严重。待确认。
有了新架构的处理器,就看开发环境、调试工具、操作系统对它的支持了。
最后,俺才疏学浅,又喜欢望文生义。有错误大家指出或一笑吧,谢谢。 |