Cortex-M3概览

Cortex-M3概览

Cortex-M3简介

Cortex-M3是ARM公司推出的一款32位处理器内核,广泛应用于嵌入式系统中。它具有高性能、低功耗、易于使用等特点,适用于各种应用场景,如消费电子、工业控制、汽车电子等。

主要特点

  1. 32位处理器内核
    • 内部数据路径、寄存器和存储器接口均为32位。
    • 采用哈佛结构,具有独立的指令总线和数据总线,可以并行取指和数据访问,提升性能。
  2. 统一的存储器系统
    • 指令总线和数据总线共享同一个存储器空间,可寻址空间为4GB。
    • 支持小端模式和大端模式。
  3. 可选的MPU(存储器保护单元)
    • 提供存储系统功能,用于保护存储器区域,防止非法访问。
  4. 调试支持
    • 内置多种调试组件,如指令断点、数据观察点等。
    • 支持高级调试功能,如指令跟踪和多种类型的调试接口(如JTAG、SWD等)。

架构特点

  1. 哈佛结构
    • 独立的指令总线和数据总线,允许取指和数据访问并行进行,提高性能。
    • 数据访问不再占用指令总线,从而提升性能。
  2. 多总线接口
    • 内部含有多条总线接口,每条总线接口都为特定应用场合优化,可以并行工作。
  3. 统一的存储器系统
    • 指令总线和数据总线共享同一个存储器空间,可寻址空间为4GB。
    • 支持小端模式和大端模式。
  4. 可选的MPU
    • 提供存储系统功能,用于保护存储器区域,防止非法访问。
    • 在需要的情况下,可以使用外部的cache。
  5. 调试支持
    • 内置多种调试组件,如指令断点、数据观察点等。
    • 支持高级调试功能,如指令跟踪和多种类型的调试接口(如JTAG、SWD等)。

在这里插入图片描述

Cortex-M3寄存器组

Cortex-M3处理器拥有一组丰富的寄存器,用于支持高效的数据操作和系统控制。以下是Cortex-M3寄存器组的详细介绍:

通用寄存器(R0-R12)

  • R0-R12:这些寄存器是32位通用寄存器,用于数据操作。
    • R0-R7:低寄存器,大多数16位Thumb指令只能访问这些寄存器。
    • R8-R12:高寄存器,32位Thumb-2指令可以访问所有寄存器。

堆栈指针(R13)

  • R13:堆栈指针(SP),用于管理堆栈。
    • 主堆栈指针(MSP):复位后缺省使用的堆栈指针,用于操作系统内核以及异常处理例程(包括中断服务例程)。
    • 进程堆栈指针(PSP):由用户的应用程序代码使用。
    • Banked R13:Cortex-M3拥有两个堆栈指针,但同一时刻只能使用其中的一个。
    • 堆栈对齐:堆栈指针的最低两位永远是0,这意味着堆栈总是4字节对齐的。

连接寄存器(R14)

  • R14:连接寄存器(LR),用于存储子程序的返回地址。
    • 子程序调用:当调用一个子程序时,由R14存储返回地址。
    • 减少访存次数:ARM为了减少访问内存的次数,把返回地址直接存储在寄存器中,从而提高了子程序调用的效率。

程序计数寄存器(R15)

  • R15:程序计数寄存器(PC),指向当前的程序地址。
    • 修改执行流:通过修改PC的值,可以改变程序的执行流。

特殊功能寄存器

Cortex-M3内核还搭载了若干特殊功能寄存器,用于系统控制和状态管理。

  • 程序状态字寄存器组(PSRs)
    • 记录ALU标志:包括零标志(Z)、进位标志(C)、负数标志(N)、溢出标志(V)。
    • 执行状态:记录当前的执行状态。
    • 当前正服务的中断号:记录当前正在处理的中断号。
  • 中断屏蔽寄存器组(PRIMASK, FAULTMASK, BASEPRI)
    • PRIMASK:除能所有中断,但不可屏蔽中断(NMI)不受影响。
    • FAULTMASK:除能所有fault,NMI不受影响,被除能的faults会“上访”。
    • BASEPRI:除能所有优先级不高于某个具体数值的中断。
  • 控制寄存器(CONTROL)
    • 定义特权状态:决定当前的特权级别。
    • 决定使用哪一个堆栈指针:选择使用MSP还是PSP。

寄存器功能总结

寄存器功能
xPSR记录ALU标志(Z, C, N, V),执行状态,当前正服务的中断号
PRIMASK除能所有中断,NMI不受影响
FAULTMASK除能所有fault,NMI不受影响,被除能的faults会“上访”
BASEPRI除能所有优先级不高于某个具体数值的中断
CONTROL定义特权状态,决定使用哪一个堆栈指针

操作模式和特权级别

Cortex-M3处理器支持两种操作模式和两级特权操作,以提供灵活的系统控制和安全性。

操作模式

