找回密码
 注册
关于网站域名变更的通知
查看: 266|回复: 1
打印 上一主题 下一主题

ARM架构基础知识小结

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2020-9-10 14:26 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
单片机转到ARM,主要需要学习ARM的架构,ARM相比单片机多了一些外设和总线。在仅仅是裸奔的情况下,如果熟悉了ARM架构,那么可以认为使用任何ARM架构的芯片和用单片机将没有区别。) U0 H3 Y6 k5 p$ B0 `3 f- a2 K3 W( H  Q
! D2 \6 ?% `/ l9 }8 P+ p
ARM架构之所以更复杂,当然是为了跑更快以及更好地支持片上系统,所以在某种程度上来说对片上系统不是很了解的话那对于ARM架构的理解也不会那么深。
" C& T" f' D+ |2 sARM架构基础知识小结
5 c' N. g' w! I/ q0 h& I2 l5 b( A
" t4 R* ~' \) \" Q* y8 \( H通用寄存器& H; B( E9 I/ W" N. D  L

: N6 v1 w$ x! d8 J. ]4 s+ H& iR13通常被用作栈指针,进入异常模式时,可以将需要使用的寄存器保存在R13所指的栈中;当退出异常程序时,将保存在R13所指的栈中的寄存器值弹出。1 o# F8 I) A! l+ \
  R14又被称为连接寄存器(LinkRegister,LR),即PC的返回值。  R15又被记作PC。ARM指令是字对齐的,PC的值的第0位和第1位总为0。也就是说是32位对齐。
* Y9 f7 M+ s3 Q4 i1 G+ a+ |1 `7 W* Q  F  就Cortex-M3来说,拥有R0-R15的寄存器组。其中R13作为堆栈指针SP。SP有两个,分别为R13(MSP)和R13(PSP)即主堆栈指针(MSP)和进程堆栈指针(PSP),但在同一时刻只能有一个可以看到,这也就是所谓的“banked”寄存器。这些寄存器都是32位的。  
; L) K2 j; Q4 Q% o2 I& jARM的各个模式- x2 T1 x  b4 r- X( ^) p

6 `$ _1 n  Z1 c% l4 WARM有以下7种模式:5 B4 k+ S# M6 }2 M
用户模式(User,usr) :正常程序执行的模式; z" v; Y/ `, T8 X7 X
快速中断模式(FIQ,fiq) :用于高速数据传输和通道处理
8 S/ v. F. ]3 N7 B, _: `外部中断模式(IRQ,irq) :用于通常的中断处理
% S, x, F0 n; e特权模式(Supervisor,svc) :供操作系统使用的一种保护模式
9 L% u5 A3 p7 e. h- Y% U5 v# `数据访问中止模式(Abort,abt) :用于虚拟存储及存储保护, n: d/ n+ d7 b" S/ o
未定义指令中止模式(Undefined,und):用于支持通过软件以及硬件的协处理器
+ I, J# \5 x* [! i4 }/ b1 c0 ^0 ?系统模式(System,sys) :用于运行特权级的操作系统任务
( ^3 P, k/ c2 @2 I) l  其中除了用户模式之外都称之为特权模式(privileged modes),而在privileged modes中除了系统模式其它都称为异常模式,即exception mode,意思是“这模式什么时候会发生不好说……”,比如说来了个外部中断也会进入异常模式,但是此时系统是运行完好的。  其中SVC用于在系统刚启动的启动文件BOOT程序中,跳转到kernel之前必须为SVC,SVC具有最高权限,可以对任何寄存器进行操作。在裸机程序中我们有时候会一直处于SVC模式下。  关于什么时候会进入用户模式或者系统模式,比如进入linux kernel之后会设置成sys模式,比如任务调度等等都会在sys模式中,而执行用户编写的应用程序时,系统是处于usr模式中。以上需要在linux中找出证据验证。  其中FIQ、IRQ为中断模式,有中断发生时会进入FIQ模式或者IRQ模式,至于到底是进入哪个模式是由开发者设定的。理论上FIQ模式的响应速度比IRQ模式要快。  其中abt模式通常发生于在访问地址没有对齐时的情况,此时会跳转到abt所属的中断向量地址中去。und模式应该是取到指令之后发现指令不能用,此时会跳转到abt所属的中断向量地址中去。  
4 X# m' F1 t9 Z1 k1 O" H& S1 X% W启动文件6 x2 o" e. c3 ]/ W6 T+ Q" k

  Q+ I8 G, s! x2 F' _5 ]这一部分只要了解一下协处理器CP15的相关作用以及ARM或者THUMB汇编再看一下网上的例程以及解释应该不难理解。+ N+ X3 T/ D( F6 E
  在启动文件中我们可以做任何事情,但是通常我们可以做这些:改变程序大小端排序,关闭看门狗,屏蔽中断,设置各个时钟,设置从SLEEP或者IDLE启动时的程序,初始化SDRAM,设置各模式指向的堆栈,设置好中断向量表,判断是从NOR还是NAND FLASH启动,将文件拷到SDRAM中,运行Main。  以上也说明了为什么需要一个汇编写的启动文件,设置各个模式下的SP指针以及初始化中断向量的跳转(ARM的中断较多设置也较灵活)也只有汇编干比较合适了。甚至在SOC(片上系统)中每个任务都有自己的堆栈,所以改变堆栈指针的那一部分程序也是放在汇编里做的。总之了解启动文件是一个非常好的切入点。  . |' b9 T: a* W( h( V
