嵌入式(二十八):arm总线&指令集&工作状态

1、arm流水:
a、流水的深度越深,级别越多,系统的性能有可能会更高
b、arm9开始就是哈佛结构,指令的吞吐量更多,内核的频率也更高。
c、arm7是三段流水
2、arm7的三级流水线:
a、正常操作过程中,在执行一条指令的同时对下一条指令进行译码,并将第三条指令从存储器中取出,即:
嵌入式(二十八):arm总线&指令集&工作状态_第1张图片
3、cortex M3概述:
嵌入式(二十八):arm总线&指令集&工作状态_第2张图片
a、一块低功耗处理器
b、门数目少,中断延迟短,调试成本低
c、满足有快速中断响应能力的深度嵌入式应用
d、采用armv7-M架构
e、采用thumb-2 ISA子集,包含所有基本的16位和32位thumb-2指令
f、哈佛处理器架构
g、32位单周期乘法、硬件除法
h、thumb状态和调试状态
i、嵌套向量中断控制器,与处理器内核紧密结合实现低延迟中断处理
j、存储器保护单元MPU,功能可选,用于对存储器进行保护
k、包括:12个通用32bit寄存器、链接寄存器LR、程序计数器PC、程序状态寄存器xPSR、两个分组的SP寄存器
l、存储器访问:一个独立的加载存储单元LSU,与来自ALU的加载和存储操作是分离的,即可以并行。一个3字的入口预取指单元,一次取一字。
m、所有来自内核的取地址操作都是字对齐的,如果是半字对齐的,则需要两次取指操作才能完成thumb-2指令的取指。对齐可能会耗费空间,但可以提高缓存的效率。
n、指令总线与数据总线分离
o、总线以矩阵的方式在片上进行处理
p、FPB,进行flash地址重载和断点的单元
q、DWT,系统调试和跟踪用的寄存器
r、ITM,进行指令跟踪,更接近于外部,对访问允许进行检验
s、ETM,进行嵌入式跟踪,跟踪CPU的指令和数据如何访问,对内部的控制逻辑实现一个使能和事件驱动的功能,更接近于核心处理器
t、TPIU,在片外,是可选的,用来跟踪接口的单元,把片内的跟踪信息(ITM与ETM)都获取出来,以某种格式进行组装,通过跟踪端口传送到片外
u、SW-J-DP,调试端口,对系统中,包括处理器中的寄存器的访问进行调试
v、AHB总线,更接近处理器总线
w、APB总线,更接近于外部,与AHB有速率的差异
4、cortex-M3指令集
a、不能执行arm指令集,只能执行thumb指令集,代码密度更高,汇编之后的机器代码所占据的存储空间大小更小,在单位存储空间上有更多的代码,即以更短的代码能够实现更多的功能
嵌入式(二十八):arm总线&指令集&工作状态_第3张图片
b、目的操作数在第一个,源操作数在第二个,包括但不限于以下:
c、8位立即数与寄存器值相加
d、低寄存器值与低寄存器值相加
e、PC加4(8位立即数)
f、SP加4(8位立即数)
g、寄存器值按位与
h、条件分支
i、无条件分支
j、逻辑左移,移位次数取决于寄存器中的值
k、寄存器值相乘
5、cortex-M3工作模式与状态
a、支持两种工作模式,线程模式和处理模式
b、在复位时处理器进入线程模式,异常返回时也会进入该模式,特权和用户(非特权)代码能够在线程模式下运行,和操作系统类似
c、出现异常时处理器进入处理模式,在处理模式中,所有代码都是特权访问的
d、有两种工作状态,thumb状态和调试状态
e、thumb状态:是16位与32位半字对齐的thumb和thumb-2指令的正常执行状态
f、调试状态:处理器停机调试时进入该状态
6、cortex-M3寄存器
嵌入式(二十八):arm总线&指令集&工作状态_第4张图片
a、低寄存器:寄存器R0-R7可以被指定寄存器的所有制令任意访问
b、高寄存器:寄存器R8-R12只能被某几个指令访问,即所有的32位指令MOV、ADD、CMP
c、SP寄存器有两种不同的状态,用作堆栈指针,自动与字,即4字节边界对齐
d、LR链接寄存器是子程序的链接寄存器,调用函数时返回的地址会被保存到链接寄存器中,即进入子函数之前将当前的PC的值进行存储。
e、在执行指令分支和链接指令或带有交换的分支和链接指令时,LR用于接收来自PC的返回地址。
f、LR也用于异常返回,其他任何时候都可以看做一个通用寄存器。
g、PC程序计数器,他的位0始终为0,因此指令始终与字或半字边界对齐
h、xPSR为程序状态寄存器,x代表可以有很多种。
i、系统级的处理器状态可分为3类,即有3个程序状态寄存器
j、对程序状态寄存器的访问使用MRS和MSR指令,在访问时可以把他们作为单独的寄存器,3个中的人两个组合,或3个组合,注意用户是不能直接使用,但是可以间接调用。
①、应用PSR:条件标志位都在高端,其余位保留,将条件代码的标识保留在堆栈中。在发生异常之前,程序在正常运行时都在这种状态。
②、中断PSR:发生了异常产生中断之后,会进入中断PSR。低位为中断号,高位保留。根据中断号激活相应的中断处理程序。
③、执行PSR:在发生读写存储器的时候,会发生一次属于他们的中断,即执行PSR状态,以及IF-THEN(执行事件)的时候也会进入,会对次高位和次低位ICT/IT进行置位,来确定响应的中断操作,这两个ICT/IT区域是重叠的,即进行IF-THEN的时候就不可被中断,IF-THEN 状态与中断状态不可同时存在。还有一个T位,用来表示当前是thumb还是thumb-2。
7、cortex-M3存储
a、支持32位字、16位半字、8位字节
b、存储格式为:将存储器看做从0开始向上编号的字节的线性集合。即字节0-3存放第一个被保存的字,字节4-7存放第二个被保存的字。
c、arm处理器默认的存储器格式为小端格式
8、cortex-M3存储器映射
a、通过存储器映射方式对功能模块进行统一编址,使CPU通过访问内存单元达到对外设寄存器的访问,即将外设映射为响应的内存地址
b、通过存储器的存储单元可以映射到外设寄存器。
c、重映射:CPU将外设寄存器重复编址到存储器的过程,即某一个外设寄存器在存储器里被映射了多个地址空间。这样有利于需要数据同步的时候,一个指令对变量的改变,会影响到其他的指令。类似于python里的
d、浅拷贝。
e、重映射就是为了快速响应中断(或快速完成某个任务):将同一地址映射到不同速度的两个存储块,然后将低速存储块中的代码段复制到高速存储块中,对低速存储块的访问将被重映射为对高速存储块的访问。即当低速区域的寄存器要访问外设某个地址的时候,可以判断有没有重映射,如果有,可以从更高速的寄存器去访问外设,来节约时间。
f、重映射发生在两种情况:系统启动的过程中;中途遇到需要在不同的存储器之间进行切换的时候
9、位带映射:
a、CPU不能直接对位带区中的单个数据位位寻址,只能通过对位带别名区的访问(或读/写)实现对位带区单个数据位的访问(或读/写),这种操作被称为位带操作。
b、发生在位带区和位带别名区
c、位带区:支持位带操作的存储器地址区域。
d、位带别名区:存储器位带区的重映射地址区域。访问位带别名区域会引起对位带区域的访问(读/写)。
e、映射关系为位带区的一个位与位带别名区的一个字相互对应。
f、对于SRAM位带区的某个比特(bit),记它所在的字节地址为A,位序号为n(0<=n<=7),则该比特在位带别名区中的地址为:
AliasAddr=0x22000000+((A-0x20000000)*8+n)*4
上式中‘8’表示每个字节中有8个比特,‘4’表示4个字节(因为CM3是32位机,机器字为4个字节)。
(A-0x20000000)表示一共用这么多个字节,(A-0x20000000)*8+n表示一共有这么多位,在别名区中,每个位占4个字节地址,故((A-0x20000000)*8+n)*4表示该位在别名区中的偏移字节地址。偏移地址加上基地址就是该比特在位带别名区中的地址。
即:位带别名区的字地址==(位带区目标位所在的字地址&0xF0000000)+0x02000000+ [(位带区目标位所在的字地址&0xFFFFF)<<5 ] + (位带区目标位编号<<2)。
10、基于arm的高效C编程
a、选择合适的变量类型。不一定非要选择小的操作类型,因为牵扯到字节对齐的问题,比方说面对32位的操作系统,可能更适合处理16半字或者32全字,此时用unsigned int可能就比char好。
b、可以用指针来代替数组下标,可以减少数组小标的运算过程。

你可能感兴趣的:(嵌入式计算机系统)