内部寄存器、外设寄存器和内存的区别

内部寄存器:指的是CPU内核里的寄存器,如r0,r1等;

外设寄存器:一般是指一些某一特殊功能的物理地址,外设寄存器的物理地址都在0x4800_0000~0x5FFF_FFFF,比如STM32中,GPIO、I²C、SPI、CAN都叫做外设寄存器。嵌入式通过编程来控制外设寄存器从而控制芯片外部的外设。

内存:内存(Memory)也被称为内存储器,其作用是用于暂时存放CPU中的运算数据,以及与硬盘等外部存储器交换的数据。如RAM,SDRAM,Flash等。
物理地址:操作系统会给每一个内存单元编上一个绝对的号,计算机系统就通过这个编号来定为每一个内存单元的物理位置,这个编号称为内存的物理地址

s3c2440(CPU:ARM920t)是32位操作系统,可达4GB(0x0000_00000xFFFF_FFFF)的地址范围。但实际的内存可能用不了这么多内存,如,片内RAM的物理地址在0x0000_00000x0000_7FFF,SDRAM的物理地址在0x3000_00000x33fF_FFFF,外设寄存器的物理地址都在0x4800_00000x5FFF_FFFF。
mov指令:只能用于CPU内核寄存器(如r0,r1等)之间的数据传输;
ldr指令:用于从内存中读取数据至CPU内核寄存器里;
str指令:用于从CPU内核寄存器中读取数据至内存里。

外设内存映射机制
说到映射大家可能就会想到函数映射,其实外围设备的内存映射原理是一样的,只不过左边的集体变成了CPU,右边的集合变成了外围设备,那条带箭头的线就是连接CPU和外设地址引脚的地址总线。
要知道,一个开发板的CPU地址引脚并不是所有的都与内存元器件相连的,如果该板上有外设(如一块独立显卡),那么CPU就需要分出一些引脚来与该外设的地址引脚相连,相当于将一部分内存寻址的空间分给了外设,那不相当于CPU分出去地址寻址空间为空?非也,一般的外设为了加快处理速度都有自己的片内RAM(比如说显存,你也知道显存对显卡性能的重要性),分出去的地址空间也就与片内RAM物理连接起来,这样CPU就能像访问内存一样去访问外设的片内RAM,这也就是所谓的内存映射。

Guess you like

Origin blog.csdn.net/Michael177/article/details/121322258