AVR 内部数据总线宽度

AVR Internal Data bus width

我对连接到闪存的 AVR 控制器的内部数据总线宽度有疑问。我主要指的是Atmega328。数据表说(第 17 页)“由于所有 AVR 指令都是 16 或 32 位宽,Flash 被组织为 2/4/8/16K x 16”。这意味着闪存数据总线宽度必须是 16 位?我看不到任何地方提到 16 位宽程序存储器数据总线(当然在控制器内部)。但是总线用于RAM 似乎又是 8 位的。只是想澄清一下。

位 8 位 AVR 系列基于(修改后的)哈佛架构,其中有专门的程序和数据存储。程序存储器的数据路径确实是16位,而数据存储器只有8位。

有趣的是,Atmel 一开始就指出这些是 8 位 CPU。与 8051 或 Rabbit 等其他 8 位产品相比,这使它们看起来很有竞争力。由于 16 位程序数据路径,AVR 在基准测试中表现非常出色。后来,当 8 位听起来有点老套时,Atmel 决定称它们为 8/16 位 CPU。

data sheet/complete 第 9 页上的图 7.1 显示闪存根本没有连接到(8 位)数据总线,而只连接到地址总线。闪存的 "data" 主要进入指令寄存器,并通过使用 LPM 指令将该数据传输到寄存器中。请注意,将数据写入闪存时,您总是写入由 Z 指针(SPM 指令)寻址的 16 位 (R1:R0) ...并且 SPM 指令不能用 "clock cycles"(第 617 页)