前言:
现时朋友们对“寄存器右移和左移”大概比较重视,同学们都需要学习一些“寄存器右移和左移”的相关文章。那么小编同时在网上收集了一些有关“寄存器右移和左移””的相关知识,希望小伙伴们能喜欢,兄弟们快快来学习一下吧!寄存器这个词相想必大家并不陌生吧!应该学过嵌入式的都知道吧!那你有没有系统的总结过寄存器的知识呢!我给大家总结一些寄存器的知识!大家快来阅读学习吧!
一、什么是寄存器寄存器是CPU的组成部分,因为在CPU内,所以CPU对其读写速度是最快的,不需要IO传输。但同时也决定了此类寄存器数量非常有限,有限到几乎每个存储都有自己的名字,而且有些还有多个名字。
下面是来自大佬的硬料:
如果把被储存的东西比作能量:
1. 寄存器就是 ATP,可以随时拿来用,性能高,但数量有限;
2. 内存就是葡萄糖,性能一般,但是存量可以比较多;
3. 外存(比如硬盘)就是脂肪,容量可以非常大,性能很差,要先转化为葡萄糖(存进内存),然后转化为 ATP(放到寄存器)才能直接利用(存取)。
二、STM32芯片框架图
(对于这两个图的理解可以参考STM32参考手册 驱动单元由ARM 粉色部分位外设由ST设计,主要学习APB1 APB2 两个总线(两个总线速度不同)中的外设)三、什么是寄存器映射
我们知道,存储器本身没有地址,给存储器分配地址的过程叫存储器映射,那什么叫寄存器映射?寄存器到底是什么?
在存储器Block2 这块区域,设计的是片上外设,它们以四个字节为一个单元,共32bit,每一个单元对应不同的功能,当我们控制这些单元时就可以驱动外设工作。
我们可以找到每个单元的起始地址,然后通过C 语言指针的操作方式来访问这些单元,如果每次都是通过这种地址的方式来访问,不仅不好记忆还容易出错,这时我们可以根据每个单元功能的不同。
以功能为名给这个内存单元取一个别名,这个别名就是我们经常说的寄存器,这个给已经分配好地址的有特定功能的内存单元取别名的过程就叫寄存器映射。
比如,我们找到GPIOB 端口的输出数据寄存器ODR 的地址是0x4001 0C0C(至于这个地址如何找到可以先跳过,后面我们会有详细的讲解),ODR 寄存器是32bit,低16bit有效,对应着16 个外部IO,写0/1 对应的的IO 则输出低/高电平。现在我们通过C 语言指针的操作方式,让GPIOB 的16 个IO 都输出高电平。
四、寄存器的功能
寄存器最起码具备以下4种功能:
①清除数码:将寄存器里的原有数码清除。
②接收数码:在接收脉冲作用下,将外输入数码存入寄存器中。
③存储数码:在没有新的写入脉冲来之前,寄存器能保存原有数码不变。
④输出数码:在输出脉冲作用下,才通过电路输出数码。
仅具有以上功能的寄存器称为数码寄存器;有的寄存器还具有移位功能,称为移位寄存器。
寄存器有串行和并行两种数码存取方式。将n位二进制数一次存入寄存器或从寄存器中读出的方式称为并行方式。将n位二进制数以每次1位,分成n次存入寄存器并从寄存器读出,这种方式称为串行方式。
并行方式只需一个时钟脉冲就可以完成数据操作,工作速度快,但需要n根输入和输出数据线。串行方式要使用几个时钟脉冲完成输入或输出操作,工作速度慢,但只需要一根输入或输出数据线,传输线少,适用于远距离传输。
标签: #寄存器右移和左移 #寄存器的写入和读出实验步骤 #寄存器写不进去数值的原因