ARM体系结构与编程:第6章 bootload启动代码分析.ppt
第6章bootload启动代码分析目标学员:嵌入式初级开发者课程时长:2学时,90分钟ARM微处理器指令系统本章目录132汇编基础启动代码功能模块分解bootload实验部分课程目标掌握bootload启动的过程;通过实验加深对启动代码功能模块的理解;重点难点Bootload整体框架Bootload各功能模块的理解课程目录132汇编基础启动代码功能模块分解bootload实验部分伪操作:GET,IMPORT,AERA,ASSERT….汇编基础汇编指令:LDR,MOV,BX,add状态寄存器MRS访问指令内存访问指令str,ldr……课程目录132汇编基础启动代码功能模块分解bootload实验部分启动代码功能模块分解S3C2440A启动程序步骤:屏蔽所有中断,关看门狗。根据工作频率设置PLL寄存器初始化存储控制相关寄存器初始化各模式下的栈指针设置缺省中断处理函数将数据段拷贝到RAM中,将零初始化数据段清零跳转到C语言Main入口函数中程序的入口地址初始化程序中必须指明入口地址,因为处理器复位(仿真时,装载image)后PC要找到入口开始执行代码,当各种异常或是中断产生的时候也要找到各个异常的入口开始执行代码。AREAInit,CODE,READONLY;这表明下面的是一个名为Init的代码段ENTRY;定义程序的入口(调试用),ENTRY只是定义一个普通的入口点,ASSERT:DEF:ENDIAN_CHANGE;判断是否已经定义了ENDIAN_CHANGE看门狗及中断的禁止上电和复位后,程序开始从位于0x0执行bResetHandler程序跳转到这里执行,将看门狗,中断之类的程序关掉,ResetHandler ;启动代码之关看门狗,关中断,初始化并配置时钟, ldr r0,=WTCON;watchdogdisable ldr r1,=0x0 str r1,[r0] ldr r0,=INTMSK ldr r1,=0xffffffff;allinterruptdisable str r1,[r0]系统时钟初始化设置pll锁定时间ldrr0,=LOCKTIME;设置pll锁定时间ldrr1,=0xffffffff;将0xffffffff赋值给r1strr1,[r0];将r1寄存器的值保存到r0指向的内存中设置UPLL的输出频率ldr r0,=MPLLCONldr r1,=((M_MDIV12)+(M_PDIV4)+M_SDIV);Fin=16.9344MHzstr r1,[r0]设置MPLL的分频系数(设置主时钟锁相环寄存器)ldrr0,=MPLLCON;设置主时钟锁相环寄存器ldrr1,=((M_MDIV12)+(M_PDIV4)+M_SDIV);设置MPLL的分频系数strr1,[r0]初始化内存控制器初始化内存控制器其实就是对S3C2440的memorybank进行设置,使其扩展的存储器或外部设备能够被处理器通过内存控制器正确读写。使其C语言变量等的用户数据,各种模式的堆栈,中断向量表在内存的使用adrl r0,SMRDATA ldr r1,=BWSCON ;r1中存放BWSCON地址 ldr r3,[r0],#4 str r3,[r1],#4系统堆栈的初始化ARM有7种模式,用户模式,快速中断模式,中断模式,管理模式,中止模式,未定义模式和系统模式。系统堆栈的初始化主要是给各个处理器模式分配堆栈空间。orr r1,r0,#IRQMODE|NOINT ;中断模式msr cpsr_cxsf,r1 ;IRQModeldr sp,=IRQStack ;IRQStack=0x33FF_7000初始化方式:堆栈初始化的顺序决定系统最后运行在哪种处理器模式,最后初始化哪种模式的堆栈,系统就运行在哪种模式。