1、
ARM体系结构的存储器格式
+ s) D, u J- |" {
答:ARM体系结构的存储器格式有如下两种:
6 R. G# I) ?& n5 @* U( e
大端格式:字数据的高字节存储在低地址中,字数据的低字节存放在高地址中;
& [4 \+ _% | E* }1 v 小端格式:与大端存储格式相反,高地址存放数据的高字节,低地址存放数据的低字节。
6 I% w' a% e4 ~/ q9 B( F0 Z. o! C
0 @% o! W) k/ D @
2、ARM寄存器总结:
+ Z# j, h: ^+ n( n: B$ R, l
ARM有16个32位的寄存器(r0到r15)。
! d b7 q( ?3 @5 Sr15充当程序寄存器PC,r14(link register)存储子程序的返回地址,r13存储的是堆栈地址。
; E+ |- x' m$ B; J' \! _ARM有一个当前程序状态寄存器:CPSR。
& T8 `; u H. B7 z2 ]8 q: `0 I( `一些寄存器(r13,r14)在异常发生时会产生新的instances,比如IRQ处理器模式,这时处理器使用r13_irq和r14_irq
3 j( I% t% ]6 _( n0 |- w
ARM的子程序调用是很快的,因为子程序的返回地址不需要存放在堆栈中。
& V; `- t! W/ _7 f# K. K
9 _6 H z5 X6 X8 S3、存储器重新映射(Remap)的原因:
) V9 F* q1 m1 ?4 h( P 使Flash存储器中的FIQ处理程序不必考虑因为重新映射所导致的存储器边界问题;
$ K& c4 {, d/ u2 e5 J3 R# L3 Y: |4 r 用来处理代码空间中段边界仲裁的SRAM和Boot Block向量的使用大大减少;
7 V" h Q% n3 [5 T* c, c! i( E+ ^$ q& \
为超过单字转移指令范围的跳转提供空间来保存常量。
% ]( @) b W H( I; j ARM中的重映射是指在程序执行过程中通过写某个功能寄存器位操作达到重新分配其存储器地址空间的映射。一个典型的应用就是应用程序存储在Flash/ROM中,初始这些存储器地址是从0开始的,但这些存储器的读时间比SRAM/DRAM长,造成其内部执行频率不高,故一般在前面一段程序将代码搬移到SRAM/DRAM中去,然后重新映射存储器空间,将相应SRAM/DRAM映射到地址0,重新执行程序可达到高速运行的目的。
$ F/ ^( D# r/ L1 ]$ _7 [
2 v; Y6 Z0 u4 K3 f$ t3 n/ L3 I4、存储异常向量表中程序跳转使用LDR指令,而不使用B指令的原因:
" }5 U5 c) f6 b+ }7 S LDR指令可以全地址范围跳转,而B指令只能在前后32MB范围内跳转;
- n2 i8 |+ C3 _8 j" k# [: y4 P 芯片具有Remap功能。当向量表位于内部RAM或外部存储器中,用B指令不能跳转到正确的位置。
' L, r$ ?0 V& ^# k8 ?, F* Z- ^ g; o" H7 O, \/ v, n( K I
5、锁相环(PLL)注意要点:
p) b& R; G2 m6 B
PLL在芯片复位或进入掉电模式时被关闭并旁路,在掉电唤醒后不会自动恢复PLL的设定;
7 o4 z q- T( `
PLL只能通过软件使能;
. q: F6 \/ q. L, ?+ H0 O
PLL在激活后必须等待其锁定,然后才能连接;
& O8 G! n8 i) f6 z' ~* C PLL如果设置不当将会导致芯片的错误操作。
) o: h# A3 t( N
/ D R. L0 A- y( c6、ARM7与ARM9的区别:
/ `" t8 X) r. _
ARM7内核是0.9MIPS/MHz的三级流水线和冯&S226;诺伊曼结构;ARM9内核是五级流水线,提供1.1MIPS/MHz的哈佛结构。
. {: U2 _7 F7 V( J, i ARM7没有MMU,ARM720T是MMU的;ARM9是有MMU的,ARM940T只有Memory protection unit.不是一个完整的MMU。
- }0 G/ ^& b# H$ Q3 v ARM7TDMI提供了非常好的性能——功耗比。它包含了Thumb指令集快速乘法指令和ICE调试技术的内核。ARM9的时钟频率比ARM7更高,采用哈佛结构区分了数据总线和指令总线
信盈达嵌入式物联网智能硬件企鹅要妖气呜呜吧久零久要。
. l/ d( r* N) p( o( [& ^- _
& o% X# [) C _' j7、VIC的基本操作如下:
9 y1 f E6 D/ r
答:设置IRQ/FIQ中断,若是IRQ中断则可以设置为向量中断并分配中断优先级,否则为非向量IRQ。然后可以设置中断允许,以及向量中断对应地址或非向量中断默认地址。当有中断后,若是IRQ中断,则可以读取向量地址寄存器,然后跳转到相应的代码。当要退出中断时,对向量地址寄存器写0,通知VIC中断结束。当发生中断时,处理器将会切换处理器模式,同时相关的寄存器也将会映射。
% k" [- h8 @- \
% h9 i8 T7 C. S
8、使用外部中断注意
( G; t- D7 s5 T& D: a+ e
把某个引脚设置为外部中断功能后,该引脚为输入模式,由于没有内部上拉电阻,所以必须外接一个上拉电阻,确保引脚不被悬空;
: P* v9 W1 {& v) s% i! P. Z0 O 除了引脚连接模块的设置,还需要设置VIC模块,才能产生外部中断,否则外部中断只能反映在EXTINT寄存器中;
! s2 a5 H9 H5 w! g
要使器件进入掉电模式并通过外部中断唤醒,软件应该正确设置引脚的外部中断功能,再进入掉电模式。
8 J8 R0 Q# ~) c2 K
' a1 E P+ e7 K: W" n$ m0 V1 T9、UART0的基本操作方法
) _% W$ ^( k4 n" l7 g1 g 设置I/O连接到UART0;
5 {- S% P8 M/ z9 G/ n5 r
设置串口波特率(U0DLM、U0DLL);
) H9 l! L5 n$ ~4 a3 \* X 设置串口工作模式(U0LCR、U0FCR);
2 i2 W- q# i5 X8 S7 V 发送或接收数据(U0THR、U0RBR);
$ T7 \5 }" |: a8 T
检查串口状态字或等待串口中断(U0LSR)。
7 l; d2 } @3 l8 I. o
+ f7 F- I: x7 l8 _10、I2C的基本操作方法
5 Y+ f! E$ N+ Q: p( h* t* M& N答:I2C主机基本操作方法:
2 M$ p3 V4 J' [" {3 y
设置I2C管脚连接;
+ B8 J, I( G9 H, {8 S. C 设置I2C时钟速率(I2SCLH、I2SCLL);
4 y; P. l7 g' A- e1 [6 Z7 ?4 C 设置为主机,并发送起始信号(I2CONSET的I2EN、STA位为1,AA位为0);
2 ]# w8 c6 Y1 y9 x/ q
发送从机地址(I2DAT),控制I2CONSET发送;
B, f0 Q* z9 J8 Y0 P+ L% B- J# E7 ?4 A
判断总线状态(I2STAT),进行数据传输控制;
5 @$ p* ^! X% S& n. |
发送结束信号(I2CONSET)。
* s3 d: u. D" ]' I
I2C从机基本操作方法:
- E5 b9 G, Y, P
设置I2C管脚连接;
) M$ r4 @ `8 X, ^3 s" f! K, Z
设置自身的从机地址(I2ADR);
& @1 r' d% b- g- L$ o- }
使能I2C(I2CONSET的I2EN、AA位为1);
+ y U, C9 M4 u& e3 o( f3 n V0 o1 A/ c
判断SI位或等待I2C中断,等待主机操作;
1 z |0 R3 {9 s* [ 判断总线状态I2STAT,进行数据传输控制。
) g' \( A/ A3 J) u: ^( G5 `* n2 j" I; U) {: b' d ?
11、 PWM基本操作方法:
. a6 c4 t1 |1 `4 k/ k* T
连接PWM功能管脚输出,即设置PINSEL0、PINSEL1;
9 m& K2 N: u( ^; r2 ^8 ^+ ^
设置PWM定时器的时钟分频值(PWMPR),得到所要的定时器时钟;
+ b. `: \) a0 [. I$ l
设置比较匹配控制(PWMMCR),并设置相应比较值(PWMMRx);
7 k) s, t' u$ K% R% `1 E' n 设置PWM输出方式并允许PWM输出(PWMPCR)及锁存使能控制(PWMLER);
/ P9 j" O- p, R2 A% [, q( m% x
设置PWMTCR,启动定时器,使能PWM;
& s! q: q# n3 ]7 W 运行过程中要更改比较值时,更改之后要设置锁存使能。
0 a9 D8 a/ j/ Q. x
使用双边沿PWM输出时,建议使用PWM2、PWM4、PWM6;使用单边PWM输出时,在PWM周期开始时为高电平,匹配后为低电平,使用PWMMR0作为PWM周期控制,PWMMRx作为占空比控制。