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}mrsr0,cpsrorrr0,r0,#0xC0msrcpsr_cxsf,r0ldmiasp
,{r0}}上面这段程序是通过设置CPSR的第6,7位来实现的,因为第6,7位是设置为1时,就不再响应中断
voidUnLock(void){stmdbsp
,{r0}mrsr0,cpsrbicr0,r0,#0xC0msrcpsr_cxsf,r0ldmiasp
,{r0}}上面是重新开中断的命令,同样是设置CPSR的第6,7位,但它的值是0,就可接收中断了
如果在多个任务之间进行共享数据,一般是需要使用关中断和开中断实现数据同步的,其实中这种关中断和