MMU$ n8 D- i: F  N" u$ w

& l# Y2 C# {' }; ?: N" K; ~2 i1 v9 s关于MMU,因为多种存储设备的物理地址不同以及不连贯性,将其地址安放在合理的连续虚拟地址上是很必要的,所以MMU出现了。MMU即将不同的地址放在合适的虚拟地址中,以便调度。比如要跑LINUX必须要有MMU的支持才行。
' y9 _5 d) N* B8 [8 u  e9 }  
$ ~7 ^# U$ N6 K6 ?# @ARM920T的三种类型地址
- H) c- M' h$ X0 G* s8 r4 \4 d! _" c
虚拟地址(VA)、变换后的虚拟地址(MVA)、物理地址(PA)& a4 ^3 @/ L) d
以下是一个当一个指令被请求时地址所做操作的例子:, G- b( z1 F. h
1. 指令VA(IVA)被ARM920T发出. u% \! }% G" A' u8 |: W0 L
2. 它被ProcID(当前进程所在的进程空间块的编号)转换成指令MVA(IMVA),指令CACHE(ICACHE)和MMU看到的就是IMVA。$ I- s: t' T# q, g% P
3. 如果在IMMU上的保护模块确认IMVA不会被中断,并且IMVA标签也在ICACHE中,指令数据会读出并返回到ARM920T内核中。0 }& f$ k" w* n: ]( w( W% c
4. 如果IMVA tag并不在ICACHE中,那么IMMU会产生出一个指令PA(IPA)。地址会给AMBA总线接口以获取外部数据。; J. O! q( f) O$ R3 N- j

