寄存器ah_移位寄存器的工作原理

寄存器ah_移位寄存器的工作原理【SoC基础】对寄存器的概念、原理、作用进行深入剖析_寄存器的物理位置在哪里

📢:如果你也对机器人、人工智能感兴趣,看来我们志同道合✨
📢:不妨浏览一下我的博客主页【【SoC基础】寄存器的深入剖析】
📢:文章若有幸对你有帮助,可点赞 👍 收藏 ⭐不迷路🙉
📢:内容若有错误,敬请留言 📝指正!原创文,转载请注明出处


一、寄存器概述

经常说,给一个已经分配好地址的特殊的内存空间取的一个别名就是寄存器。
英文:register 功能:
大小:一般一个寄存器的大小为1byte,即8位。

二、寄存器工作原理

(1)寄存器和硬件之间有双向影响(有些是双向的)
(2)软件可以读写寄存器
(3)总结:寄存器是软件能够控制硬件的关键

三、寄存器映射

定义: 寄存器映射(Register Map)是一个记录了寄存器地址和功能的表格或文档。在STM32中,寄存器映射通常以寄存器组(Register Group)的形式组织,每个寄存器组对应于特定的功能模块或外设。寄因此,存器映射是指将寄存器与特定的功能或数据关联起来的过程,确定了每个寄存器的功能和用途,例如通用寄存器、程序计数器、状态寄存器等。
寄存器通常是用静态随机存取存储器(Static Random Access Memory, SRAM)来实现。SRAM寄存器是直接集成在STM32微控制器芯片中,用于存储各种外设的配置和控制寄存器、状态寄存器等信息。SRAM具有快速的读写速度和低功耗特点,但是数据是易失性的,断电时会丢失。

示例
Register Group: GPIOA
– GPIOA_MODER: GPIOA Mode register
– GPIOA_OTYPER: GPIOA Output type register
Register Group: USART1
– USART1_SR: USART1 Status register
– USART1_DR: USART1 Data register
上面的示例中,寄存器映射表展示了两个寄存器组:GPIOA和USART1。每个寄存器组都列出了该组中的一些寄存器及其对应的描述。每个寄存器都有一个特定的名称和功能,通过访问该名称,可以对寄存器进行读写操作,以实现对特定功能模块的配置和控制。

寄存器地址

物理地址和逻辑地址

物理地址:物理地址是寄存器在微控制器内部存储器中的实际地址。它用于直接访问和操作寄存器的数据。寄存器的物理地址通常在芯片的参考手册或数据手册中进行详细说明。
逻辑地址:逻辑地址是相对于基本地址的偏移量,通过加上基本地址来计算出寄存器的物理地址。逻辑地址通常以符号常量或枚举值的形式表示。逻辑地址的使用可以简化编程的可读性并提高可移植性。
总结:物理地址(寄存器地址)=逻辑地址(偏移量)+基地址

访问寄存器的地址
使用物理地址。例如,将寄存器地址强制转换为指针,并通过指针进行读取和写入操作。
volatile uint32_t *reg = (uint32_t *)0x; // 使用物理地址访问GPIOA的寄存器
*reg = 0x000000FF; // 将GPIOA寄存器的低8位设置为0xFF

使用逻辑地址。固件库提供了逻辑地址的宏定义或函数接口,这些宏或函数会在内部根据逻辑地址计算出相应寄存器的物理地址,用于访问寄存器
GPIOA->ODR = 0x000000FF; // 使用逻辑地址访问GPIOA的输出数据寄存器

