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

Processor Architecture Registers vs. MCU Registers

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

架构 - ARM

处理器 - ARM Cortex M0

单片机-SAML22

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

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

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

注册它只是一个术语,你 write/store 一些信息。一个 uart 有寄存器来让它工作。处理器通常有寄存器来使其工作。 ADC 通常具有使其工作的寄存器。将这些块中的每一个视为可分离的。

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

uart 是一个可编程的逻辑 blob,它有某种 memory/interface 总线,它通常是一个从机。它还具有一些其他的芯片外信号,RX、TX、RTS、CTS、DTR……uart 内部的寄存器可通过接口总线寻址,用于使 uart 运行。由芯片供应商以适合总线主机的地址 space 的方式连接该总线,总线主机可以直接或间接地 write/read uart 中的寄存器使其运行。从某种意义上说,它是可编程的,即根据其规范对寄存器进行编程使其运行。

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

这不仅限于基于 ARM 的微控制器。你看看英特尔 x86 处理器里面有第三方 IP 不是英特尔发明或创造的,可能有很多但不是全部。几乎所有人都一样。

基于处理器的芯片只是带有座椅、发动机和车轮的汽车,它们是根据从某处采购的设计,然后使用来自内部或外部的人的更多 IP 相互连接的。

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

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

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

当然,有些供应商要么制作带有漏洞的不良文档作为可悲的习惯,要么有些供应商故意不提供没有 NDA 的文档,因为担心竞争对手可能会复制,或者只是一种习惯那家公司可以追溯到很久以前。有时那些封闭的账簿公司做得很好,有时会让他们痛苦。 Broadcom 和 allwinner 似乎做得不错,allwinner 文档往往被芯片供应商遗弃,我想他们不会受到惩罚,但其他公司可能会因此而受到经济或其他惩罚。都在法律协议里。

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

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

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

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

SAML22 有一个 Cortex-M0+ 内核,在 ARM 文档中有描述"Technical Reference Manual" (TRM, DDI0484) and the less detailed "Device Generic User Guide" (DGUG, DUI0662)