寄存器
视频
B站有两个关于寄存器的视频,值得一看,具体链接为:链接: link
还有一个链接为: link
寄存器到底是什么?
寄存器是用于暂时存放二进制数码的时序逻辑部件,广泛地应用于各类数字系统中。因为1个触发器(或锁存器)可以存放1位二进制数码,N个触发器就可以组成一个能存放N位二进制数码的寄存器。此外,为了控制信号的接收、清除或输出,还必须有相应的控制电路与触发器相配合。所以,寄存器作为一个逻辑部件来使用,一般都包含有触发器堆和控制电路这两个部分。通常,将MSI多位数据寄存器分为两大类,一类是由多位D触发器并行组成的寄存器,数据是在时钟某个约定电平下存入的。
如图所示电路为74175型4位D触发器数据寄存器,它有公共的时钟端和清零端,当时钟脉冲上升沿到来时,数码便送到寄存器保存起来。另外,寄存器的每位输出都是互补的。
在组成中规模集成电路功能组件时,往往在它的公共控制端或输入端,插入反相器或缓冲器,目的是减轻这些控制或输入信号的负载。如上图a 中的CLk和CLR的非 输入处所示。
由上图的b可以看出,这种寄存器有三种工作状态,即清零、存数和保持,由于输出是互补的,这还可以使寄存器作为原码-反码转换器。
stm32寄存器
在STM32中文参考手册中,有句话是:当外设时钟没有启用时,软件不能读出外设寄存器的数值,返回的数值始终是0x0。如下图所示:
寄存器的值在掉电后也丢失,所以STM32操控外设的时候,要先使能时钟,寄存器才能正常的工作。STM32之所以是低功耗,是因为它的外设时钟在初始化过程中都未使能时钟,要使用外设,只需使能对应的时钟,这样耗能就会减少。
51单片机
51单片机在操作外设的时候,不需要去对那些io使能时钟,是因为它的时钟是默认开启的。
处理器控制硬件原理
建议看下第二个链接的视频
首先处理器一般分多少位,比如arm32位,32 位的arm所支持的最大寻址空间为4Gb:
2^32=4294967296b=4194304kb=4096Mb=4Gb
这4Gb的空间分给RAM,IO(特殊功能寄存器)等。
ROM:存储程序的地方
RAM:存储程序运行过程中的变量
## 处理器控制硬件原理
CPU本身是不能直接控制硬件的,硬件一般是由其对应的控制器来控制,处理器将各个硬件控制器的寄存器映射到了CPU地址空间中的一段范围,这样CPU就可以直接通过读写寄存器来间接控制硬件。
各个硬件控制器位于芯片内部,且寄存器的值在掉电后丢失
对于51单片机
51单片机结构的特点是以CPU为核心,且CPU与其它部件是通过三总线连接,如图所示:
51单片机总线结构
1 地址总线(Address Bus,简称AB)
地址总线的作用是可传送单片机送出的地址信号,用于访问外部存储器单元或I/O端口。
地址总线将地址信息送入地址译码器,地址译码器的输出可以确定唯一的存储单元。
2 数据总线(Data Bus,简称DB)
数据总线的作用是应用在单片机与存储器之间或单片机与I/O端口之间传输数据。
数据总线用来传送存储器到CPU或CPU到存储器的数据信息。
3 控制总线(Control Bus ,简称CB)
控制总线实际上就是一组控制信号线,包括单片机发出的、及从其它部件送给单片机的各种控制或联络信号。
存储器从CPU接收控制信号,以确定存储器执行读/写操作。
地址映射表
在一个处理器中,一般会将Flash(ROM)、RAM、寄存器等存储设备分别映射到寻址空间中的不同地址段,我们将这个映射关系称为这个处理器的地址映射表。
什么是地址映射?
所谓地址映射,就是将芯片上的寄存器甚至I/O等资源与地址建立一 一对应的关系。
如果某地址对应着某寄存器,我们就可以运用C语言的指针来寻址并修改这个地址上的内容,从而实现修改该寄存器的内容。
所以我们能操作IO资源(如引脚)的根本原因是,这些引脚由于地址映射与地址建立了对应关系,而部分地址又和寄存器建立了对应关系,所以,我们说操作某些资源就是操作某些寄存器。