寄存器
来源:互联网 发布:网络安全措施有哪些 编辑:程序博客网 时间:2024/06/06 10:49
两种不同的寄存器
SoC中有两类寄存器:通用寄存器和SFR(Specical Function Register)
SFR
SFR(special function register,特殊功能寄存器)不在CPU中,而存在于CPU的外设中,我们通过访问外设的SFR来编程操控这个外设,这就是硬件被编程控制的方法。
寄存器(SFR)的本质
寄存器属于CPU外设的硬件组成部分。
对于IO与内存统一编址的CPU,CPU可以像访问内存一样访问寄存器。
寄存器是CPU的硬件设计者制定的,目的是留作外设被编程控制的“活动开关”
正如汇编指令集是CPU的编程接口API一样,寄存器是外设硬件的软件编程接口API。
使用软件编程控制某一硬件,其实就是编程读写该硬件的寄存器(SFR)。
为什么称之为“SFR(特殊功能寄存器)”?
第一:寄存器的功能乃至每个bit位的功能是预先确定的,是SoC设计的时候确定的,编程者不能更改。
第二:用作该功能的寄存器不能作为其他用途,或者说,该寄存器的是用于A外设,就不能用于其他外设。
通用寄存器
通用寄存器(ARM中有37个)是CPU的组成部分,CPU的很多活动都需要通用寄存器的支持和参与。
之所以称之为“通用寄存器”是因为:通用寄存器用于传送和暂存数据,也可参与算术运算逻辑运算,并保存运算结果。除此以外,它们还有一些特殊的功能(如:PC,SP)。但这些“通用寄存器”并不是为某个特定的外设服务的,而是为整个SoC服务的。并且除了PC、SP等通用寄存器,寄存器里的数据具体作何用途并没有事先先确定。
两种不同的寄存器的访问方式
单个寄存器的位宽一般和CPU的位宽一样,以实现最佳访问效率
通用寄存器的访问
用汇编语言访问
mov r1, r0
mov r0, #0用C语言访问
C语言屏蔽了访问通用寄存器的细节,C语言不能访问通用寄存器
C语言代码通过编译器编译成汇编源文件,需要用到通用寄存器的地方由编译出的汇编语言去访问使用,而使用C语言的编程人员不用去理会这些访问通用寄存器的细节。
特殊功能寄存器(SFR)的访问
用汇编语言访问
ldr r1, =0xE0200280
str r0, [r1]
mov r0, #0用C语言访问
int * p = ( int * )0x30008000;
*p = 16;
参考内容:朱有鹏老师视频教程的课件 & 网友文章
- 寄存器
- 寄存器
- 寄存器
- 寄存器
- 寄存器
- 寄存器
- 寄存器
- 寄存器
- 寄存器
- 寄存器
- 寄存器
- 寄存器
- 寄存器
- 寄存器
- 寄存器
- 寄存器
- 寄存器
- 寄存器
- poj1207 The 3n + 1 problem
- wampserver环境配置--Apache2.4+PHP5.6+Mysql5.7.11
- IOS UIButton的属性总结
- java 死锁及解决
- 解决php的“It is not safe to rely on the system’s timezone settings”问题
- 寄存器
- [我所知道的BIOS]->[DRAM Sizing] (1) 7
- python 简单的日k线 主要是时间转换
- bootstrap原理分析
- [233333]
- NOIP 2010 三国游戏
- Notepad++ 配置C/C++编译器环境
- 随笔11月02日
- Java设计模式之——外观模式