发新话题
打印

[ARM] ARM学习笔记-基础概念

本主题由 5life 于 2008-9-9 02:18 PM 移动

ARM学习笔记-基础概念

学习ARM也有一定时间了,想想还是记点东西,要不以后就忘了.这是我的第一片,简简单单.但比较基础.# ~, m0 y# \4 J0 ^( r% m

* I0 g3 r3 ]0 N9 Y1.    ARM中一些常见英文缩写解释' Z/ S* y) ?2 h
MSB:最高有效位;
. W' J3 K. M; N4 {LSB:最低有效位;
  n- R. b# g! q! e4 vAHB:先进的高性能总线;' Q3 ?- n2 d; F+ |/ N! e
VPB:连接片内外设功能的VLSI外设总线;% Z# R" P: R' f+ ?2 I
EMC:外部存储器控制器;
& C- _3 r8 Q. O4 g  w: Z1 GMAM:存储器加速模块;; j' D& j: g3 j4 y5 u8 S/ Q+ F4 Y
VIC:向量中断控制器;
! Q' {4 |1 o. f% s2 a1 @+ M) jSPI:全双工串行接口;9 ?* z) t7 F  n& [4 O2 N
CAN:控制器局域网,一种串行通讯协议;! i- j) |, P4 e
PWM:脉宽调制器;
% R% l+ i& f" K4 U( g# G2 X+ VETM:嵌入式跟踪宏;. o1 b+ O' A1 |0 ^
CPSR:当前程序状态寄存器;
0 V, k1 l! w4 S% OSPSR:程序保护状态寄存器;
0 f- i5 v2 @6 y0 ?: K- W9 K5 g' z4 g1 w( Q
2.    MAM 使用注意事项:
9 T! f6 @( G: `. R* }答:当改变 MAM 定时值时,必须先通过向 MAMCR 写入 0 来关闭 MAM,然后将新值写入 MAMTIM。最后,将需要的操作模式的对应值写入MAMCR,再次打开MAM。 + G, q. T% S. @' c  z
对于低于 20MHz 的系统时钟,MAMTIM 设定为 001。对于 20MHz 到 40MHz 之间的系统时钟,建议将Flash访问时间设定为2cclk,而在高于40MHz的系统时钟下,建议使用3cclk。
0 @( o9 @, @% w4 S( ^$ O; ^5 e4 o9 A3 @" N& f0 t1 I
3.    VIC 使用注意事项% d& q1 ?( R3 Z6 Y* F  a
答:如果在片内RAM当中运行代码并且应用程序需要调用中断,那么必须将中断向量重新映射到Flash地址0x0。这样做是因为所有的异常向量都位于地址0x0及以上。通过将寄存器MEMMAP(位于系统控制模块当中)配置为用户RAM模式来实现这一点。用户代码被连接以便使中断向量表装载到0x4000 0000。5 r2 {: R$ ^# a$ h! A7 ?. N
' Y( U" Z: p4 t4 a
4.    ARM启动代码设计* ?% [& ?( P+ v' o/ v
答:ARM启动代码直接面对处理器内核和硬件控制器进行编程,一般使用汇编语言。启动代码一般包括:' l+ }  H, E6 u  n
    中断向量表
3 Y  Q( a: b. s" d$ N4 \$ ~    初始化存储器系统
* W# h) f1 D. W: A% l% n    初始化堆栈初始化有特殊要求的端口、设备
3 W  b; V' h) y. u3 L2 c: s8 r" e    初始化用户程序执行环境
% \* O" T9 \- P# i$ K5 L    改变处理器模式3 |" P4 i* z" N* l% t% q+ t, y
    呼叫主应用程序
  P6 A; n( m" k* s$ ^3 w5 E( f8 L" ~5 K4 Y) A% N
5.    IRQ 和 FIQ 之间的区别0 H, o) B$ b3 @
答:IRQ和FIQ是ARM处理器的两种编程模式。IRQ是指中断模式,FIR是指快速中断模式。对于 FIQ 你必须尽快处理你的事情并离开这个模式。IRQ 可以被 FIQ 所中断,但 IRQ 不能中断 FIQ。为了使 FIQ 更快,所以这种模式有更多的影子寄存器。FIQ 不能调用 SWI(软件中断)。FIQ 还必须禁用中断。如果一个 FIQ 例程必须重新启用中断,则它太慢了,并应该是 IRQ 而不是 FIQ。
. t) Q, |1 l* l" J. l
( }- p$ |$ `) ]2 V! A6 L6.    ARM处理器对异常中断的响应过程& S/ w: _& }: D# [8 U
答:ARM处理器对异常中断的响应过程如下所述:8 K# E+ @! G  o1 A! c* o! q8 [
    保存处理器当前状态、中断屏蔽位以及各条件标志位;9 r0 l% r# Y/ C. s1 v
    设置当前程序状态寄存器CPSR中的相应位;
