ARM处理器系统初始化过程.pdfVIP

  • 0
  • 0
  • 约5.84万字
  • 约 60页
  • 2026-02-12 发布于河北
  • 举报

ARM处理器系统初始化过程

1禁止MMU,关闭中断,禁止cache;

2根据硬件设配制好处理器时钟、DRAM时钟、定时器时钟;

3根据系统中所用的flash和DRAM芯片容量和电气参数设置它们的起始地址、

容量、刷新频率等;

4将固化在flash芯片中的程序搬移到DRAM内存中;

5使能cache,使能MMU,跳转到DRAM内存中运行继续初始化,包括根据具体应

用以及系统中的硬件配置初始化各个功能模块、安装好异常中断处理程序、

使能中断等;

6进行操作系统相关初始化;

禁止MMU,关闭中断,禁止cache

通过写系统控制协处理器的寄存器1的第0位可以允许和禁止MMU。在复位后这位

是0,MMU被禁止。

关闭中断与打开中断

中断是一种高效的对话机制,但有时并不想程序运行的过程中中断运行,比如正在打印东西

,但程序突然中断了,又让另外一个程序输出打印内容,这样在打卬机上就会乱得不得了,

同时有两份以上的文件交错地打印在一张纸上。像不可剥夺的资源,就一定要关闭中断,让

它占有这个资源。在ARM里,没有像x86那样有清除中断指令CLI。那么在ARM里是怎么样实现

关中断和开中断的呢?下面就来看看ARM的关中断和开中断实现。

voidLock(void)

stmdbsp!,{r0}

mrsrO,cpsr

orrrO,rO,0xC0

msrcpsr_cxsf,rO

Idmiasp!,{rO;

)

上面这段程序是通过设置CPSR的第6,7位来实现的,因为第6,7位是设置为1时,就不再响

中断。

voidUnLock(void)

(

stmdbsp!»{rO}

mrsrO,cpsr

bicrO,rO,MxCO

msrcpsrcxsf,rO

Idmiasp!»{rO}

}

上面是重新开中断的命令,同样是设置CPSR的第6,7位,但它的值是0,就可接收中断了。

如果在多个任务之间进行共享数据,一般是需要使用关中断和开中断实现数据同步的,其实

中这种关中断和开中断,就是进入临界区和退出临界区。

如果是像PC机那样有多个CPU的话,关中断并不能防止这种情况。

系统的在应用编程(TAP)以及在系统编程功能(TSP)等。

中断向量表

ARM要求中断向量表必须放置在从0地址开始,连续8X4字节的空间。

每当一个中断发生以后,ARM处理器便强制把PC指针置为向量表中对应中断类

型的地址值。因为每个中断只占据向量表中1个字的存储空间,只能放置一条

ARM指令,使程序跳转到存储器的其他地方,再执行中断处理。

中断向量表的程序实现通常如下表示:

AREABoot,CODE,READONLY

ENTRY

BResetHandler

BUndefHandler

BSWTHandler

BPreAbortHandler

BDataAbortHandler

B

BIRQHandler

BFIQHandler

其中关键字ENTRY是指定编译器保留这段代码,因为编译器可能会认为这是一段

亢余代码而加以优化。链接的时候要确保这段代码被链接在0地址处,并且作为

整个程序的入口。

MEMMAP=O:开机默认值,Bool装载模式——向量表(00x0000003c)映射的是BootBlock

中的0x7FFFE000-0x7FFFF03c中的值;芯片复位时,启动boot装载程序,boot装载程序检查P0.14

的状态和用户的异常向量,判断是进入ISP状态还是启却用户程序,若启动用户程序,则自动

设置MEMMAP=1(片内flash启动)或3(片外程序存情器启动)。

很奇怪的,我在实验中,当使用无片内flash的LPC2210时即使设置P0.14为高低都没关系,芯

片会跳过继而执行片外flash中的代码.

MEMMAP=1:中断向量表就在片内flash中,地址就是0x0000000(H)x0000003c,相当于

没有映射;

MEMMAP=2:最为主要的设置,即是重映射的关键之所在,当设置MEMMAP=2

文档评论(0)

1亿VIP精品文档

相关文档