- 1、本文档共31页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
实验一 ARM汇编程序编写以与启动代码分析
实验 ARM汇编程序的编写以及启动代码的分析
一、实验目的:
练习ARM汇编程序的编写,对提供的程序的启动代码进行分析,了解S3C2410初始化过程, 初始化代码主要是包含在start.s中。
二、实验原理:
启动程序要完成的任务包括:硬件初始化,系统存储系统的配置,复制二级中断向量表。
启动程序过程
● 系统硬件初始化
系统上电或复位后,程序从位于地址0x0的Reset Exception Vector处开始执行,因此需要在这里放置Bootloader的第一条指令:b ResetHandler,跳转到标号为ResetHandler处进行第一阶段的硬件初始化,执行完,系统进行堆栈和存储器的初始化。使用了外设,则需要设置相关的寄存器,确定其刷新频率、总线宽度等信息。
● 代码段复制到RAM中运行
需要把系统的代码复制到RAM中运行。映像文件内部共有三种输出段:RO段、RW段和ZI段。ARMLink同时还产生了这三种输出段的起始和终止定位信息:Image$$RO$$Base、Image$$RO$$Limit、Image$$RW$$Base、Image$RW$Limit、Image$ZI$Base和Image$$ZI$$Limit。可以在程序中使用这些定位信息。将ROM中的代码和数据搬移到RAM中。
● 建立二级中断向量表
在ARM系统中,中断向量表位于0X0开始的地址处,意味着无论运行什么样的上层软件,一旦发生中断,程序就得到Flash存储器中的中断向量表里去,降低系统的运行效率。因此在RAM中建立自己的二级中断向量表,当中断发生后,程序直接从RAM中取中断向量进入中断子程序。尤其是在中断频繁发生的系统里,这种方法可以大大提高系统的运行效率。
三、实验内容:
1.运行一个简单的串口程序,单步执行初始化代码,观察寄存器变化。
2.分析系统上电后的初始化工作包括哪些内容。
3.分析中断的处理过程,包括中断向量表的建立、中断源的识别及中断IRQ服务程序是如何进入的。
4.分析应用程序的结构。
四、实验代码:
在系统上电后,初始化部分的工作注意包含以下部分:
关看门狗定时器
屏蔽所有中断
设置CPU时钟频率。
设置存储器控制寄存器,对外部存储器的参数进行设置。
初始化各模式下的堆栈
建立IRQ中断的总的入口地址
初始化应用程序的执行环境
跳入Main函数,进入C程序
;=========================================
; NAME: 2410INIT.S
; DESC: C start up codes
; Configure memory, ISR ,stacks
; Initialize C-variables
; HISTORY:
; 2002.02.25:kwtark: ver 0.0
; 2002.03.20:purnnamu: Add some functions for testing STOP,POWER_OFF mode
;=========================================
GET option.s ;GET相当INCLUDE 将一个源文件包含到当前源文件,这里表示包含option.s,并在当前位置进行汇编
GET memcfg.s
GET 2410addr.s
BIT_SELFREFRESH EQU (122) ;定义了一些符号常量
;ARM异常模式的定义
;SDRAM/DRAM 刷新控制器 bit22 REFMD位 0:CBR/AUTO REFRESH 1:SHIF REFRESH
;下面是对arm处理器模式寄存器对应值的常数定义,arm处理器中有一个CPSR程序状
;态寄存器,CPSR后五位决定目前的处理器模式。
;Pre-defined constants
USERMODE EQU 0x10 ;用户模式
FIQMODE EQU 0x11 ;FIQ快速中断模式
IRQMODE EQU 0x12 ;中断模式
SVCMODE EQU 0x13 ;管理模式
ABORTMODE EQU 0x17 ;中止模式
UNDEFMODE EQU 0x1b ;未定义指令模式
MODEMASK EQU 0x1f ;系统模式
NOINT EQU 0xc0 ;禁止IRQ和FIQ中断
;ARM各异常模式堆栈,定义各模式堆栈地址
;_STACK_BASEADDRESS在
文档评论(0)