历史上的今天
今天是:2024年10月25日(星期五)
2021年10月25日 | ARM架构—— Cortex-M3与Cortex-M4特点概述
2021-10-25 来源:eefocus
一、处理器和微控制器差别
微控制器包含处理器,处理器只是其中一小部分,具体包含存储器、时钟生成、分配逻辑、系统总线以及外设(I/O接口单元、通信接口、定时器、ADC、DAC等等),如图1-1所示:

图 1一1微控制架构
即使处理器相同,但是不同芯片厂商根据不同的应用场景选择不同的特性模块就能设计出不同特性的微控制器。
二、Cortex-M3与Cortex-M4特点
Cortex-M3与Cortex-M4处理器均使用32位架构,寄存器组中的内部寄存器、数据通路以及总线接口都是32位。Cortex-M处理器使用的指令集架构(ISA)为Thumb ISA,基于Thumb-2技术并同时支持16位和32位指令。
异同点:
相同点:
基于ARM-v7-M架构。
三级流水线设计。
哈佛总线架构,统一的存储器空间:指令和地址总线使用相同的地址空间。
32位寻址,支持4GB 存储空间。
基于ARM AMBA(高级微控制器总线架构)技术的片上接口,支持高吞吐量的流水线总线操作。
NVIC(嵌套向量中断控制器),最多支持240个中断请求和8~256个中断优先级(理论上支持,实际需芯片厂商设计)
具有支持多种OS(操作系统)特性,例如:节拍定时器和影子栈指针等。
支持休眠模式和多种低功耗模式。
支持可选MPU(存储器保护单元),具有存储器保护特性:可编程存储器或访问权限控制等。
可通过位段特性支持两个特定存储器区域中的位数据访问。
可选择使用单个或多个处理器。
具有多种指令:
普通数据处理,包括硬件除法指令。
存储器访问指令(8位,16位,32位)
位域处理指令
乘累加(MAC)以及饱和指令
跳转,条件跳转以及函数调用指令
系统控制、支持OS指令
不同点:
Cortex-M4在DSP方面应用具有更高的性能。
Cortex-M4支持浮点运算(单精度)。
Cortex-M4支持单指令多数据(SIMD)操作。
Cortex-M4支持快速MAC和乘法指令。
Cortex-M4支持饱和运算指令。
优势:
低功耗:都低于200uA/MHz。
高性能:3 CoreMark/MHz
高能耗效率:功耗低,性能高所以具有高能耗效率。
良好的代码密度:Thumb ISA指令架构,在完成相同任务时,所需程序代码更少。
中断多数量,多优先级,实时性好:240个向量中断,8~256中断优先级,中断等待12个周期(中断嵌套由硬件自动处理)。
易于使用:具有简单、线性的存储器。
可扩展性强:低端处理器,到200MHz高端处理器。
调试特性丰富:标准调试特性(单步,暂停等),捕获程序流、数据变动以及概况信息等跟踪数据。还可以多Cortex-M处理器共享调试连接。
多种OS支持,超过30余种。
多种系统特性,例如:可位寻址存储器区域(位段特性)和MPU(存储器保护单元)。
软件可移植性、可重用性:C友好架构,CMSIS。
三、开发流程

图3-1开发流程
3.1软件编译流程
在常用的keil MDK-ARM中采用基于GNUD的gcc工具链编译程序,编译过程如图3-2所示:

图3-2编译流程
3.2软件运行模式
1.轮询
在大多数应用开发过程中,微控制器要接受多个接口的控制,需要支持处理多个任务,所以处理器等待接口数据准备好后进行处理,处理完毕后再进行下一个任务的处理。如图3-3所示:

图3-3轮询处理多个任务
轮询只适合简单的应用,当任务繁多复杂时,轮询设计维护将非常困难,且不能定义任务优先级,导致任务执行缓慢,能耗效率较差。
2.中断执行
中断执行有两种方式:
第一种外设任务放在中断服务程序中进行处理,当外设任务需要处理时,触发处理器中断,处理器执行相关任务,此方式可以设定不同中断优先级,可以进行中断嵌套快速响应高优先级中断任务。处理流程如图3-4所示:

图3-4中断服务程序处理
第二种将外设任务执行过程分为两部分,第一部分为需要快速处理的部分,第二部分不着急处理部分。当外设中断到来时在中断服务程序中处理需要快速处理的部分并设置相关标志位或状态,在轮询流程中根据标志位或状态进行相关处理。处理流程如图3-5所示:

图3-5中断轮询方式
3.多任务系统
在复杂的多任务嵌入式系统中,多任务同步等操作,以上几种方式均无法满足要求,所以此时需要嵌入实时操作系统(RTOS)将处理器时间分为多个时间片再将时间片按照优先级分配给进程,实现多个进程同时执行。RTOS中是以定时器记录时间片,根据定时器产生中断,触发任务调度器进行调度,从而进程间将会发生上下文切换。处理流程如图3-6所示:

