我目前正在学习微控制器和处理器,关于这两者之间的一些区别我有几个问题。据我了解,MCU包含一个实现处理器体系结构的处理器。例如,我使用的SAML22微处理器的处理器具有ARM Cortex M0。因此它将具有以下内容:
体系结构-ARM
处理器-ARM Cortex M0
MCU-SAML22
我从SAML22数据表中收集的寄存器是否与ARM Cortex M0相关?如果可以,怎么办?
答案 0 :(得分:2)
不,微控制器数据表描述了不属于ARM内核的外围设备。
SAML22具有Cortex-M0 +内核,在ARM文档"Technical Reference Manual" (TRM, DDI0484)和较不详细的"Device Generic User Guide" (DGUG, DUI0662)中进行了描述。
答案 1 :(得分:1)
您正在尝试使这一过程变得过于复杂。单片机具有处理器。处理器具有处理器。在MCU和SOC上都可以找到具有Linux功能的处理器(不仅仅是rtos或uclinux)。就像在割草机上有一些马力马达,在高尔夫球车上也有相同或相似的马达。或喜欢用砖砌的学校或用相同风格/品牌的砖砌的房屋。不要挂断了。尤其是与您的问题其余部分完全无关的芯片中使用的处理器。
Atmel想要制造一个MCU,因此无论创建,重用还是购买处理器,他们至少拥有一个处理器(如果不是更多的话)作为其IP,但他们选择购买别人的IP。现在,他们想围绕一些逻辑,他们可以使用一些自己的IP或购买一些IP。每个主要块都是一个新的讨论。他们是从头开始制作自己的uart,还是拿走了几年前创建的uart并重新使用,还是买了uart。他们是从头开始制作ADC,还是采用几年前制造的ADC并使用它,是否从某人那里购买ADC设计并使用它。对设计中的每个主要或次要模块重复上述步骤。就像本田制造汽车一样,他们要制造自己的零件,要购买哪些零件,并且与他们几年前的设计没有关系,或者与卡车大小的车辆还是紧凑型汽车无关,它们都有四个轮子,一个引擎和一些座椅,在某些情况下可能会共享某些组件,而其他组件则完全不兼容。但同样的道理,我们坐下来,使用我们已有的座位,再买一个。我们是制作后视镜,使用先前设计中已有的后视镜还是从他人那里购买后视镜?后视镜决策可能与座位决策无关。
仅注册一个术语,即您在其中写入/存储一些信息的事物。uart具有注册器以使其工作。处理器通常具有寄存器以使其工作。 ADC通常具有寄存器使其工作。这些块中的每一个都是可分离的。
处理器内核是一个逻辑blob,从某种意义上说它是可编程的,它具有一组规则,并且其主要接口是内存总线,在该总线上它是主处理器,它希望在根据其设计读取指示其的指令时查找怎么做,由芯片供应商将其连接起来,以提供指令。它可能有一些中断线和其他一些东西,但其主要接口是该存储器总线。内部的“寄存器”是处理器内部访问的设计的一部分,通常不映射到内存。
uart是一个可编程的逻辑blob,它具有某种内存/接口总线,通常它是一个从设备。它还有一些其他信号从芯片外发送出去,RX,TX,RTS,CTS,DTR ... uart内部的寄存器可通过接口总线进行寻址,并用于使uart运行。芯片供应商应以适合总线主控器地址空间的方式连接此总线,总线主控器地址可以直接或间接地写入/读取uart中的寄存器以使其运行。在某种意义上说,它是可编程的,按照其规范对寄存器进行编程即可使其运行。
ADC是一个逻辑斑点,有时发现它是可编程的,有时不是。转换器本身通常不是。但是,当将其用于不仅仅是ADConversions的芯片中时,将在ADC周围包裹一个额外的逻辑blob,使其能够进行编程,并且该逻辑blob将具有某种接口总线,而该总线是从设备。由该芯片供应商将总线连接到总线主控器,该总线主控器可以通过某种方式对ADC进行编程以完成某些工作。
这不限于基于ARM的微控制器。您在intel x86处理器中查看,其中没有由intel发明或创造的第三方IP,其中可能很多,但不是全部。几乎所有其他人也是如此。
基于处理器的芯片只是具有座椅,引擎和车轮的汽车,它们的设计源自某处,然后使用来自某人的IP相互连接,无论是否在家中。
对于这些芯片中的任何一个,每个IP blob都有uart文档,adc文档,处理器核心文档。有时,许可协议会阻止芯片供应商发布文档,而您必须以某种形式的板级支持软件包或SDK从他们那里获取驱动程序,从atmel到intel到您所听说过的芯片供应商,无数示例zilog。同样,有许可协议或通用惯例可指导芯片供应商将记录哪些零件以及如何记录而不记录什么零件。因此,通常但并非总是如此,当您将ARM或MIPS内核作为设计的一部分时。通常,应该经常从处理器供应商处获得处理器文档,因此,ARM,MIPS等都来自处理器供应商。uart,ADC和其他一些内部或购买的IP通常都在芯片供应商文档中。理想情况下,芯片供应商会在各种ip规则内创建地址空间,因此芯片供应商通常会记录每个逻辑Blob在处理器地址空间中的位置,然后转到该逻辑Blob的文档以查看各个控制接口的功能做,寄存器或内存映射的内存。尽管特别是在使用uarts的情况下,这种情况并不总是正确的,但有时您会发现这与16550兼容,因此您必须从其他人那里找到16550文档并自行连接各个点。树莓派包括其他外围设备,例如它们基本上说这只是购买的Blob,为此,或者这里有Blob,我们不会向您展示其工作原理(但我们为此发布了Linux驱动程序渴望您可以对此进行逆向工程)。
使用Atmel现在基于Microchip ARM的产品(通常),您通常会准备就绪以获取有关处理器内核,通用寄存器以及内核外围设备很少的信息,例如systick定时器(如果有)。 uart,gpio,地址空间,spi,i2c等将包含在该部分的一个或多个Atmel文档中,它们涵盖了这些外设的寄存器规格。
从芯片供应商那里获取的文件数量是非常多的,并且随着时间的流逝而特定于家族或产品线。一些芯片供应商和一些客户一样,例如电路板在一个通常称为数据表的文档中设计特定的内容。引脚排列,电气设备等。其他文件涵盖了uart寄存器规范等。有些设计会重复使用相同的核心组件。如果您有uart,则此处是注册规格,我们所有的uart都相同。因此,将为所有芯片外设提供手册,也许处理器或处理器核心本身在单独的手册中。在使用该设计解决方案的某些情况下,外围设备(如果存在)始终位于同一地址,或者不同。我想到的是您可以在数据表中找到电路板设计的内容以及地址图,但是有关程序员的其余信息在系列参考手册中,因此您至少需要这两份文件。
当然,有些供应商要么制作带有不良习惯的漏洞的不良文档,要么有些故意在没有NDA的情况下不提供文档,因为担心竞争对手可能会仿制,或者仅仅是该公司的习惯那回去了。有时那些封闭式公司的业绩很好,有时会给他们带来痛苦。 Broadcom和allwinner似乎还不错,allwinner文档往往会被芯片供应商所遗弃,我想他们不会受到惩罚,但是其他公司可能会因财务或其他惩罚而被要求这样做。一切都在法律协议中。
在一些外围设备中,只有一种或两种设计,每个人都只是购买而已,尽管没有文档说明,但Linux / unix驱动程序可以看到每个人都使用相同的IP。
比您要求的要多,但可以从您的问题中看出您走错了路。
通常ARM的东西不在芯片供应商的东西里,所以没有,你不会在那里找到它的。有时(很少),芯片供应商会全部或部分重新发布一份arm文档。最好直接从手臂上获取。对于皮质m,核心上的手臂外围位于固定/众所周知的地址。对于cortex-a和较旧的arm11,arm10,arm9 ...芯片供应商在为其设计该产品的地址空间中绑定了外围基址,而内部臂外围设备(如果有的话)也以此为基础。因此您可以找到两个可能来自不同供应商的具有相同内核的产品,但是由于这个原因,内部的内存映射外设位于不同的地址。 (在各种臂芯的技术参考手册中)。