Cortex-M3处理器支持两种操作模式:

  • 处理者模式(Handler Mode)
    • 用于执行异常服务例程(包括中断服务例程)。
    • 异常服务例程必须在特权级下执行。
  • 线程模式(Thread Mode)
    • 用于执行主应用程序代码。
    • 线程模式下既可以使用特权级,也可以使用用户级。

特权级别

Cortex-M3处理器支持两级特权操作:

  • 特权级(Privileged)
    • 具有完全的系统访问权限,可以访问所有范围的存储器,并执行所有指令。
    • 在特权级下,程序可以为所欲为,但也可能会切换到用户级。
  • 用户级(User)
    • 具有有限的系统访问权限,不能访问某些资源。
    • 用户级的程序不能直接修改CONTROL寄存器以回到特权级,必须通过系统调用(SVC)触发异常,由异常服务例程批准后才能重新进入特权级。

操作模式和特权级别的转换

  • 复位后
    • 处理器默认进入线程模式,特权级访问。
  • 从用户级到特权级的转换
    • 唯一途径是通过异常。当触发异常时,处理器总是先切换到特权级,并在异常服务例程执行完毕后返回先前的状态。
  • 合法的操作模式转换
    • 线程模式(特权级) ↔ 处理者模式(特权级)
    • 线程模式(用户级) ↔ 处理者模式(特权级)

特权机制的作用

  • 提高系统可靠性
    • 通过特权级和用户级的划分,限制不受信任或未调试好的程序访问关键资源,防止系统受损。
  • MPU的补充
    • 如果配置了MPU(存储器保护单元),可以进一步保护关键的存储区域不被破坏,这些区域通常是操作系统的区域。
  • 操作系统内核
    • 操作系统内核通常在特权级下执行,可以访问所有未被MPU禁掉的存储器。
  • 用户程序
    • 用户程序通常在用户级下执行,防止因程序崩溃或恶意破坏导致系统受损。

在这里插入图片描述

内建的嵌套向量中断控制器(NVIC)

Cortex-M3内核搭载了一个嵌套向量中断控制器(NVIC),用于管理中断和异常。NVIC与内核紧密耦合,提供了多种功能,包括可嵌套中断支持、向量中断支持、动态优先级调整支持、中断延迟缩短和中断屏蔽。

可嵌套中断支持

  • 作用范围:覆盖所有的外部中断和绝大多数系统异常。
  • 优先级管理:每个异常都可以被赋予不同的优先级。当前优先级存储在xPSR的专用字段中。
  • 抢占机制:当一个异常发生时,硬件会自动比较该异常的优先级是否比当前的异常优先级更高。如果新异常的优先级更高,处理器会中断当前的中断服务例程(ISR),并服务新异常,实现立即抢占。

向量中断支持

  • 自动定位向量表:当开始响应一个中断时,Cortex-M3会自动定位向量表,并根据中断号从表中找出ISR的入口地址,然后跳转过去执行。
  • 减少中断延迟:无需软件分辨中断类型,减少了中断延迟时间。

动态优先级调整支持

  • 运行时调整优先级:软件可以在运行时期更改中断的优先级。
  • 避免重入风险:如果在某ISR中修改了自己所对应中断的优先级,且该中断有新的实例处于悬起状态(pending),也不会自己打断自己,从而避免了重入风险。

中断延迟大大缩短

  • 自动现场保护和恢复:Cortex-M3引入了自动的现场保护和恢复机制,缩短了中断嵌套时的ISR间延迟。
  • 咬尾中断和晚到中断:通过引入咬尾中断(Tail-Chaining)和晚到中断(Late-Arriving)等新特性,进一步缩短了中断延迟。

中断可屏蔽

  • 优先级屏蔽:可以通过设置BASEPRI寄存器,屏蔽优先级低于某个阈值的中断/异常。
  • 全体封杀:可以通过设置PRIMASK和FAULTMASK寄存器,全体封杀中断。
  • 时间关键任务:这些屏蔽机制可以让时间关键(time-critical)的任务在死线(deadline)到来前完成,而不被干扰。

存储器映射

Cortex-M3处理器支持4GB的存储空间,并将其划分为若干区域,以支持不同的功能和外设。以下是Cortex-M3存储器映射的详细介绍:

总体存储器映射

Cortex-M3支持4GB的存储空间,如图所示,被划分为若干区域。这些区域包括:

  • 代码区:用于存储程序代码和常量数据。
  • 数据区:用于存储全局变量和堆栈数据。
  • 外设区:用于访问片上外设的寄存器。
  • 系统级存储区:用于存储系统级组件,如中断控制器、MPU和调试组件。

在这里插入图片描述

存储器映射的特点

  • 预定义的映射关系:Cortex-M3预先定义了存储器映射,使得片上外设的寄存器可以简单地以访问内存的方式来访问,从而控制外设的工作。
  • C语言操作:这种预定义的映射关系使得片上外设可以使用C语言来操作,简化了编程和调试。
  • 优化访问速度:通过预定义的映射关系,可以对访问速度进行高度的优化,提高系统性能。
  • 易于集成:预定义的映射关系使得片上系统的设计更易于集成,减少了移植工作量。

