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 的关中断和开中断实现。void Lock(void){ stmdb sp!, {r0} mrs r0, cpsr orr r0,r0,#0xC0 msr cpsr_cxsf,r0 ldmia sp!,{r0}}上面这段程序是通过设置 CPSR 的第 6,7 位来实现的,因为第 6,7 位是设置为 1 时,就不再响应中断。void UnLock(void){ stmdb sp!, {r0} mrs r0, cpsr bic r0,r0,#0xC0 msr cpsr_cxsf,r0 ldmia sp!,{r0}}上面是重新开中断的命令,同样是设置 CPSR 的第 6,7 位,但它的值是 0,就可接收中断了。假如在多个任务之间进行共享数据,一般是需要使用关中断和开中断实现数据同步的,其实中这种关中断和开中断,就是进入临界区和退出临界区。假如是像 PC 机那样有多个 CPU 的话,关中断并不能防止这种情况。系统的在应用编程(IAP)以及在系统编程功能(ISP)等。中断向量表ARM 要求中断向量表必须放置在从 0 地址开始,连续 8X4 字节的空间内。每当一个中断发生以后,ARM 处理器便强制把 PC 指针置为向量表中对应中断类型的地址值。因为每个中断只占据向量表中 1 个字的存储空间,只能放置一条ARM 指令,使程序跳转到存储器的其他地方,再执行中断处理。中断向量表的程序实现通常如下表示:AREA Boot ,CODE, READONLYENT...