浙江大学城市学院实验报告
课程名称: 嵌入式操作系统实验3 实验名称: ARM工作模式切换程序设计与调试 学生姓名: 专业: 学号:
同组学生姓名: 指导老师: 成绩:
一、实验目的
本实验主要的内容是在CodeWirrior IDE下创建工程;并设置汇编程序开发的相应环境。然后,设置IDE的属性。本实验在实验2的基础上,对ARM工作模式切换程序设计与调试。
1)掌握ARM的各种工作模式。
2)熟悉ARM各种工作模式下的寄存器的应用。 3)学会使用软件编程实现ARM工作模式间的切换。
二、实验内容
对ARM工作模式切换程序设计与调试。ARM工作模式间的切换主要有两种方式:软件切换与硬件切换。问:
1)软件模式下使用什么指令进行切换?
2)硬件切换通过什么来改变ARM工作模式?
三、实验设备
1.教学实验箱,PentiumII 以上的PC 机,硬件多功能仿真器。 2.PC操作系统WIN98或WIN2000或WINXP,ADS1.2集成开发环境,仿真器驱动程序。
四、实验步骤
任务1:ARM工作模式切换程序
(注意:建立工程模仿下列步骤做,但要求工程名为自己的学号c) 1.新建ARM工程
2.把汇编程序添加到工程中
AREA INTI,CODE,READONLY ENTRY B RESET_HANDLER UNDEFINED_HANDLER B UNDEFINED_HANDLER B SWI_HANDLER PREFETCH_HANDLER B PREFETCH_HANDLER ABORT_HANDLER B ABORT_HANDLER NOP
IRQ_HANDLER B IRQ_HANDLER FIQ_HANDLER B FIQ_HANDLER
SWI_HANDLER MOV PC,LR
RESET_HANDLER MOV R0,#0x000001F0 LDR R1,=0xF0000000 STR R0,[R1] MRS R0,CPSR MOV R13,#1 MOV R14,#2 MRS R0,CPSR BIC R0,R0,#0x1F ORR R0,R0,#0x10 MSR CPSR_c,R0 MOV R13,#3 MOV R14,#4
STOP B STOP END
3.设置
1)ARM Assembler选项中的Target选项卡(ARM7TDMI) 4.编译
5.打开ARM调试器AXD,Options->Configure Target选项,打开Choose Target对话框,在Choose Target中选择ARMUL,点击Configger按扭,选择处理器ARM7TDMI,点击OK。
6.载入映像文件*.axf 7.观察处理器窗口
1)选择Processor Views->Disassembly,打开ARM反汇编窗口; 2)选择Processor Views->Registers,打开ARM寄存器窗口; 3)选择Processor Views->Memory,打开ARM存储器窗口;在Memory Start Address地址栏中输入地址0xF0000000
8.单步运行程序,观察ARM寄存器、存储空间和工作模式的变化情况。 9.完成下列表格: 序号 执行指令 指令执行后的变化情况 寄存器值(16进制表示) 存储工作空间 R0 R1 R13_svc R14_svc R13_usr R14_usr R15 CPSR 0xF0000000 模式 0 1 2 3 4 5 6 7 8 9 10 11 12 13 ------- ---- 10.通过网络查找,解释程序的含义,要求在语句后以解释的方式对每一条语句给出解释(不同颜色),然后写出整个程序的含义。
任务2:调试方法
(注意:建立工程模仿下列步骤做,但要求工程名为自己的学号d) 1.新建ARM工程
2 把汇编程序添加到工程中
注意:程序中有意给出2个很简单的错误,在程序调试中需要自己解决。 AREA INIT_STACK,CODE,READONLY ENTRY START MOV R1,#1 BL INIT_STACK MRS R1,CPSR BIC R1,R1,#0x80 MSR CPSR_cxsf,R1 MSR CPSR_c,#0xd0 MRS R3,CPSR BIC R3,R3,#0x80 MSR CPSR_cxsf,R3 MSR CPSR_c,#0xdf STOP B STOP
INIT_STACK MOV R0,LR
LDR SP,P_SVC_STK MSR CPSR_c,#0xd2 LDR SP,P_IRQ_STK MSR CPSR_c,#0xd1 LDR SP,P_FIQ_STK STMED SP!,{R0,R1} NOP MSR CPSR_c,#0xd7 LDR SP,P_ABT_STK MSR CPSR_c,#0xdb LDR SP,P_UND_STK MSR CPSR_c,#0xdf LDR SP,P_USR_STK MOV PC,R0 ;定义各工作模式下的堆栈长度 USR_STK_LEN EQU 4 SVC_STK_LEN EQU 4 IRQ_STK_LEN EQU 4 FIQ_STK_LEN EQU 4 ABT_STK_LEN EQU 4 UND_STK_LEN EQU 4 ;定义各工作模式下的堆栈指针 P_USR_STK DCD USR_STK_SPC + (USR_STK_LEN-1)*4 P_SVC_STK DCD SVC_STK_SPC + (SVC_STK_LEN-1)*4 P_IRQ_STK DCD IRQ_STK_SPC + (IRQ_STK_LEN-1)*4 P_FIQ_STK DCD FIQ_STK_SPC + (FIQ_STK_LEN-1)*4 P_ABT_STK DCD ABT_STK_SPC + (ABT_STK_LEN-1)*4 P_UND_STK DCD UND_STK_SPC + (UND_STK_LEN-1)*4 ;定义各工作模式下的堆栈空间 AREA STACKS,DATE,READWRITE USR_STK_SPC SPACE USR_STK_LEN*4 SVC_STK_SPC SPACE SVC_STK_LEN*4 IRQ_STK_SPC SPACE IRQ_STK_LEN*4 FIQ_STK_SPC SPACE FIQ_STK_LEN*4 ABT_STK_SPC SPACE ABT_STK_LEN*4