/ n1 w( @4 f% c" O5 F; l2 }/ L2 q    将寄存器lr_mode设置成返回地址;
* \$ S$ R. _# c5 k2 p$ z4 r: V& ]    将程序计数器值PC,设置成该异常中断的中断向量地址,跳转到相应异常中断处执行。8 R6 z1 F% h3 u3 n/ H0 u

. T; ?) L2 d' Q1 X% ~" O, @. A7.    ARM指令与Thumb指令的区别
& a# V, i1 i; _答:在ARM体系结构中,ARM指令集中的指令是32位的指令,其执行效率很高。对于存储系统数据总线为16位的应用系统,ARM体系提供了Thumb指令集。Thumb指令集是对ARM指令集的一个子集重新编码得到的,指令长度为16位。通常在处理器执行ARM程序时,称处理器处于ARM状态;当处理器执行Thumb程序时,称处理器处于Thumb状态。Thumb指令集并没有改变ARM体系地层的程序设计模型,只是在该模型上加上了一些限制条件。Thumb指令集中的数据处理指令的操作数仍然为32位,指令寻址地址也是32位的。
* c; `' V6 z9 Y4 A3 \9 d: h
- ~6 ^, x& b' ]) s8.    什么是ATPCS?
2 n3 F( e5 e1 Z6 y  X. z5 V答:为了使单独编译的C语言程序和汇编程序之间能够相互调用,必须为子程序之间的调用规定一定的规则。ATPCS就是ARM程序和Thumb程序中子程序调用的基本规则。这些规则包括寄存器使用规则,数据栈的使用规则,参数的传递规则等。, \6 k& W5 E0 v% ^
& Z% M) W) u6 W
9.    ARM程序和Thumb程序混合使用的场合) C& q) e( Q; K
答:通常,Thumb程序比ARM程序更加紧凑,而且对于内存为8位或16位的系统,使用Thumb程序效率更高。但是,在下面一些场合下,程序必须运行在ARM状态,这时就需要混合使用ARM和Thumb程序。
2 ?6 N. X% \0 l3 v    强调速度的场合,应该使用ARM程序;
, @: O4 t: v4 N- @* e* U    有些功能只能由ARM程序完成。如:使用或者禁止异常中断;
) C$ W+ B% s) p0 q    当处理器进入异常中断处理程序时,程序状态切换到ARM状态,即在异常中断处理程序入口的一些指令是ARM指令,然后根据需要程序可以切换到Thumb状态,在异常中断程序返回前,程序再切换到ARM状态。9 ~" \1 b- l  V0 m2 V3 O* W
    ARM处理器总是从ARM状态开始执行。因而,如果要在调试器中运行Thumb程序,必须为该Thumb程序添加一个ARM程序头,然后再切换到Thumb状态,执行Thumb程序。
% Z# k% O0 Y9 q" {+ L+ n1 Y0 w0 \7 w3 c) Q- Z
10.    ARM处理器运行模式+ O' q+ Q( W8 |7 g1 P
答:ARM微处理器支持7种运行模式,分别为:' h( f( M& n+ y7 l, j3 R
    用户模式(usr):ARM处理器正常的程序执行状态;
, R1 h* E; p3 h2 o    快速中断模式(fiq):用于高速数据传输或通道管理;
$ j. P$ U, w8 f    外部中断模式(irq):用于通用的中断处理;5 X5 o7 ?$ u6 M3 T/ L6 M; P
    管理模式(svc):操作系统使用的保护模式;
, [* X  W$ U- e6 D# `* X" v- {    数据访问终止模式(abt):当数据或指令预取终止时进入该模式,用于虚拟存储及存储保护;; G4 m3 ~  r8 j9 w; P
    系统模式(sys):运行具有特权的操作系统任务;