图3-6 RTOS多任务处理
3.3 Cortex微控制器软件接口标准(CMSIS)
CMSIS目标:
提高软件重用性。
提高软件兼容性。使用统一的软件架构。
易于学习。允许使用C语言访问内核特性。
独立于工具链。负荷CMSIS设备驱动可用多种编译工具编译。
开放性。源码开源。
目前有5种CMSIS:
CMSIS-Core(访问Cortex-M处理器特性的API,便于应用程序的开发)。
CMSIS-DSP(常见DSP运算如FFT和滤波器等)。
CMSIS-RTOS(用于Cortex-M微控制器上嵌入式OS的API)。
CMSIS-DAP(调试接口适配器的参考设计,支持USB到JTAG/串行协议的转换)。
CMSIS-SVD(CMSIS系统视图描述,基于XML语言格式,用于描述微控制产品的外设集)。
CMSIS标准:
处理器外设标准化定义。
访问处理器特性标准化函数。
操作特殊指令标准化函数。
系统异常处理标准化命名。
系统初始化标准函数。
描述时钟频率标准化变量。
CMSIS层次结构:
内核外设访问层
设备外设访问层
外设访问函数层

图3-7 CMSIS-Core结构
四、技术要点
4.1指令集
ARM Cortex-M 是32位RISC(精简指令集)处理器,具有:
32位寄存器
32位内部数据通路
32位总线接口
但是还是可以高效的运行8位和16位数据,都具有三级流水线(取指,译码和执行),它们都基于哈佛总线结构,取指令和数据访问可以同时执行。
Cortex-M 处理器基于一种加载-存储结构,数据需要从存储器中加载和处理后,使用多个单独的指令写回存储器。
ARM架构一般指两个方面:
架构。指令集架构(ISA),编程模型以及调试方法。
微架构。接口信号,指令执行时序以及流水线阶段等。
ARM7TDMI等经典ARM处理器两种操作状态:
32位的ARM状态,32位指令,内核能以很高的性能执行所有指令。
16位的Thumd状态,16位指令,可以得到很好的代码密度,不具有
ARM指令的所有功能。

图4-1 ARM7TDMI等经典ARM处理器
Thumd-2技术的Cortex-M 处理器无需在16位和32位指令间切换。

图4-2 Cortex-M 处理器与ARM7TDMI等经典ARM处理器指令集比较

图4-3 Cortex-M3/4处理器框图
4.2 存储器保护单元
MPU位监控总线传输的可编程设备,须通过软件配置。MPU开启时,应用程序可以将存储器空间分为多个部分,并为每个部分定义访问权限。当违反规则时,产生错误异常。例如保护OS内核,其他特权任务使用的数据,隔离不同用户存储器,防止意外擦除SRAM,覆盖指令代码。
4.3中断处理
嵌套向量中断控制器(NVIC)特性:
最多240个中断输入,不可屏蔽中断(NMI)输入和系统异常。
中断和系统异常具有可编程优先级。
嵌套中断/异常按照优先级先后处理。
向量中断/异常,处理器自动取出无需软件确认。
向量表可重定位在存储器多个区域(默认0x0)。
低中断等待。具有零等待状态存储系统,中断等待仅为12个周期。
中断和异常可用软件触发。
具有屏蔽中断和异常功能(NMI除外),也可将屏蔽为某个优先级之下。
多个优化用于降低不同异常上下文切换时的中断处理开销。
4.4 OS支持和系统特性
三个系统特性:
具有一个内置系统节拍定时器SysTick,为OS提供周期性定时中断。
具有两个栈指针:OS内核和中断用的主栈指针(MSP)和任务用的进程栈指针(PSP),分隔用户栈和内核栈,提高可靠性同时优化栈空间。
具有特权和非特权模式,处理启动后默认在特权模式,OS使用时可以将应用任务运行在非特权模式中,防止破坏OS任务和其他数据。
史海拾趣
|
评选优秀版主真是不简单啊,整理统计数据,还要计算,可真是忙坏了。不过想到各位版主们也是为坛子尽心尽力,评选这点工作又算得了什么呢?呵呵,好了,废话不多说,获奖版主们登场喽! 优秀版主:jxb01033016 总分 :   ...… 查看全部问答> |
|
YL2440的板子,通过其EBOOT下载内核,可是总是校验和出错,如下所示: EthDown::TFTPD_OPEN::boot.bin -EbootSendBootmeAndWaitForTftp Download BIN file information: ----------------------------------------------------- [0]: Base Add ...… 查看全部问答> |
|
用如下的代码显示一个800 x 454 24bit的图片时,居然花了700ms时间(CPU主频600M)?请帮忙看看问题在哪里? case WM_PAINT: &n ...… 查看全部问答> |
|
一个应用程序 需要包含en.lib 这个lib是汇编和c编译的 举个头文件的例子:a.h #include \"mode.h\" #include \"frame.h\" #ifdef __cplusplus extern \"C\" { #endif int Str2mode(const char* str, enum Mode *mode); int M ...… 查看全部问答> |
|
3合1(STM32,STM8,STLINK)板中STM32原理图,样例程序,使用说明 补充一下STM32最小系统的原理图,样例程序和使用说明。 相关链接:https://bbs.eeworld.com.cn/upfiles/img/20095/2009511162619365.pdf… 查看全部问答> |
|
ccs里面的real-tme mode是干吗用的呢?我刚刚看到ccs3.3里面又才出现了一个rude real-time mode,是什么意思呐… 查看全部问答> |




