处理器架构寄存器与 MCU 寄存器

Posted

技术标签:

【中文标题】处理器架构寄存器与 MCU 寄存器【英文标题】:Processor Architecture Registers vs. MCU Registers 【发布时间】:2018-09-20 00:24:53 【问题描述】:

我目前正在学习微控制器和处理器,我对两者之间的一些区别有几个疑问。据我了解,MCU 包含一个实现处理器架构的处理器。例如,我正在使用 SAML22 微控制器,其处理器具有 ARM Cortex M0。所以它会有以下内容:

架构 - ARM

处理器 - ARM Cortex M0

MCU - SAML22

我从 SAML22 数据表中收集的寄存器是否与 ARM Cortex M0 相关?如果有,怎么做?

【问题讨论】:

【参考方案1】:

不,微控制器数据表描述了不属于 ARM 内核的外围设备。

SAML22 有一个 Cortex-M0+ 内核,在 ARM 文档 "Technical Reference Manual" (TRM, DDI0484) 和不太详细的 "Device Generic User Guide" (DGUG, DUI0662) 中进行了描述。

【讨论】:

【参考方案2】:

你试图把它复杂化。一个单片机有一个处理器。处理器具有处理器。您可以在 MCU 和支持 linux 的 SOC(不仅仅是 rtos 或 uclinux)上找到处理器。就像在您的割草机上安装了几马力的电机,并且在您的高尔夫球车上也有相同或相似的电机。或者喜欢用砖块砌成的学校或用相同风格/品牌的砖块砌成的房子。不要挂断电话。特别是对于您的其他问题,这与芯片中使用的处理器完全无关。

Atmel 想要制造 MCU,因此无论是创建、重复使用还是购买处理器,他们至少有一个(如果不是更多)处理器作为他们的 IP,但他们选择购买别人的 IP。现在他们想围绕它包装一些逻辑,他们可以使用一些自己的 ip 或购买一些。每个主要块都是一个新的讨论。他们是从头开始制作自己的 uart,是采用多年前创建的 uart 并重新使用它,还是购买 uart。他们是否从头开始制作 ADC,是否采用多年前制作的 ADC 并使用它,是否从某人那里购买 ADC 设计并使用它。对设计中的每个主要或次要块重复。就像本田制造汽车一样,他们将自己制造哪些零件以及他们将购买哪些零件,这与他们多年前制造的设计或卡车大小的汽车与紧凑型汽车有任何关系,他们都有四个***、一个发动机和一些座椅,在某些情况下可能共享一些组件,而另一些则完全不兼容。但同样的故事,我们做一个座位,使用我们已有的一个,买一个。我们是制作后视镜,还是使用之前设计的后视镜,还是从其他人那里购买。后视镜决定可能与座位决定无关。

注册它只是一个术语,您可以在其中写入/存储一些信息。uart 具有使其工作的寄存器。处理器通常具有使其工作的寄存器。 ADC 通常具有使其工作的寄存器。将这些块中的每一个视为可分离的。

处理器内核是一个可编程的逻辑块,因为它具有一组规则,并且其主要接口是作为主控的内存总线,它希望根据其设计找到何时获取指令来告诉它做什么,由芯片供应商将其连接到可以为其提供指令的东西。它可能有一些中断线和其他一些东西,但它的主要接口是内存总线。内部的“寄存器”是处理器内部访问的设计的一部分,通常不是内存映射的。

uart 是可编程的逻辑块,它具有某种内存/接口总线,通常是从站。它还有一些其他的芯片外信号,RX,TX,RTS,CTS,DTR...... uart内部的寄存器可以通过接口总线寻址,用于使uart运行。由芯片供应商以适合总线主控器地址空间的方式连接该总线,该总线主控器可以直接或间接地写入/读取 uart 中的寄存器以使其运行。从某种意义上说,它是可编程的,即按照规范对寄存器进行编程使其运行。

ADC 是一个逻辑块,有时发现它是可编程的,有时却不是。转换器本身通常不是。但是,当用于不仅仅是 ADConversions 的芯片时,ADC 周围还会有一个额外的逻辑 blob 以使其可编程,并且该逻辑 blob 将具有某种接口总线,它是从设备。由芯片供应商将此总线连接到总线主控器,该总线主控器以某种方式能够对 ADC 进行编程以执行某些操作。

这不仅限于基于 ARM 的微控制器。你看一下 intel x86 处理器,里面有第三方 IP,不是由英特尔发明或创建的,可能很多,但不是全部。几乎所有其他人也是如此。

基于处理器的芯片只是带有座椅、引擎和***的汽车,它们按照该设计从某个地方采购,然后使用来自内部或外部某人的更多 IP 相互连接。

