ARM寄存器详解
ARM A系列寄存器的情况
这是寄存器的总表,下面是CPU的各个模式,上面的纵轴就渗轮是寄存器组。
CPU在运行的时候为什么会有寄存器?
想象CPU是一个圈一直在运转,然后寄存器里面有大量的指令,这些指令不知道从哪里来的,但是一般情况下我们的程序在计算我们的程序,我们的程序一般是放在内存里面的,它从内存里面把这些程序读进来之后,在运行,但是如果现在这个程序在运行时异常,那么就要进行CPU状态的切换,除了状态切换之外,当前的一些数据结果需要进行一个保存,但是如果要把这个结果存到内存去,内存并不稳定并且很慢,所以就要想办法能不能找到一个临时空间保存一下,这就是为什么会诞生寄存器。
设置寄存器的原因就是为了更好的去控制和达到效率,ARM体系为了很好的去控制CPU,设定了哪些寄存器?
User纵轴上的十三个寄存器称为通用寄存器,R13是一个比较特殊的寄存器,也叫做SP,就是占指针的寄存器,就是指向某一些占空间,R14是LR,就是连接寄存器,它肯定是去连接某一个地方。R15是PC,这是程序计数器,这是CPU在每一个空间切换的时候的计数器,最下面那个也就是APSR或者CPSR,PSR就是程序状态寄存器,A代表应用程序状态寄存器,C代表当前程序状态寄存器。
在往下就类似于R17,只不过它叫做SPSR,S就是以保存程序代表寄存器或者我们也可以称为存储状态寄存器,通过这些我们大概把寄存器了解了。
那么这上面分为通用的,那么下面就是特殊寄存器,从横向来看,我们可以看到在USR模式下面,这样寄存器挺全的,但是USR下面没有SPSR,就是没有存储状态的寄存器,然后FIQ快速中断模式下面面是共享R0到R7,意思就是这些模式下的R0到R7它们与USR模式下的R0到R7是共享的,这样如果存储一些数据在R0到R9下面,突然发生异常,切换到另一个模式,那么我们就应该要想办法把这个存取一下,因为另一个模式可能也要往这里面写东西,那么写之前就应该把USR模式下的先保留一下,到时候退出解决后在还原回来,所以我们要一个R0到R7这块寄存器是共享的,同样FIQ后面几个模式的R8到R12也是和USR共享的,只有FIQ是自己独有的,同样的我们在看到PC计数器也是共享的,还有SPSR也是共享的,但是SPSR每个状态都有自己独有的。
APSR应用程序的一个寄存器,它只在USR下面叫做APSR,其他模式下面叫做当前程序存储寄存器。
总结
1,R0-R12是通用寄存器,放通用数据然后每个寄存器都是32位的。
2,各个模式的R0到R12与USR模式是共享的(除了FIQ,R8-R12),PC,CPSR是共享的。
3,USR模式没有SPSR
SP:栈指针,存储栈地址,比如有个CPU,然后还有个外部资源也就是内存,我们想象CPU在程序跳转的时候在运行是最核心的ALU单元,然后外部资源存储着程序A和程序B还有程序C,实际上在CPU在读程序A的时候,可能下面的时候会跳到程序B单元,这个时候它可能不知道地址在哪里,那么这个时候就存储在SP这个寄存器里面,SP这个寄存器表示后面将要执行的程序。
LR:链接寄存器,存储于程序返回地址。这个链接寄存器主要用在函数A和函数B,A正在运行时,突然要调用B,那么就引了一个分支了,然后这个函数B去运行,运行完之后还是要返回到最初然后继续往下走,那么这个时候返回值应该要有个记录,这就是链接寄存器。罩裤
PC:程序计数器
APSR/CPSR:应用程序状态寄存器/当前程序状态寄存器。
SPSR:已存储程序状态寄存器。想象一个丛闷信程序正在运行,这个程序当前状态正常,这个状态就先把它保存到CPS里面,这个时候突然发生异常,那么当前状态就应该变成异常,就把这个状态存到CPSR上面,但是异常处理完了之后,我们希望还是能够回到之前那个状态,但是这个时候当时的状态已经被清理掉了,这个时候我们就可以用SPSR把原来那个状态保存,这样当状态在发生改变的时候,要还原就可以去SPSR里面读取之前那个状态,这就是它们之间的关系,就类似有一个A的变量,给A这个变量赋了一个值,然后还赋了一个新值,但是又希望原来那个值要保存,所以有个变量B,然后把变量A赋给变量B。
原文链接: http://www.maiziedu.com/wiki/arm/register/
ARM寄存器详解
ARM A系列寄存器的情况
这是寄存器的总表,下面是CPU的各个模式,上面的纵轴就是寄存器组。
CPU在运行的时候为什么会有寄存器?
想象CPU是一个兴究县敌胞维圈一直在运转,然后寄存器里面有大量的指令,这些指令不知道从哪里来的,但是一般情况下我们的程序在计算我们的程序,我们的程序一般是放在内存里面的,它从内存里面把这些程360问答序读进来之后,在运行,但是如果现在这个程序在运行时异常,那么就要进行CPU状态的切换,除了状态切换之外,当前的一些数据结果需要进行一个保存,但是如果要把这个结果存到内存去,内存并不稳定并且很慢,所以就要想办法能不能找到一用宁久船社源顾之板个临时空间保存一石食客评印固下,这就是为什么会诞生寄存器。
设置寄存器的原因就是为了更好的去控制和达到效率,ARM体系为了很好的去控制CPU,设定了础致双少哪些寄存器?
User纵轴上的十三个寄存器称为通用寄存器,R13是一个比较特殊的寄存器,也叫做SP,就是占指针的寄存器,就是指向某一些占空间,R14是LR,就是连接寄存器,它肯定是陈抓明斗流息良伤内去连接某一个地方。R15是PC,这是程序计数器,这是CPU在每一个空间切换的时候的计数器,最下面那个也就是APSR或者CPSR,PSR就是程序状态寄存器,A代表应用程序状态寄存器,C代表当前程序状态寄存器。
在往下就类似于R17,只不过它叫做SPSR,S就是以保存程序代表寄存赵器或者我们也可以称为存储状态寄存器,通过这些我们大概把寄存器了解了。
那么这上面分为通律时贵绝长用的,那么下面就是特殊寄存器映会没免鱼留,从横向来看,我们可以看到非善续始体句武宣探赶在USR模式下面,这样寄存器挺全的,但是USR下面没有SPSR,就是没有存储状态的寄存器,然后FIQ快速中断模式下面面是共享R0到R7,意思就是这条放些模式下的R0到R7它们与USR模式下木社混印化此的R0到R7是共享的,这样如果存储一些数据在R0到R9下面,突然发生异常,切换到另一个模式,那么我们就应该要想办法把这个存取一下,因为另一个模式可能也要往这里面写东西,那么写之前就应该把USR模式下的先保留一下,到时候退出解决后在还原回来,所以我们要一个R0到R7这块寄存器是共享的,同样FIQ后面几个模式的R8到R12也是和USR共策挥想判土践画享的,只有FIQ是自己独有的,同样的我们在看到PC计数器也是共享的,还有SPSR也是共享的,但是SP凯次SR每个状态都有自己独有的。
APSR应用程序的一个寄存器,它只在USR下面叫做APSR,其他模式下面叫做当前程序存储寄存器。
总结
1,R0-R12是通用寄存器,放通用数据然后每个寄存器都是32位的。
2,吃简论界小喜精向活铁临各个模式的R0到R12与USR模式是共享的(除了FIQ,R8-R12),PC,CPSR是共享的。
3,USR模式没有SPSR
SP:栈指针,存储栈地址,比如有个CPU,然后还有个外部资源也就是内存,我们想象CPU在程序跳转的时候在运行是最核心的ALU单元,然后外部资源存储着程序A和程序B还有程序C,实际上在CPU在读双都味青南民胡注程映属程序A的时候,可能下面的时候会跳到程序B单元,这个时候它可能不知道地址在哪里,那么这个时候就存储在SP这个寄存器里面,SP这个血月率丰续由日寄存器表示后面将要执行的程序。
游执留掉书布送计拿终源LR:链接寄存器,存储于程序返回地址。这个链接寄存器主要用在函数A和函数B,A正在运行时,突然要调用B,那么就引了一个分支了,然后这个函数B去运行,运行完之后还是要返回到最初然后继续往下走,那么这个时候返回值应该要有个记录,这就是链接寄存器。
PC:程序计数器
APSR/CPSR:应用程序状态寄存器/当前程序状态寄存器。
SPSR:已存储程序状态寄存器。想象一个程序正在运行,这个程序当前状态正常,这个状态就先把它保存到CPS里面,这个时候突然发生异常,那么当前状态就应该变成异常,就把这个状态存到CPSR上面,但是异常处理完了之后,我们希望还是能够回到之前那个状态,但是这个时候当时的状态已经被清理掉了,这个时候我们就可以用SPSR把原来那个状态保存,这样当状态在发生改变的时候,要还原就可以去SPSR里面读取之前那个状态,这就是它们之间的关系,就类似有一个A的变量,给A这个变量赋了一个值,然后还赋了一个新值,但是又希望原来那个值要保存,所以有个变量B,然后把变量A赋给变量B。
原文链接: http://www.***.com/wiki/arm/register/
ARM开发板的寄存器有哪些?
1、因为ARM的I/O引脚太多,又分GPA、B、C.....多个组,并且一个端口可以复用为多种功能。所以ARM的I/O引脚只能用寄存器组来控制管理,通过几种位组合的不同取值来实现同一个引脚的不同功能。
2、每个引脚有不同的功能,每种功能又有低电平,高电平,悬空。所以又要为每组引脚分配一个数据寄存器来配置这些引脚的初始状态。
3、引脚的地址就是PCON*(控制Reg)、PDAT*(数据Reg)的不同位的地址。
4、ARM芯片内部一般都有Cache,为了加快访问速度,几KB大小。你说那16M是FLASH芯片的大小。
建议:选下载个中文说明书选通读一遍,然后再精读user mannual.