CPU向存储器读写的过程,寄存器在其中的作用
1. CPU发送读写请求:CPU通过总线向存储器发送读取或写入请求。请求包括要读取或写入的内存地址以及其他控制信号。
2. 存储控制器接收请求:存储控制器接收到来自CPU的读写请求。存储器控制器负责管理存储器的访问和数据传输。
3. 存储器地址解码:存储器控制器对CPU发送的地址进行解码,以确定要读取或写入的内存单元的物理地址。
4. 读写操作执行:根据CPU的请求和解码后的地址,存储器执行以下操作之一:
– 读取操作:如果是读取操作,存储器从内存单元中读取对应的数据。
– 写入操作:如果是写入操作,存储器将CPU发送的数据写入到对应的内存单元。

  1. 数据传输:在执行读取操作或写入操作时,数据需要通过数据总线进行传输:
    – 读取操作:存储器将读取到的数据通过数据总线传输给CPU。
    – 写入操作:CPU将要写入的数据通过数据总线传输给存储器。

  2. 寄存器的作用:
    – 存储器读取:读取操作后,存储器将数据传输给CPU。CPU接收到数据后,会暂时存储在寄存器中。寄存器在这个过程中充当缓存区域,方便CPU进行后续的处理和操作。
    – 存储器写入:在写入操作时,CPU将要写入的数据存放到寄存器中。寄存器作为临时存储区域,存储着待写入的数据。然后,CPU将数据从寄存器传输到存储器的指定位置。

寄存器在读取过程中扮演了缓冲和传递数据的角色,有助于提高数据传输的效率。在写入过程中,寄存器作为存储和传递数据的临时容器,在保证数据的正确性和一致性的同时,提高了写操作的效率。寄存器的使用可以减少CPU与存储器之间的数据传输次数和延迟,提高系统读写性能和整体效率。

offset地址偏移量

在计算机体系结构中,寄存器是用来存储和操作数据的高速存储器。”offset”在寄存器的上下文中通常表示一个偏移量,用于访问寄存器中的特定位置或特定数据。
具体来说,当涉及到寄存器中的”offset”时,通常是指相对于寄存器起始位置的偏移量。这个偏移量可以用来定位寄存器中的某个特定位、字节、字等。通过将寄存器的起始地址与偏移量相加,可以计算出要访问的特定位置的地址。
例如,在某些处理器架构中,使用基址寄存器(Base Register)和偏移寄存器(Offset Register)来进行地址计算。
基址寄存器存储了一个起始地址,而偏移寄存器则存储了一个相对于基址的偏移量。通过将两个寄存器的值相加,得到最终的内存地址。
偏移量可以是一个定值,也可以是根据程序的需要进行动态计算的值。其目的是在寄存器中定位数据存储的位置,从而能够有效地访问和操作数据。

问答:寄存器扮演着如何角色?

1、寄存器的地址跟什么有关?

在计算机系统中,每个寄存器都有一个唯一的地址。 这些地址用于标识寄存器在CPU内部的位置和访问方式

2、寄存器能存放多大的数据?

在大多数计算机体系结构中,寄存器是按照固定的位宽存储数据。
例如,在32位计算机中,寄存器的宽度为32个二进制位(或称为32位)。这意味着每个寄存器可以存储 32位长的二进制数据。

3、相邻两个寄存器的地址差多少?

在大多数计算机体系结构中,相邻两个寄存器的地址之间的差通常等于一个寄存器的宽度。
以32位体系结构为例,每个寄存器都有32个二进制位,也就是4个字节。在这种情况下,相邻两个寄存器的地址之间的差将为4个字节。
例如,假设一个CPU有4个通用寄存器,它们依次编号为R0、R1、R2和R3。如果R0的地址是0x1000,那么R1的地址将是0x1004(0x1000+ 4),而R2的地址将是0x1008(0x1004 + 4),以此类推。

4、寄存器地址的最小单位?

寄存器地址的最小单位为一个字节,这意味着每个寄存器都至少占据一个字节的存储空间。

总结

寄存器的地址 与寄存器存入数据的大小存在紧密的联系。 因为每个寄存器可以存储32位长的二进制数据,所以相邻两个寄存器的起始位置相差4个字节的数据,进而适合用字节来作为寄存器地址的最小单位,所以如果R0的地址是0x1000,那么R1的地址将是0x1004(0x1000 + 4)

在这里插入图片描述

今天的文章
寄存器ah_移位寄存器的工作原理分享到此就结束了,感谢您的阅读。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/81174.html

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注