! h, |* m+ I/ B7 Q: i0 [    未定义指令中止模式(und):当未定义指令执行时进入该模式,可用于支持硬件协处理器的软件仿真。9 y+ j+ w+ S' M3 u0 w
0 d4 Z9 h" c2 ?1 L) q2 K. Q
11.    ARM体系结构所支持的异常类型# T; p1 R* v. C6 [& {" {. Q
答:ARM体系结构所支持的异常和具体含义如下(圈里面的数字表示优先级):% b: ~( b% ^1 P0 S/ s# b' h( h
    复位①:当处理器的复位电平有效时,产生复位异常,程序跳转到复位异常处执行(异常向量:0x0000,0000);
+ T; ?3 {, x4 Z4 v/ c8 \6 Y    未定义指令⑥:当ARM处理器或协处理器遇到不能处理的指令时,产生为定义异常。可使用该异常机制进行软件仿真(异常向量:0x0000,0004);
4 F, P. i' z3 t6 Z    软件中断⑥:有执行SWI指令产生,可用于用户模式下程序调用特权操作指令。可使用该异常机制实现系统功能调用(异常向量:0x0000,0008);
( v, `% I7 @* D! s    指令预取中止⑤:若处理器的预取指令的地址不存在,或该地址不允许当前指令访问,存储器会向处理器发出中止信号,当预取指令被执行时,才会产生指令预取中止异常(异常向量:0x0000,000C);' Q$ l- N" I2 f
    数据中止②:若处理器数据访问的指令的地址不存在,或该地址不允许当前指令访问,产生数据中止异常(异常向量:0x0000,0010);
3 o& _1 I) E! x) U    IRQ④(外部中断请求):当处理器的外部中断请求引脚有效,且CPSR中的I位为0时,产生IRQ异常。系统的外设可以该异常请求中断服务(异常向量:0x0000,0018);  s; j5 C! o) S8 {3 U/ e' h! m; u
    FIQ③(快速中断请求):当处理器的快速中断请求引脚有效,且CPSR中的F位为0时,产生FIQ异常(异常向量:0x0000,001C)。
4 R5 L/ d8 M- q* o说明:其中异常向量0x0000,0014为保留的异常向量。6 v- {) R: d# c: _9 W
# L9 P: j4 g9 O/ r1 z
12.    ARM体系结构的存储器格式
1 W2 o, Z; W2 ?! E# {答:ARM体系结构的存储器格式有如下两种:, m2 G1 \; y3 R. z. n- H( D
    大端格式:字数据的高字节存储在低地址中,字数据的低字节存放在高地址中;/ k  O! N( M1 F4 Z0 N" O
    小端格式:与大端存储格式相反,高地址存放数据的高字节,低地址存放数据的低字节。% h+ r3 @4 v9 G+ u

* d6 ^  [, V  ^13.    ARM寄存器总结:$ N/ ^' F0 X; {  P, \
    ARM有16个32位的寄存器(r0到r15)。- q/ H7 H! l; o! ^0 m$ w. _
    r15充当程序寄存器PC,r14(link register)存储子程序的返回地址,r13存储的是堆栈地址。6 q) D, j& D% s( {. s9 Z/ u
    ARM有一个当前程序状态寄存器:CPSR。
% k; I  p6 J$ c1 O% r; N' X& Q    一些寄存器(r13,r14)在异常发生时会产生新的instances,比如IRQ处理器模式,这时处理器使用r13_irq和r14_irq/ F7 u$ q" A5 m; x
    ARM的子程序调用是很快的,因为子程序的返回地址不需要存放在堆栈中。  s8 P9 h: w: W7 y, a  k2 U0 z+ I
5 ?6 c* a3 C5 ^, ^! D1 L
14.    存储器重新映射的原因:
+ W# @4 Z! A8 h    使Flash存储器中的FIQ处理程序不必考虑因为重新映射所导致的存储器边界问题;
! W6 X9 L+ Z! e5 Q    用来处理代码空间中段边界仲裁的SRAM和Boot Block向量的使用大大减少;) F; c1 G: |# S$ o9 A( }8 `
    为超过单字转移指令范围的跳转提供空间来保存常量。
  g, @7 z/ Z; _7 K* [2 y" ~1 ~1 w% w" a" O0 J& ]3 O3 d% H$ Z
15.    存储异常向量表中程序跳转使用LDR指令,而不使用B指令的原因:: c5 C/ f. j* F$ b# x5 `0 S
    LDR指令可以全地址范围跳转,而B指令只能在前后32MB范围内跳转;3 L7 Q* K( K3 X6 ]; c
    芯片具有Remap功能。当向量表位于内部RAM或外部存储器中,用B指令不能跳转到正确的位置。
* O& Z! F8 K: o0 A/ g
9 M. ]7 X( S7 x16.    锁相环(PLL)注意要点:. ~! W( y1 e% H# I' S. }
    PLL在芯片复位或进入掉电模式时被关闭并旁路,在掉电唤醒后不会自动恢复PLL的设定;9 c$ A0 V; z6 w9 Q9 [
    PLL只能通过软件使能;
) T. r  O5 C: {2 O! f4 e1 E+ {    PLL在激活后必须等待其锁定,然后才能连接;
- r8 l8 E  `" n    PLL如果设置不当将会导致芯片的错误操作。) W; v/ M' E  m9 e; ?. k9 W6 T
: k# {# _4 s9 [6 H. s; i
17.    ARM7与ARM9的区别:
1 b0 w1 G  `) U) I* }" ^    ARM7内核是0.9MIPS/MHz的三级流水线和冯"诺伊曼结构;ARM9内核是五级流水线,提供1.1MIPS/MHz的哈佛结构。/ Q- |, ^% o2 W7 r/ @! K
    ARM7没有MMU,ARM720T是MMU的;ARM9是有MMU的,ARM940T只有Memory protection unit.不是一个完整的MMU。
" q* S  C$ x, S' L' T    ARM7TDMI提供了非常好的性能——功耗比。它包含了Thumb指令集快速乘法指令和ICE调试技术的内核。ARM9的时钟频率比ARM7更高,采用哈佛结构区分了数据总线和指令总线。+ P: X) g, `# g( b* f9 {
2 F6 K: W; ^, p7 Y7 Y4 {8 a, r
18.    VIC的基本操作如下:
( o9 ?: e, t- D- ~8 I答:设置IRQ/FIQ中断,若是IRQ中断则可以设置为向量中断并分配中断优先级,否则为非向量IRQ。然后可以设置中断允许,以及向量中断对应地址或非向量中断默认地址。当有中断后,若是IRQ中断,则可以读取向量地址寄存器,然后跳转到相应的代码。当要退出中断时,对向量地址寄存器写0,通知VIC中断结束。当发生中断时,处理器将会切换处理器模式,同时相关的寄存器也将会映射。. p0 N% t0 g- }5 s0 N$ l1 u  d/ p
& a* V7 s0 l' I, t3 x! u0 h2 C
19.    使用外部中断注意% g: x' H) P" l, O
    把某个引脚设置为外部中断功能后,该引脚为输入模式,由于没有内部上拉电阻,所以必须外接一个上拉电阻,确保引脚不被悬空;' n9 O0 M& W% P& k! ]+ U$ B
    除了引脚连接模块的设置,还需要设置VIC模块,才能产生外部中断,否则外部中断只能反映在EXTINT寄存器中;- }2 \4 X9 D1 `2 c1 |) o7 W
    要使器件进入掉电模式并通过外部中断唤醒,软件应该正确设置引脚的外部中断功能,再进入掉电模式。3 H: D8 K1 |$ k: }" z- G( S- |: }
0 R1 X; r! m( k8 {* [
20.    UART0的基本操作方法- M9 A* U( P8 c" w& U7 {
    设置I/O连接到UART0;( U6 U. M. o* T6 v" k. B# l& g
    设置串口波特率(U0DLM、U0DLL);
. c$ `, D) T& y    设置串口工作模式(U0LCR、U0FCR);
4 r/ f, H( D$ N; {3 g' n; e    发送或接收数据(U0THR、U0RBR);$ `9 o' v7 e) a+ n# H0 h+ e$ m
    检查串口状态字或等待串口中断(U0LSR)。4 x1 }5 i& t/ A' p7 y

- ?5 t3 f$ t( |, q/ U# w0 L21.    I2C的基本操作方法9 M% d6 S4 Q1 u
答:I2C主机基本操作方法:
( M/ {$ e/ \- l& J    设置I2C管脚连接;
1 s5 x$ u% ~2 s  N, b    设置I2C时钟速率(I2SCLH、I2SCLL);+ t) ^  d) q; B4 `+ S
    设置为主机,并发送起始信号(I2CONSET的I2EN、STA位为1,AA位为0);& C3 M3 S1 u; w! \; U8 V
    发送从机地址(I2DAT),控制I2CONSET发送;+ E' i& G$ W2 S; G. y0 v
    判断总线状态(I2STAT),进行数据传输控制;; I( T; C$ i: y* P$ U
    发送结束信号(I2CONSET)。
& X+ ?/ T+ d. n* `( JI2C从机基本操作方法:- X- g0 C# L8 ]; n. J
    设置I2C管脚连接;7 ~8 e) x: i* \8 g5 b  D) P
    设置自身的从机地址(I2ADR);
5 _( x4 G$ f% o. z( Q    使能I2C(I2CONSET的I2EN、AA位为1);
' y- n/ d- g) P7 P( D0 B1 I    判断SI位或等待I2C中断,等待主机操作;; j, u' |: r; ^4 q% r7 \
    判断总线状态I2STAT,进行数据传输控制。
2 h/ @+ ]) z/ k6 S7 X. _, x1 j# X( J3 P, m" e7 ]. v1 Y0 B5 {
22.    PWM基本操作方法:
$ A( i6 t6 ?1 b/ P- [, ]/ ]    连接PWM功能管脚输出,即设置PINSEL0、PINSEL1;5 R6 {7 L+ }# y
    设置PWM定时器的时钟分频值(PWMPR),得到所要的定时器时钟;0 P1 @) `" ~' n
    设置比较匹配控制(PWMMCR),并设置相应比较值(PWMMRx);  F6 R" o+ R& }/ q
    设置PWM输出方式并允许PWM输出(PWMPCR)及锁存使能控制(PWMLER);
% g1 B, C$ P6 g" h* V+ ]5 E2 c5 L( ^    设置PWMTCR,启动定时器,使能PWM;. p3 t) B7 `; ^8 n9 M* G  ?* t+ P# v
    运行过程中要更改比较值时,更改之后要设置锁存使能。3 Y% w8 K9 U' l# z9 q- b
使用双边沿PWM输出时,建议使用PWM2、PWM4、PWM6;使用单边PWM输出时,在PWM周期开始时为高电平,匹配后为低电平,使用PWMMR0作为PWM周期控制,PWMMRx作为占空比控制
With your idea, Carry out together.

TOP

很好的学习方法,共勉!!

TOP

发新话题