寄存器

来源:互联网 发布:网络安全措施有哪些 编辑:程序博客网 时间: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;

参考内容:朱有鹏老师视频教程的课件 & 网友文章

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 红衣军到决赛圈怎么办 宝宝湿疹留下的黑印怎么办 出牙宝宝很烦躁怎么办 法斗嘴唇破了怎么办 狗嘴巴周围红了怎么办 脸上起红包还痒怎么办 睾丸胀痛有下坠感怎么办 英语不好又不会读怎么办 七个月宝宝手上长倒刺怎么办 字母纹身纹反了怎么办 花甲生的吃了怎么办 别人告我欠他钱怎么办 实习手册没有公司的印章怎么办? 家长管的太严怎么办 对于老公沉迷于股票怎么办 月经期吃了香瓜怎么办 月经漏到内裤上怎么办 上班没时间养狗怎么办 宝宝呼吸道感染反复发烧怎么办 熬夜后头晕想吐怎么办 生气后全身无力酸痛怎么办? 久坐导致的腰疼怎么办 削土豆手变黑了怎么办 熬夜后头痛眼痛怎么办 孩子毎天通宵游戏怎么办 熬夜写作业困了怎么办 三十多岁白头发越来越多怎么办 AI界面字体太小怎么办 睡不着怎么办躺倒床上脑子混乱 作息规律不正常夜里睡不着怎么办 作息不规律引起身体痒怎么办 在大学里好无聊怎么办 开会时间通知错了怎么办 商场要求商户变更位置怎么办 怀孕初期症状小腹痛怎么办 1岁半宝宝吃夜奶怎么办 戒奶宝宝不喝奶粉怎么办 2岁半宝宝老晚睡怎么办 老是熬夜然后想调生物钟怎么办 一个月宝宝睡眠不好怎么办 个人怎么办一清pos机