




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第6章 bootload启动代码分析目标学员:嵌入式初级开发者课程时长:2学时,90分钟 ARM微处理器指令系统本章目录132汇编基础 启动代码功能模块分解 bootload实验部分 课程目标掌握bootload启动的过程 ;通过实验加深对启动代码功能模块的 理解 ;重点难点 Bootload整体框架 Bootload各功能模块的理解课程目录132汇编基础启动代码功能模块分解bootload实验部分 伪操作 : GET , IMPORT , AERA , ASSERT .汇编基础 汇编指令 : LDR,MOV,BX, add状态寄存器 MRS 访问指令内存访问指令 str,ldr课程目录132
2、汇编基础启动代码功能模块分解 bootload实验部分 启动代码功能模块分解 S3C2440A启动程序步骤:屏蔽所有中断,关看门狗。根据工作频率设置PLL寄存器初始化存储控制相关寄存器初始化各模式下的栈指针设置缺省中断处理函数将数据段拷贝到RAM中,将零初始化数据段清零跳转到C语言Main入口函数中程序的入口地址 初始化程序中必须指明入口地址,因为处理器复位(仿真时,装载image)后PC 要找到入口开始执行代码,当各种异常或是中断产生的时候也要找到各个异常的入口开始执行代码。 AREA Init,CODE,READONLY ; 这表明下面的是一个名为Init 的代码段ENTRY ;定义程序的
3、入口(调试用), ENTRY 只是定义一个普 通的入口点,ASSERT :DEF:ENDIAN_CHANGE ; 判断是否已经定义了ENDIAN_CHANGE 看门狗及中断的禁止 上电和复位后,程序开始从位于0 x0 执行b ResetHandler 程序跳转到这里执行,将看门狗,中断之类的程序关掉, ResetHandler;启动代码之关看门狗,关中断,初始化并配置时钟,ldrr0,=WTCON ;watch dog disableldrr1,=0 x0strr1,r0ldrr0,=INTMSKldrr1,=0 xffffffff ;all interrupt disablestrr1,r0
4、系统时钟初始化 设置pll 锁定时间 ldr r0,=LOCKTIME ;设置pll 锁定时间ldr r1,=0 xffffffff ;将0 xffffffff 赋值给r1str r1,r0 ;将r1 寄存器的值保存到r0 指向的内存中设置UPLL 的输出频率 ldrr0,=MPLLCONldrr1,=(M_MDIV12)+(M_PDIV4)+M_SDIV) ;Fin=16.9344MHzstrr1,r0设置MPLL 的分频系数 (设置主时钟锁相环寄存器 )ldr r0,=MPLLCON ;设置主时钟锁相环寄存器ldr r1,=(M_MDIV12)+(M_PDIV4)+M_SDIV) ;设置M
5、PLL 的分频系数str r1,r0初始化内存控制器 初始化内存控制器其实就是对S3C2440 的memory bank 进行设置,使其扩展的存储器或外部设备能够被处理器通过内存控制器正确读写。 使其C语言变量等的用户数据,各种模式的堆栈,中断向量表 在内存的使用adrlr0, SMRDATA ldrr1,=BWSCON ;r1中存放BWSCON地址ldrr3, r0, #4strr3, r1, #4系统堆栈的初始化 ARM 有7 种模式,用户模式,快速中断模式,中断模式,管理模式,中止模式,未定义模式和系统模式。系统堆栈的初始化主要是给各个处理器模式分配堆栈空间。 orrr1,r0,#IRQ
6、MODE|NOINT;中断模式msrcpsr_cxsf,r1;IRQModeldrsp,=IRQStack; IRQStack=0 x33FF_7000 初始化方式:堆栈初始化的顺序决定系统最后运行在哪种处理器模式,最后初始化哪种模式的堆栈,系统就运行在哪种模式。建立中断向量表 中断向量表一般位于启动代码的开始部分,它是用户程序与启动代码之间以及启动代码的各部分之间联系的纽带。它由一个一个的跳转函数组成 $HandlerLabel HANDLER $HandleLabel$HandlerLabelsub sp,sp,#4 ;减少sp(用于存放转跳地址)实质上是在计算返回地址stmfd sp!,
7、r0 ;SP 先递减,再将r0 压栈ldr r0,=$HandleLabel ;将HandleXXX 的标号地址传给r0ldr r0,r0 ;把HandleXXX 所指向的内容(也就是中断程序的入口)放入r0str r0,sp,#4 ;把中断服务程序(ISR)压入栈.ldmfd sp!,r0,pc ;用出栈的方式恢复r0 的原值和为pc 设定新值(完成了到ISR 的转跳) 向量表的作用:当系统发生异常时,ARM 处理器会通过硬件机制强制将PC 指针指向中断向量表中对应的异常跳转函数存储的地址,然后程序会跳转到相应的中断服务程序去执行。跳转到C入口 ; 跳转到C语言中的main函数call_C_
8、main ; LDR R0, =_main IMPORT main BL main课程目录132汇编基础启动代码功能模块分解 bootload实验部分 bootload实验部分 步骤一:为bootload建立工程,加入文件Option.inc 2440addr.inc Memcfg.inc s3c2440.s main.c 2440slib.s并配置、编译,生成axf文件。步骤二:点击Step单步运行,观察Registers窗口的Current寄存器和相应的Memory单元发生了什么变化,分析变化的原因。步骤三: debug调试,注意在菜单栏Debug中选项Memory Map如图做相关的内存可读写映射.否则在程序调试的过程中会遇到地址访问的可读写权限的错误 本章小节本章主要的工作就是对启动代码的解读,以期望在理解ARM 硬件的基础上,对ARM的工作模式以及运行的状况有一个深入的理解。几乎每个 S3C2440 的应用工程都包含启动代码,通常是在2440init.s 汇编文件中,特殊功能寄存器定义在2440addr.s,memory bank 配置在mencfg.s,还有系统的选项等在option.s文件中。244
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年介入治疗师考试题及答案
- 2025年大学数学考试试题及答案
- 2025年考驾驶证的试题及答案
- 2025年学校会计专业试题及答案
- 2025年新骑手培训测试题及答案
- 2025年重庆大学模电试题及答案
- 2025年山西事业编考试题及答案
- 2025年7下语文测试题及答案
- 2025年卫生学校笔试题及答案
- 2025年地理知识考试试题及答案
- 《喜剧天赋提升》课件
- 第16课《青春之光》教学设计 2024-2025学年统编版语文七年级下册
- 2025年哈尔滨幼儿师范高等专科学校单招职业技能测试题库1套
- 2025年湖南城建职业技术学院单招职业倾向性测试题库及答案一套
- 2025广东省安全员A证考试题库
- 2025年广东深圳高三一模高考英语试卷试题(含答案详解)
- 《酒店服务礼仪细节》课件
- 《建筑工程混凝土施工质量控制课件》
- 2025-2030年中国煤炭行业发展动态及前景趋势分析报告
- 工程机械租赁服务方案及保障措施投标方案文件
- 2025年人工智能(AI)训练师职业技能鉴定考试题(附答案)
评论
0/150
提交评论