对于这些芯片中的任何一个,每个 IP blob 都有文档 uart 文档、adc 文档、处理器内核文档。有时许可协议会阻止芯片供应商发布文档,您必须从他们那里以某种形式的板级支持包或 SDK 获取驱动程序,从 atmel 到 intel 到芯片供应商的例子不胜枚举齐洛格。同样,有许可协议或常见做法指导芯片供应商将记录哪些部分以及如何记录以及不记录哪些部分。因此,通常但并非总是当您将 ARM 或 MIPS 内核作为设计的一部分时。您通常应该始终使用的处理器文档来自处理器供应商,例如 ARM、MIPS 等。UART、ADC 和其他一些无论是内部还是购买的 IP 通常都在芯片供应商的文档中。芯片供应商理想地在各种 ip 的规则内创建地址空间,因此芯片供应商通常会记录每个逻辑 blob 在处理器地址空间中的位置,然后您转到该逻辑 blob 的文档以查看各个控制接口是什么做,寄存器或内存映射内存。尽管 esp 与 uart 并不总是如此,但有时您会发现这是 16550 兼容的,您必须从其他人那里找到 16550 文档并自己连接这些点。树莓派包括例如其他外围设备,他们基本上说这只是一个手臂购买的 blob 去武装这个,或者这里有一个 blob,我们不会向你展示它是如何工作的(但我们发布了它的 linux 驱动程序,如果渴望您可以从中进行逆向工程)。

现在有了基于 Atmel 的 Microchip ARM 产品,您(通常)去 arm 以获取有关处理器内核、其通用寄存器以及内核外围设备(如存在的话)的极少数内部外围设备的信息。 uart、gpio、地址空间、spi、i2c 等将包含在该部分的一个或多个 Atmel 文档中,它们涵盖了这些外围设备的寄存器规范。

至于从芯片供应商那里获取的文件数量,这些文件很大程度上是芯片供应商,并且随着时间的推移,产品系列或产品线是特定的。一些芯片供应商和一些客户喜欢将电路板设计特定的东西放在一个通常称为数据表的文档中。引脚排列、电气材料等。其他文件涵盖了 UART 寄存器规格等。一些设计使得它们重用相同的核心组件。如果您有 uart,那么这里是寄存器规格,我们所有的 uart 都是一样的。因此,所有芯片外围设备都会有一本手册,也许处理器或处理器内核本身在单独的手册中。在使用该设计解决方案的某些情况下,外设(如果存在)总是位于相同的地址,或者它们不是。我想你可以在数据表中找到电路板设计资料和地址图,但程序员的其余信息在家庭参考手册中,所以你至少需要这两个文件。

当然,有些供应商要么制作带有漏洞的不良文档作为可悲的习惯,要么有些供应商在没有 NDA 的情况下故意不提供文档,因为担心竞争对手可能会进行克隆,或者只是该公司的习惯这可以追溯到很久以前。有时,那些封闭式账簿公司做得很好,有时这会给他们带来痛苦。 Broadcom 和 allwinner 似乎还不错,allwinner 文档往往会被芯片供应商抛弃,我猜他们不会受到惩罚,但其他公司你可能会因此受到经济或其他惩罚。一切尽在法律协议中。

有一些外围设备只有一两个设计,每个人都只是购买它,尽管没有记录查看 linux/unix 驱动程序,但可以看到每个人都使用相同的 IP。

远远超出您的要求,但可以从您的问题中看出您走错了路。

通常 ARM 的东西不在芯片供应商的东西里,所以你不会在那里找到它。有时(很少)芯片供应商会全部或部分重新发布 arm 文档。最好直接从手臂上获取。在 cortex-m 的情况下,核心上的手臂外围设备位于固定/众所周知的地址。对于 cortex-a 和较旧的 arm11、arm10、arm9 ......芯片供应商在他们为该产品设计的地址空间中绑定了一个外围基地址,如果有的话,内部 arm 外围设备也基于该地址空间。因此,您可以找到两种可能来自不同供应商的具有相同内核的产品,但由于这个原因,内部的内存映射外设位于不同的地址。 (在各种臂芯的技术参考手册中)。

【讨论】:

以上是关于处理器架构寄存器与 MCU 寄存器的主要内容,如果未能解决你的问题,请参考以下文章

CPU内核与寄存器关系

CPU微架构设计分布式多端口(4写2读)寄存器堆设计

ARM架构中如何读取协处理器寄存器

ARM处理器架构理论知识

Cortex-A7 MPCore 架构详细介绍

RISC处理器设计-------处理器整体架构