$ d7 D& f9 `: n$ N( C  
" z9 x( J3 [" k/ p7 ]. h如何使用FCSE PID
; |& S/ D2 v0 C  ]- o
) \; T" C' o9 }2 W, z( z; Y920T内核发出的地址都是0-32MB的范围,4GB的逆序空间被分成了1238个进程空间块,每个进程空间块大小为32MB。每个进程空间块中可以包含一个进程。系统128个进程空间块的编号0-127,编号为I的进程空间块中的进程实际使用的虚拟地址空间为(I*0x02000000)到(I*0x02000000+0x01FFFFFF)。
# L5 H1 z( k. G: [, Z  所以VA通常高7位都为0时 MVA = VA | (PID << 25)。  当VA高7位不为0时 MVA = VA,这种VA是本进程用于访问别的进程中的数据和指令的虚拟地址,注意这时被访问的进程标识符不能为0。  
, N% U7 p. b7 [9 p( \' p* ^注意:当FCSE_PID为0时,即当前复位,则当前920T和CACHES及MMU之间是平面映射的关系(很巧妙:))。( |- |$ J* Y6 K! L6 n
' B3 b6 f: \$ c9 o! u; u

. w* Y0 D" q7 E- ~  _TLB是什么" d+ M" I8 |6 }9 B: T7 a
( v4 ]# w3 X$ r
TLB即translate look-aside buffer,快表就是存储几个常用的页表,以提高系统运行的速度。在更新页表之前要使其无效,其操作的寄存器为R8,R8为只写寄存器,如果读它则会造成不可估计的后果。- w8 Y4 _7 c& v4 J
0 X( R) e/ Q2 E( u+ y
  
. k. R; [- U' }: P) o5 r" [AP赋值表
( j% w" L) Y( i! Y
, m' S) H% m: m  D1 |3 k9 dDOMAIN的赋值则是在C3中的,32bit共有16个域,每个域分两个bit,这两个bit控制当前域的权限。而以上四个bit是为了选择0-15个域的其中一个。* F  r6 T( X; m4 o/ `; h" ~- y; T
: O) M) j" f% }( i
  3 {% c! v+ `) @, C0 q2 p
关于C、B赋值
" W' u' a% D3 s3 S# a; f
2 B, v" S# o5 i: M8 ~' P. F9 G以下有关于两种写缓存,写通以及写回。写回法是指CPU在执行写操作时,被写的数据只写入cache,不写入主存,仅当需要替换时,才把已经修改的cache块写回到主存中。写通法是指CPU在执行写操作时,必须把数据同时写入cache和主存。
$ j& O7 i- v% N/ y8 m
5 X+ i" Z6 g+ D9 m! f" G, m; ^. [+ `: {( K) T8 Y
4 J* g5 X* @0 z  X! \) e1 f
AHB/APB是什么0 l+ R6 n# |# D, m. k. A. b7 u+ a
$ |; L7 ]+ a/ @* q. d" W
AHB(AdvancedHigh peRFormance Bus),主要用于系统高性能、高时速速率模块间通信。APB(AdvancedPeripheral Bus),主要用于慢速片上外设与ARM核的通讯。( s& u( m0 S& \- _+ h
  AHB私有外设总线,只用于CM3内部的AHB外设,它们是:NVIC,FPB,,DWT和ITM。APB私有外设总线,既用于CM3内部的APB设备,也用于外部设备(这里的“外部”是对内核而言)。CM3允许器件制造商再添加一些片上APB外设到APB私有总线上,它们通过APB接口来访问。  
% i6 i3 h  N6 g+ `) `) V四种耗电模式
4 N1 D& f  a, }5 D9 S3 g3 U. M: N$ `
NORMAL、SLOW、IDLE、SLEEP4 S9 B6 L7 X' J# K* X" q5 I
  先配置主PLL MPLL给CPU用。在上电复位的时候PLL是不稳定的,所以在PLLCON在被软件配置之前Fin直接是跳过MPll给FCLK,所以不配置PLLCON也是可以正常工作。即使工作在正常状态下,也可以对MPLLCON进行配置,配置之后等待PLL Lock-time过后内部各模块的CLK才可以被正常供应。
' u$ ^5 h$ S3 m: A9 [' _$ u5 {- G- j5 A/ `2 C4 [
  • TA的每日心情
    开心
    2023-1-3 15:10
  • 签到天数: 2 天

    [LV.1]初来乍到

    2#
    发表于 2020-9-10 15:36 | 只看该作者
    TLB即translate look-aside buffer,快表就是存储几个常用的页表,以提高系统运行的速度
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    关闭

    推荐内容上一条 /1 下一条

    EDA365公众号

    关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

    GMT+8, 2025-11-25 01:42 , Processed in 0.156250 second(s), 23 queries , Gzip On.

    深圳市墨知创新科技有限公司

    地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

    快速回复 返回顶部 返回列表