基于Cortex-M3概览

发布时间 2023-07-05 20:28:03作者: 登云上人间

只需知道有哪些组件,能一句话讲出它们的功用,支持的调试方式,以及知道有哪几条总线即

一、CM3流水线

  • Cortex‐M3 的3级流水线:取指,解码和执行。简述为:取解执
    image

  • 运行指令大多是16位时,处理器每隔一个周期做一次取指。可以一次取两条指令(32位)。

  • 指令执行需要多个周期,流水线会停止。

  • 执行到跳转指令,需要清洗流水线,处理器会从跳转目的地重新取指。为了避免,CM3支持一定数量的v7M新指令,可以避免很多短程跳转,

  • 由于流水线以及Thumb代码兼容的考虑,读取PC会返回当前指令地址+4的值。这个偏移量总是4,不管是执行16位指令还是32位指令,这就保证了在Thumb和Thumb2的一致性。

  • 处理器内核的预取单元中有一个指令缓冲区,它允许后续的指令在执行前先在里面排队,也能在执行未对齐的32位指令时,避免流水线“断流”
    image

二、Cortex-M3 处理器

Cortex-M3 处理器包括内核、组件以及系统管理、调试支持。
image
MPU 和 ETM 是可选组件
image

2.1 CM3Core

  • Cortex‐M3 处理器的中央处理核心
  • 作为一个“处理器子系统”,内核本身与NVIC等一系列外设亲密耦合。

2.2 NVIC

  • 在 CM3 中内建的中断控制器,支持中断嵌套,采用了向量中断的机制
  • 在中断发生时,自动取出对应的服务例程入口地址,直接调用,无需软件判定中断源

2.3 SysTick 定时器

  • 倒计时定时器
  • 每隔一定的时间产生一个中断,系统在睡眠模式下也能工作

2.4 存储器保护单元MPU

  • 选配单元
  • 可以把存储器分成一些 regions,并分别予以保护

2.5 BusMatrix

  • CM3 内部总线系统的核心
  • AHB 互连的网络,只要两个总线主机不试图访问同一块内存区域,即可让数据在不同的总线之间并行传送。
  • 提供附加的数据传送管理设施,包括一个写缓冲以及一个按位操作的逻辑( 位带(bit‐band) )。

2.6 AHB to APB

  • 总线桥
  • 把若干个 APB 设备连接到 CM3 处理器的私有外设总线上(内部的和外部的)。
  • 允许把附加的 APB 设备挂在这条 APB 总线上,并通过 APB 接入其外部私有外设总线。

2.7 调试组件

2.7.1 SW‐DP/SWJ‐DP

  • 串行线调试端口(SW‐DP)/串口线 JTAG 调试端口(SWJ‐DP)与 AHB访问端口(AHB‐AP)协同工作,使外部调试器可以发起 AHB 上的数据传送,从而执行调试活动。
  • 在处理器核心的内部没有 JTAG 扫描链,调试功能通过在 NVIC 控制下的AHB 访问实现。S
  • WJ‐DP 支持 both 串行线协议和 JTAG 协议,而 SW‐DP 只支持串行线协议

2.7.2 AHB‐AP

  • AHB 访问端口通过少量的寄存器,提供对全部 CM3 存储器的访问机能。
  • 由 SW‐DP/SWJ‐DP 通过一个通用调试接口(DAP)来控制。
  • 当外部调试器需要执行动作的时候,就要通过 SW‐DP/SWJ‐DP 来访问 AHB‐AP,从而产生所需的 AHB 数据传送。

2.7.3 嵌入式跟踪宏单元 ETM

  • 是一个选配件
  • 实现实时指令跟踪
  • ETM 的控制寄存器映射到主地址空间上,调试器可以通过 DAP 来控制它

三、Cortex-M3 的总线接口

CM3 处理器的总线接口是基于 AHB‐Lite 和 APB 协议,它们的规格在 AMBA 规格书(第 4 版)中给出

3.1 I-Code 总线

  • 基于 AHB‐Lite 总线协议的 32 位总线,负责在 0x0000_0000 –0x1FFF_FFFF 之间的取指操作。取指以字的长度执行,即使是对于 16 位指令也如此。CPU 内核可以一次取出两条 16 位 Thumb 指令。

3.2 D-Code 总线

  • 基于 AHB‐Lite 总线协议的 32 位总线,负责在 0x0000_0000 –0x1FFF_FFFF 之间的数据访问操作。 CM3 支持非对齐访问,但你绝不会在该总线上看到任何非对齐的地址,这是因为处理器的总线接口会把非对齐的数据传送都转换成对齐的数据传送。因此,连接到 D‐Code 总线上的任何设备都只需支持 AHB‐Lite 的对齐访问,不需要支持非对齐访问。