总线基础设施

Cortex-M3内部拥有一个总线基础设施,专用于优化对存储器结构的使用。这个基础设施允许在不同区域之间进行“越权使用”,例如:

  • 数据存储器放在代码区:数据存储器可以放在代码区,提高访问速度。
  • 代码在外部RAM区执行:代码可以在外部RAM区中执行,但会变慢。

系统级存储区

系统级存储区位于最高地址,用于存储系统级组件,包括:

  • 中断控制器:管理中断和异常。
  • MPU(存储器保护单元):提供存储器保护功能。
  • 调试组件:支持调试和跟踪功能。

固定地址

系统级组件使用固定的地址,这在内核水平上为应用程序的移植扫清了障碍。通过固定地址,可以确保不同平台上的应用程序具有一致的访问方式,提高了系统的可移植性。

总线接口

Cortex-M3处理器内部有若干个总线接口,以支持同时取址和访内(访问内存)。这些总线接口包括:

  • 指令存储区总线(两条)
    • I-Code总线:用于取指操作,优化指令执行速度。
    • D-Code总线:用于查表等操作,优化数据访问速度。
  • 系统总线
    • 用于访问内存和外设,覆盖的区域包括SRAM、片上外设、片外RAM、片外扩展设备以及系统级存储区的部分空间。
  • 私有外设总线
    • 负责访问一部分私有外设,主要用于访问调试组件,这些组件位于系统级存储区。

存储器保护单元(MPU)

Cortex-M3内核有一个可选的存储器保护单元(MPU),用于对特权级访问和用户级访问分别施加不同的访问限制。MPU的主要功能包括:

  • 访问限制:检测到犯规(violated)时,MPU会产生一个fault异常,可以由fault异常的服务例程来分析和改正错误。
  • 内存保护:MPU按区管理内存,可以设置某些内存区域为只读,避免数据被意外更改。
  • 多任务隔离:在多任务系统中,MPU可以将不同任务的数据区隔离,提高系统的健壮性和可靠性。

指令集

Cortex-M3只使用Thumb-2指令集,这是一个突破性的进展,因为它允许32位指令和16位指令混合使用,兼顾了代码密度和处理性能。Thumb-2指令集的特点包括:

  • 统一操作模式:在单一的操作模式下处理所有指令,无需在ARM状态和Thumb状态之间切换。
  • 性能优化:32位指令提供高性能,16位指令提供高代码密度。
  • 易于使用:简化了软件开发和管理,无需再反复求证和测试何时何地切换状态。

一些有趣的指令

  • UBFX,BFI,BFC:位段提取、位段插入、位段清零,支持C位段,简化了外设寄存器操作。
  • CLZ,RBIT:计算前导零指令和位反转指令,组合使用能实现一些特技。
  • UDIV,SDIV:无符号除法和带符号除法指令。
  • SEV,WFE,WFI:发送事件、等待事件以及等待中断指令,用于实现多处理器之间的任务同步,还可以进入不同的休眠模式。
  • MSR, MRS:访问特殊功能寄存器。

中断和异常

ARMv7-M架构引入了全新的异常模型,Cortex-M3(CM3)采用了这一模型。这种异常模型与传统ARM处理器的异常模型完全不同,支持16-4-1=11种系统异常和240个外部中断输入。CM3取消了FIQ(快中断请求),引入了中断优先级管理和嵌套中断支持,这些功能由NVIC(嵌套向量中断控制器)实现。NVIC还支持11个内部异常源,用于fault管理。CM3共有256个预定义的异常类型。

表2.2 Cortex-M3异常类型

编号类型优先级简介
0N/AN/A没有异常在运行
1复位-3(最高)复位
2NMI-2不可屏蔽中断
3硬(hard) fault-1所有被除能的fault,都将“上访”成硬fault
4MemManage fault可编程存储器管理fault
5总线 fault可编程总线错误
6用法(usage) Fault可编程由于程序错误导致的异常
7-10保留N/AN/A
11SVCall可编程系统服务调用
12调试监视器可编程调试监视器
13保留N/AN/A
14PendSV可编程可悬挂请求
15SysTick可编程系统滴答定时器
16IRQ #0可编程外中断#0
17IRQ #1可编程外中断#1
255IRQ #239可编程外中断#239

CM3支持240个外中断,具体数量由芯片生产商决定。CM3还有一个NMI输入脚,用于不可屏蔽中断。

调试支持

Cortex-M3在内核水平上搭载了多种调试特性,包括程序执行控制、指令断点、数据观察点、寄存器和存储器访问、性能速写和跟踪机制。调试系统基于ARM的CoreSight架构,内核提供DAP(调试访问接口)总线接口,用于访问芯片寄存器和系统存储器。

调试端口(DP)设备

类型支持协议
SWJ-DPJTAG, 串行线调试协议
SW-DP仅串行线调试协议

调试动作可由断点、数据观察点、fault条件或外部调试请求触发。所有调试组件由DAP总线接口控制,运行中的程序也能控制这些组件。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值