ARM处理器系统初始化过程

本文详细阐述了ARM处理器的系统初始化过程,包括禁止MMU、关闭中断、禁止cache,配置时钟、设置存储器参数,以及如何将程序从flash迁移至DRAM。在初始化过程中,涉及了中断处理、权限模式切换、存储器映射和中断向量表的设置。此外,文章还讨论了ARM处理器的异常处理机制、工作模式和寄存器管理。
摘要由CSDN通过智能技术生成

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, READONLY
ENTRY
B ResetHandler
B UndefHandler
B SWIHandler
B PreAbortHandler
B DataAbortHandler
B
B IRQHandler
B FIQHandler
其中关键字ENTRY是指定编译器保留这段代码,因为编译器可能会认为这是一段亢余代码而加以优化。链接的时候要确保这段代码被链接在0地址处,并且作为整个程序的入口。

 

 Q:为什么在中断向量表中不直接LDR PC,"异常地址".而是使用一个标号,然有再在后面使用DCD定义这个标号
A:因为LDR指令只能跳到当前PC 4kB范围内,而B指令能跳转到32MB范围,而现在这样在LDR PC, "xxxx"这条指令不远处用"xxxx"DCD定义一个字,而这个字里面存放最终异常服务程序的地址,这样可以实现4GB全范围跳转.
Q: LDR 不是可以全空间跳转的吗 《ARM微控制器基础与实战》程序清单5.3.
A: LDR伪指令通过设置指令缓冲池才能实现全范围跳转,而LDR指令则只能实现4KB范围跳转.

 

MEMMAP=0:开机默认值,Boot装载模式----向量表(0x00000000-0x0000003c)映射的是BootBlock中的0x7FFFE000-0x7FFFF03c中的值;芯片复位时,启动boot装载程序,boot装载程序检查P0.14口的状态和用户的异常向量

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值