原创 Arm ABC

2008-3-26 19:00 2754 10 10 分类: MCU/ 嵌入式

寄存器和工作模式:


7种工作模式:

fiq/irq/abt/und/sys/usr/svc。通过"MSR
cpsr_c,#0xdx"
切换。上电时进入svc模式。


svc
usr的区别是:svc可以通过"MSR cpsr_c,#0xdx"自由切换到其它任何模式,但是usr不可以。

各模式下有自己的堆栈。要在程序启动后依次进入各个模式分别设置自己的堆栈,最后进入
usr模式。


好多个寄存器:

r0 - r7 (a1 - a4 / v1 - v4)r15(pc)
在所有模式下都可见。


r8(v5),r9(sb,v6),r10(sl,v7),r11(fp,v8),r12(ip) fiq
模式下有一组独立的映射。


r13(sp)/R14(lr)
usrsys模式下用同一组映射,其它模式下各有自己的映射。


cpsr
在所有模式下可见。


spsr
usrsys模式下没有映射。


cpsr是一个最特殊的寄存器,结构如下:


3130292827~876543210
NZCV保留IFTM4M3M2M1M0

其中,N/Z/C/V分别为负//进位/溢出的标志位。在所有模式下都可以进行读操作。

I/F为中断/快中断禁止位,M4~M0是工作模式控制位,它们在USR模式下都不可操作。

TThum/ARM模式位,在所有模式下不可直接操作,否则会天下大乱,预取址错误中断可以捕获这种乱局。只能用BX指令进行Thum/ARM的状态切换。

总之,
USR模式很不方便。在该模式下只可以通过软中断控制I/F位。cpsr只能够用MSR/MRS指令来操作。


各工作模式下的spsr:
在由突发事件引起的模式切换发生时,新模式的spsr自动保存cpsr的值,以备该模式退出时还原cpsr。在程序的控制下进入某模式时,cpsr不会自动保存到相应的spsr


Prefetch AbortData
Abort
模式:

Prefetch Abort通常会发生在自修改指令之后。而Data
Abort
发生于向无效内存中取操作数时,通常是数据指针越过边界了。如果在scatter文件中不指定边界,若编译时内存分配超过了实际物理内存,一定会有Data
Abort
Prefetch
Abort
发生。


对特殊功能寄存器的操作:

通常都有两个寄存器操作同一个特殊功能。一个是负责置位,另一个是负责清除。如
VICIntEnableVICIntEnClr,
IOxSET
IOxCLR等。这样就使得单独操作某一位或某几位变得非常容易,如:IO0SET
= 0x00001100
IO0CLR
= 0x00000011
等,只变动特定的位,而不影响其他位。当然也可以用IO0PIN
= 0x00001100
直接设置所有的位。




存储器映射:


0-1G(0x0000,0000 - 0x3fff,ffff):
片内Flash.

1-2G(0x4000,0000 - 0x7fff,ffff):
片内RAM.

2-3.5G(0x8000,0000 - 0xbfff,ffff - 0xdfff,ffff):
片外存储器。


3.5G - 3.75G(0xe000,0000 - 0xefff,ffff): VPB
外设。


3.75G - 4G(0xf000,0000 - 0xffff,ffff): AHB
外设。


虽然ARM7的寻址空间为4G,但是LPC2200系列只提供A0~A23总共16M的地址。片选信号CS0 - CS3A24A25的译码输出,将片外存储区0x8000,0000 -
0x83ff,ffff
划分为bank0 - bank3,16M*4=64M.
4bank可以被分别配置为8/16/32位总线宽度。复位时,bank0的总线宽度由Boot1:0引脚决定,
bank1
32位,bank216位,bank38位。



字节定位信号
(BLS0 - BLS3)协调总线宽度和外存芯片数据线宽度。

Memory字节宽度器件(如62256)或者未按照字节区分的多字节器件组成时,应将RBLE设置为"0"。此时,读访问时EMCBLS0~BLS3拉高。

Memory含有字节选择输入的16位或32位器件组成时,应将RBLE设置为"1"。此时,读访问时EMCBLS0~BLS3拉低。

所以,当
Memory62256组成时,由于不需要片内字节选择输入,故令RBLE
= '0'
,则BLS0~BLS3只会与nWR同步,可以代替nWR使用。

但是,当
MemoryIS61LV25616AL组成时,由于该芯片有"nLB""nUB"控制低/8位的输入,故令RBLE
= '1'
,则BLS0~BLS3nRDnWR都会同步,此时,不可以使用BLS0~BLS3代替nWR信号。


地址数据总线:D0 - D31, A0 - A23, OE, WE, CS0 -
CS3, BLS0 - BLS3


启动后由
P2.7/P2.6控制引导方式,然后由程序设置MEMMAP决定中断向量的映射。


BCFG0 - BCFG3
控制读写延时和总线宽度。注意复位后的默认值。


PINSEL2
控制引脚功能。


Boot Block

LPC2114/2214
BootBlock被固化在最高的Flash块中,运行时被映射到0x7FFF,E000
- 0x7FFFF,FFFF
的区域。而LPC2210没有片内Flash,但它有8K片内ROM存储了BootBlock,也被映射到0x7FFF,E000处。




VPB只是ARM内部使用的总线,它通过桥与AHB总线连接,对用户透明。所以,不必考虑它的存在,只要知道0xe000
- 0xffff,ffff
是外设控制器的地址就可以了。




PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
我要评论
0
10
关闭 站长推荐上一条 /3 下一条