




全文预览已结束
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
EasyARM2200 开发板学习笔记 启动代码分析 olyaim 发表于 2008 7 17 10 49 嵌入式系统嵌入式系统 返回版面 定义堆栈的大小 FIQ STACK LEGTH EQU 0 IRQ STACK LEGTH EQU 9 8 每层嵌套需要 9 个字堆栈 允许 8 层嵌套 ABT STACK LEGTH EQU 0 UND STACK LEGTH EQU 0 处理器模式常量定义 NoInt EQU 0 x80 禁止 IRQ 中断 USR32Mode EQU 0 x10 用户模式 SVC32Mode EQU 0 x13 管理模式 SYS32Mode EQU 0 x1f 系统模式 IRQ32Mode EQU 0 x12 中断模式 FIQ32Mode EQU 0 x11 快速中断模式 PINSEL2 EQU 0 xE002C014 BCFG0 EQU 0 xFFE00000 BCFG1 EQU 0 xFFE00004 BCFG2 EQU 0 xFFE00008 BCFG3 EQU 0 xFFE0000C 引入的外部标号在这声明 IMPORT FIQ Exception 快速中断异常处理程序 IMPORT main C 语言主程序入口 IMPORT TargetResetInit 目标板基本初始化 IMPORT StackUsr 用户模式栈 IMPORT bottom of heap 用户模式堆 IMPORT SoftwareInterrupt 软件中断处理程序 给外部使用的标号在这声明 EXPORT Reset EXPORT rt div0 EXPORT user initial stackheap CODE32 AREA vectors CODE READONLY ENTRY 中断向量表 Reset LDR PC ResetAddr 复位入口 程序在系统中执行的第一条指令 LDR PC UndefinedAddr 未定义指令异常入口地址 LDR PC SWI Addr 软件中断入口地址 LDR PC PrefetchAddr 取指令中止异常入口地址 LDR PC DataAbortAddr 取数据中止异常入口地址 DCD 0 xb9205f80 保留向量 值是其它中断向量累加和的补码 LDR PC PC 0 xff0 中断请求 IRQ 入口地址 LDR PC FIQ Addr 快速中断请求 FIQ 入口地址 ResetAddr DCD ResetInit UndefinedAddr DCD Undefined SWI Addr DCD SoftwareInterrupt PrefetchAddr DCD PrefetchAbort DataAbortAddr DCD DataAbort Nouse DCD 0 IRQ Addr DCD 0 FIQ Addr DCD FIQ Handler 未定义指令 Undefined B Undefined 发生未定义指令异常时执行死循环 取指令中止 PrefetchAbort B PrefetchAbort 发生取指令中止异常时执行死循环 取数据中止 DataAbort B DataAbort 发生取数据中止异常时执行死循环 快速中断 FIQ Handler STMFD SP R0 R3 LR 现场保护 将 R0 R3 LR 入栈 BL FIQ Exception 调用快速中断异常处理程序 LDMFD SP R0 R3 LR 异常中断返回 SUBS PC LR 4 PC 指向中断前没有被执行的指令 InitStack 初始化堆栈 MOV R0 LR 设置中断模式堆栈 MSR CPSR c 0 xd2 IRQ 和 FIQ 禁止 中断模式 LDR SP StackIrq 设置中断模式堆栈指针 指向 StackIrq 设置快速中断模式堆栈 MSR CPSR c 0 xd1 IRQ 和 FIQ 禁止 快速中断模式 LDR SP StackFiq 设置快速中断模式堆栈指针 指向 StackFiq 设置中止模式堆栈 MSR CPSR c 0 xd7 IRQ 和 FIQ 禁止 中止模式 LDR SP StackAbt 设置中止模式堆栈指针 指向 StackAbt 设置未定义模式堆栈 MSR CPSR c 0 xdb IRQ 和 FIQ 禁止 未定义模式 LDR SP StackUnd 设置未定义模式堆栈指针 指向 StackUnd 设置系统模式堆栈 MSR CPSR c 0 xdf IRQ 和 FIQ 禁止 系统模式 LDR SP StackUsr 设置系统模式堆栈指针 指向 StackUsr MOV PC R0 返回 ResetInit 复位入口 初始化外部总线控制器 根据目标板决定配置 LDR R0 PINSEL2 将 PINSEL2 的地址赋给 RO IF DEF EN CRP 判断是否有预定义 EN CRP 宏 LDR R1 0 x0f PINSEL2 2 0 禁止 JTAG 调试 ELSE LDR R1 0 x0f PINSEL2 2 1 使能 JTAG 调试 ENDIF STR R1 R0 LDR R0 BCFG0 初始化存储器组 0 的配置寄存器 LDR R1 0 x1000ffef STR R1 R0 LDR R0 BCFG1 初始化存储器组 1 的配置寄存器 LDR R1 0 x1000ffef STR R1 R0 LDR R0 BCFG2 初始化存储器组 2 的配置寄存器 LDR R1 0 x2000ffef STR R1 R0 LDR R0 BCFG3 初始化存储器组 3 的配置寄存器 LDR R1 0 x2000ffef STR R1 R0 BL InitStack 跳转到初始化堆栈代码段 BL TargetResetInit 跳转到目标板基本初始化 B main 跳转到 c 语言入口 user initial stackheap 库函数初始化堆和栈 MOV pc lr rt div0 整数除法除数为 0 错误处理函数 B rt div0 StackIrq DCD IrqStackSpace IRQ STACK LEGTH 1 4 StackFiq DCD FiqStackSpace FIQ STACK LEGTH 1 4 StackAbt DCD AbtStackSpace ABT STACK LEGTH 1 4 StackUnd DCD UndtStackSpace UND STACK LEGTH 1 4 IF DEF EN CRP IF 0 x1fc 判断当前代码地址是否已超过 0 x1FC INFO 1 nThe data at 0 xfc must be 0 x nPlease delete some source before this line ENDIF CrpData WHILE 0 x1fc 未到 0 x1FC 则填充 NOP 指令 NOP WEND CrpData1 DCD 0 x 在 0 x1FC 处放置 0 x 启动加密功能 ENDIF 分配堆栈空间 AREA MyStacks DATA NOINIT ALIGN 2 IrqStackSpace SPACE IRQ STACK LEGT
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年下半年吉林延边公交集团公开招聘10人易考易错模拟试题(共500题)试卷后附参考答案-1
- 高铁制梁场复垦施工合同(3篇)
- 高速公路改造合同模板(3篇)
- 安全施工考试题及答案
- 高明租房合同台账模板(3篇)
- 事业单位聘用合同解除与竞业限制期限合同
- 2025河南公务员面试题及答案
- 《中小学校学生家长参与学校课程改革协议》
- 股权代持解除与控制权恢复-法律程序与执行合同
- 中央预算单位公务卡支付结算与财务管理合作协议
- 第3章 即时定位与地图构建技术课件讲解
- 锚杆格梁施工合同书
- 汽车用品采购合同
- P.E.T.父母效能训练
- 《研学旅行课程设计》课件-了解研学旅行概念
- 传统中医针灸技术操作规范
- 沅陵旅游宣传方案
- 个人防护用品使用和检查知识
- MBTI量表完整版本
- 《检验手册》全文
- 基本不等式-高考历年真题
评论
0/150
提交评论