3.3 系统总线

  • 基于 AHB‐Lite 总线协议的 32 位总线,负责在 0x2000_0000 –0xDFFF_FFFF0xE010_0000 – 0xFFFF_FFFF 之间的所有数据传送,取指和数据访问都算。和 D‐Code 总线一样,所有的数据传送都是对齐的。

3.4 外部私有外设总线

  • 基于 APB 总线协议的 32 位总线。此总线来负责 0xE004_0000 – 0xE00F_FFFF 之间的私有外设访问。但是,由于此 APB 存储空间的一部分已经被 TPIU、ETM 以及 ROM 表使用,只留下了 0xE004_2000‐E00F_F000 区间用于配接附加的(私有)外设

3.5 调试访问端口总线

  • 基于“增强型 APB 规格”的 32 位总线专用于挂接调试接口,例如 SWJ‐DP 和 SW‐DP。不要挪用此总线。

3.6 未引出的其他接口

image

四、外部私有外设总线((PPB)

  • 基于高级外设总线(APB)协议构造,用于非共享的系统设备,例如调试组件。为了支持 CoreSight 设备,该接口又包含了称为“PADDR31”的信号,给出传送的发源地。若该信号为 0,则表示是运行在 CM3内部的软件产生了传送操作;若为 1,则表示是调试硬件产生了传送操作。
  • 有了这个信号,外设就可以有选择地响应,比如:只响应调试硬件,或者再通融点:当软件发起数据传送时,限制一些功能。
  • 该总线是专用的,不服务于普通的外设,这个规矩只能靠芯片设计者自觉遵守。如果设计者把通用的外设连接到该总线上,用户在使用芯片时就往往会遇到各种莫名其妙的问题——由特权访问管理造成。例如,在用户级下访问这些设备,或者在使用 MPU 时把这些设备从其它的存储 regions 中分开
  • 外部 PPB 不支持非对齐访问。因为该总线的宽度是 32 位并且是基于 APB 的,当你在为该存储区域设计外设时,必须确保所有的寄存器地址都是按字对齐的。另外,在编写这些设备的驱动程序时,最好让所有的访问都使用字的长度。最后,PPB 访问永远是小端

五、经典连接范例(****)

image

  • 总线矩阵:代码存储区既可以由指令指令总线(I‐Code)访问(当从此区取指时),也可以被数据总线(D‐Code)访问(当在此区访问数据时),需要在中间插入一个总线开关,称为“总线矩阵”,或者使用一个 AHB 总线复用器。
  • 使用总线矩阵,则闪存和附加的 SRAM(如果有的话)可以被 I‐Code 和 D‐Code 访问。总线矩阵可以在 ARM 的 AMBA 开发包ADK(ADK,AMBA 组件和示例系统的集合,使用 VHDL/Verilog 编写)中提供。当数据访问和取指同时尝试访问同一块区域时,可以赋予数据访问更高的优先级以提高性能。

注意:这里所讲的总线矩阵不是 CM3 内部的总线矩阵,它们是两码事。CM3 内部的总线矩阵是专门设计的,不能作为一个通用的 AHB 开关来使用。

下面这句话说的是蓝色方框中的内容。

  • 通过AHB总线矩阵把取指和数据访问分开后,如果指令总线和数据总线在同一时刻访问不同的存储器设备(例如,从flash中取指的同时从附加的SRAM中访问数据),则两者可以并行不悖。但若是只使用了总线复用器,则数据传送就不能同时发生,通常的CM3单片机设计都使用系统总线来连接SRAM。而且主SRAM确实应该使用系统总线来连接,从而落到SRAM存储器的地址区,这样才能利用CM3的位带操作能力。

  • 有些脚数比较多的单片机会带外部总线接口(EMI)。这种情况下,需要一个外部存储器控制器,因为AHB不接受直接把片外存储器挂在它上面,通常外部存储器控制器也连接到系统总线上。其它的AHB设备则可以简单地连接到系统总线上,而不需要额外的总线矩阵。

  • 上图显示出的功能框,像总线矩阵、AHB‐to‐APB总线桥、存储器控制器、I/O接口、定时器以及UART等,都可以从ARM和其它IP供应商处取得。不同的CM3单片机其片上外设也不同。因此在使用时,需要参考器件厂家提供的参考手册。

六、复位信号

image
image