搜档网
当前位置:搜档网 › ARM程序模块

ARM程序模块

ARM程序模块
ARM程序模块

***

函数名:spi_init

函数功能:spi初始化为主机模式

******************************************************************************* **/

void spi_init(void)

{

SPI_SPCR =(0<<3)|

(1<<4)|

(1<<5)|

(0<<6)|

(0<<7);

SPI_SPCCR = 0X52;

}

*

函数名:write_data

函数功能:主机模式发送数据

******************************************************************************* **/

void write_data(uint8 data)

{

SPI_SPDR =data;

while(0 == (SPI_SPSR&0X80));

}

***

函数名:delay

函数功能:简单延时

******************************************************************************* **/

void delay(uint32 timerdelay_flag )

{

for(;timerdelay_flag>0;timerdelay_flag--);

}

**************

函数名:bcdtodata_transition

函数功能:将调整的断码转换为数据

******************************************************************************* ************/

uint32 bcdtodata_transition(uint32 *bcd )

{

uint32 bcd_data;

bcd_data = bcd[5]*100000+

bcd[4]*10000+

bcd[3]*1000 +

bcd[2]*100 +

bcd[1]*10 +

bcd[0]*1 ;

return bcd_data;

}

**************

函数名:datatobcd_transition

函数功能:将数据转换为断码

输入参数:*array_data 数组首地址, To_convert_data 待转换数据

******************************************************************************* ************/

void datatobcd_transition ( uint32 *array_data , uint32 To_convert_data )

{

array_data[0] = To_convert_data%10;

array_data[1] = To_convert_data/10%10;

array_data[2] = To_convert_data/100%10;

array_data[3] = To_convert_data/1000%10;

array_data[4] = To_convert_data/10000%10;

array_data[5] = To_convert_data/100000%10;

}

***

函数名:shizhong

函数功能:时钟的进位

******************************************************************************* **/

void shizhong()

{

if(timer[0]==10)

{

timer[0]=0;

timer[1]++;

if(timer[1]==6)

{

timer[1]=0;

timer[3]++;

if(timer[3]==10)

{

timer[3]=0;

timer[4]++;

if(timer[4]==6)

{

timer[4]=0;

timer[6]++;

if(timer[6]==4)

{

timer[6]=0;

timer[7]++;

if(timer[7]==3)

{

timer[7]=0;

}

}

}

}

}

}

}

/****************************************************************************** ***

函数名:data_play

函数功能:将数据显示在数码管上, 并且可以修改

******************************************************************************* **/

void data_play ( volatile uint32 *data , uint32 scan_flag ,uint32 key_flag )

{

uint32 move_flag=0 ; /* 移动标志*/

uint32 flicker_flag=0 ; /*闪烁标志*/

uint32 revamp_flag=0 ; /*修改标志*/

if( key_flag == 1 )

{

revamp_flag=1; /*修改标志置位*/

}

if(revamp_flag == 1 )

{

flicker_flag++; /*闪烁标志自增*/

if(flicker_flag==10000)

{

flicker_flag=0;

}

if(key_flag==2)

{

move_flag++;

if(data[move_flag]>=10)

{ move_flag++;}

if(move_flag == 8)

{ move_flag=0;}

}

if(key_flag==3)

{

data[move_flag]++;

if(data[move_flag]==10)

{ data[move_flag]=0; }

}

if( key_flag == 4)

{

move_flag=0; /* 移动标志清零*/

revamp_flag=0; /*修改标志清零*/

}

if(scan_flag==move_flag)

{

IO0CLR =0X01;

if(flicker_flag <5000)

write_data(digitable[data[move_flag]]);

if(flicker_flag >5000)

write_data(0x00);

write_data(selectable[move_flag]);

IO0SET =0X01;

}

else

{

IO0CLR =0X01;

write_data(digitable[data[move_flag]]);

write_data(selectable[move_flag]);

IO0SET =0X01;

}

}

else

{

IO0CLR =0X01;

write_data(digitable[data[move_flag]]);

write_data(selectable[move_flag]);

IO0SET =0X01;

}

}

/****************************************************************************** ***

函数名:key_return

函数功能:读取按键的值并返回

******************************************************************************* **/

uint32 key_return( uint32 scan_flag)

{

uint32 key_resurt=12;

if(0==(IO0PIN&0x02))

{

delay(500);

if(0==(IO0PIN&0x02))

{

key_resurt=scan_flag;

while(!(IO0PIN &0X02));

}

}

return key_resurt;

}

ARM实验指导

ADS 集成开发环境及EasyJTAG 仿真器应用 ADS 集成开发环境是ARM 公司推出的ARM 核微控制器集成开发工具,英文全称为ARM Developer Suite,成熟版本为ADS1.2。ADS1.2 支持ARM10 之前的所有ARM 系列微控制器,支持软件调试及JTAG 硬件仿真调试,支持汇编、C、C++源程序,具有编译效率高、系统库功能强等特点,可以在Windows98、Windows XP、Windows2000 以及RedHat Linux上运行。 这里将简单介绍使用ADS1.2 建立工程,编译连接设置,调试操作等等。最后还介绍了基于LPC2100 系列ARM7 微控制器的工程模板的使用,EasyJTAG 仿真器的安装与使用。 一、ADS 1.2 集成开发环境的组成 ADS 1.2 由6 个部分组成,如表1 所示。 表1 ADS 1.2 的组成部分 由于用户一般直接操作的是CodeWarrior IDE 集成开发环境和AXD 调试器,所以这一章我们只介绍这两部分软件的使用,其它部分的详细说明参考ADS 1.2 的在线帮助文档或相关资料。 1. CodeWarrior IDE 简介

ADS 1.2 使用了CodeWarrior IDE 集成开发环境,并集成了ARM 汇编器、ARM 的C/C++编译器、Thumb 的C/C++编译器、ARM 连接器,包含工程管理器、代码生成接口、语法敏感(对关键字以不同颜色显示)编辑器、源文件和类浏览器等等。CodeWarrior IDE 主窗口如图1所示。 2. AXD 调试器简介 AXD 调试器为ARM 扩展调试器(即ARM eXtended Debugger),包括ADW/ADU 的所有特性,支持硬件仿真和软件仿真(ARMulator)。AXD 能够装载映像文件到目标内存,具有单步、全速和断点等调试功能,可以观察变量、寄存器和内存的数据等等。AXD 调试器主窗口如图2 所示。

ARM实验1

ARM技术原理与应用 实验报告 专业电子信息工程班级 学生姓名 学号 指导教师 2017年4月12 日

一、实验目的 (1)掌握ADS集成开发环境的创建; (2)掌握ADS环境下工程创建; (3)掌握ADS环境下汇编语言源程序创建、编辑、修改; (4)掌握ADS环境下汇编语言源程序的汇编操作; (5)掌握AXD环境下汇编语言程序的调试。 二、实验要求 1、实验必须在在ADS1.2环境下进行。 2、工程名、汇编语言源文件名按照下面规则命名: 工程名:pj+学号最后4位+其它字符 汇编语言源文件名:p+学号最后4位+其它字符+.s 例如:张维智同学学号最后4位是3134 因此,pj3134、pj3134a、pj31341等都是允许的工程名;而 p3134a.s、p3134b.s等都是允许的源文件名。 3、实验报告中需要说明实验中在ADS、AXD环境下进行的实际操作; 4、实验报告中应给出实际的实验操作及计算机的调试观察结果; 5、按照规定格式打印实验报告。 三、实验任务 1、在自己的笔记本电脑上安装ADS1.2ARM集成开发环境。同时,操作实验室台式机上ADS1.2以便熟悉实验室的ADS1.2集成开发环境。 2、参考课件文档:ARM汇编语言程序设计实验环境与工具的使用-笔记本电脑版-v2.doc,创建pjxxxx工程。 3、创建pxxxx.s汇编语言源程序。然后严格按照下面格式输入源程序。 AREA Example, CODE, READONLY Entry 才ode32 START: Mov R0,#5 MOV R2,#5 ;r2 MOV R0,0 mov R1,#0 LOOP: CUP R1,R2 BHI ADD_END ADD R0,R0 R1 ADD R1,R1,#1 B LOOP ADD_end B START End 在实验报告中列出上面自己创建的pxxxx.s汇编语言源程序。 4、将pxxxx.s汇编语言源程序添加到pjxxxx工程中。记录实验步骤和结果。 5、选Project->Make操作,对pxxxx.s汇编语言源程序进行汇编。记录错误数,出错行的

ARM实验汇编代码.

AREA Example1,CODE,READONLY ENTRY CODE32 START MOV R0,#15 MOV R1,#8 ADDS R0,R0,R1 B START END Test2.s X EQU 11 Y EQU 8 BIT23 EQU (1<<23 AREA Example3,CODE,READONLY ENTRY CODE32 START Y MOV R0,#X MOR R1,#Y ADD R3,R0,R1 MOV R8,R3

MVN R0,#0XA0000007 SUB R5,R0,R8,LSL #3 MOV R0,#Y ADD R0,R0,R0,LSL #2 MOV R0,R0,LSR #1 MOV R1,#X MOV R1,R1,LSL #1 CMP R0,R1 LDRHI R2,=0XFFFF0000 ANDHI R5,R5,R2 ORRLS R5,R5,#0X000000FF TST R5,#BIT32 BICNE R5,R5,#0X00000040 B START END //*******Test3.s******************** X EQU 11 Y EQU 8 BIT23 EQU (1<<23

AREA Example3,CODE,READONLY ENTRY CODE32 START MOV R0,#X MOV R1,#Y ADD R3,R0,R1 MOV R8,R3 MVN R0,#0XA0000007 SUB R5,R0,R8,LSL #3 MOV R0,#Y ADD R0,R0,R0,LSL #2 MOV R0,R0,LSR #1 MOV R1,#X MOV R1,R1,LSL #1 CMP R0,R1 LDRHI R2,=0XFFFF0000 ANDHI R5,R5,R2 ORRLS R5,R5,#0X000000FF TST R5,#BIT23

ARM实验报告--Thumb

XI`AN TECHNOLOGICAL UNIVERSITY 实验报告

西安工业大学实验报告 一丶实验目的 通过实验掌握ARM处理器16位Thumb汇编指令使用方法 二、实验内容 使用Thumb汇编语言,完成基本reg/men访问,以及简单的算术/逻辑运算。 使用Thumb汇编语言,完成较为复杂的程序分支,领会立即数大小的限制,并体会ARM与Thunb的区别。 三、实验原理 ARM 处理器共有两种工作状态: ARM:32 位,这种状态下执行字对准的ARM 指令; Thumb:16 位,这种状态下执行半字对准的Thumb 指令 在Thumb 状态下,程序计数器PC 使用位1 选择另一个半字。 注意: ARM 和Thumb 之间状态的切换不影响处理器的模式或寄存器的内容。ARM 处理器在两种工作状态之间可以切换。 1)进入Thumb 状态。当操作数寄存器的状态位0 为1 时,执行BX 指令进入Thumb 状态。如果处理器在Thumb 状态进入异常,则当异常处理(IRQ,FIQ,Undef,Abort 和SWI)返回时,自动切换到Thumb 状态。 2) 进入ARM 状态。当操作数寄存器的状态位0 为0 时,执行BX 指令进入ARM 状

态。处理器进行异常处理(IRQ,FIQ,Undef,Abort 和SWI)。在此情况下,把PC 方入异常模式链接寄存器中。从异常向量地址开始执行也可以进入ARM 状态。 四、实验过程 1)打开Embest IDE Pro软件,选择菜单项File-->New Workspace,系统弹出对话框,创建名为TEXT的新工程,并同时创建一个与工程名相同的工作区。此时在工作窗口将打开该工作区和工程。 2)建立源文件: 点击菜单项File-->New,系统弹出一个新的、没有标题的文本编辑窗,输入光标位玉窗口中第一行,将程序所需的源文件代码输入,编辑完后,进行保存,保存文件格式为_a.s文件。 3)添加源文件: 选择Project-->Add To Project-->File命令,弹出文件选择对话框,在工程目录下选择刚才建立的_a.s格式的源文件 4)基本配置: 选择菜单项Project-->Settings,弹出工程设置对话框,在工程设置对话框中,选择Processor设置对话框,选择ARM7对目标板所用处理器进行配置。

ARM嵌入式实验报告

实验一 ARM汇编指令使用实验——基本数学/逻辑运算 一、实验目的 1. 初步学会使用ARM ADS / Embest IDE for ARM 开发环境及ARM软件模拟器。 2. 通过实验掌握数据传送和基本数学/逻辑运算的ARM汇编指令的使用方法。 二、实验设备 1. 硬件:PC机。 2. 软件:ADS 1.2 / Embest IDE 200X集成开发环境。 三、实验内容 1.熟悉ADS 1.2 / Embest IDE 200X开发环境的使用,使用LDR/STR和MOV等指令访问寄存器或存储单元,实现数据的加法运算。具体实验程序如下: /* armasm1a.s */ .EQU X, 45 /*定义变量X,并赋值为45*/ .EQU Y, 64 /*定义变量Y,并赋值为64*/ .EQU STACK_TOP, 0X1000 /*定义栈顶0X1000*/ .GLOBAL _START .TEXT _START: /*程序代码开始标志*/ MOV SP, #STACK_TOP MOV R0, #X /*X的值放入R0*/ STR R0, [SP] /*R0的值保存到堆栈*/ MOV R0, #Y /*Y的值放入R0*/ LDR R1, [SP] /*取堆栈中的数到R1*/ ADD R0, R0, R1 STR R0, [SP] STOP: B STOP /*程序结束,进入死循环*/ .END 2.使用ADD/SUB/LSL/LSR/AND/ORR等指令,完成基本数学/逻辑运算。具体实验程序如下:/* armasm1b.s */ .EQU X, 45 /*定义变量X,并赋值为45*/ .EQU Y, 64 /*定义变量Y,并赋值为64*/ .EQU Z, 87 /*定义变量Z,并赋值为87*/ .EQU STACK_TOP, 0X1000 /*定义栈顶0X1000*/ .GLOBAL _START .TEXT _START: /*程序代码开始标志*/ MOV R0, #X /*X的值放入R0*/ MOV R0, R0, LSL #8 /*R0的值乘以2的8次方 */ MOV R1, #Y /*Y的值放入R1*/ ADD R2, R0, R1, LSR #1 /*R1的值除以2再加上R0后的值放入R2*/ MOV SP, #0X1000

ARM实验三

教师评阅意见: 签名:年月日实验成绩: 一.实验目的 通过实验了解使用ADS 1.2 编写C 语言程序,并进行调试。 二.实验设备 (1)硬件:PC 机一台 (2)软件:Windows98/XP/2000 系统,ADS 1.2 集成开发环境 三.实验内容 编写一个汇编程序文件和一个C 程序文件。汇编程序的功能是初始化堆栈指针和初始化C 程序的运行环境,然后调跳转到C 程序运行,这就是一个简单的启动程序。C 程序使用加法运算来计算1+2+3+...+(N-1)+N 的值(N>0)。 四.实验预习要求 (1)仔细阅读参考文献[1]第4 章ARM 指令系统的内容。 (2)仔细阅读产品光盘附带文档《ADS 集成开发环境及仿真器应用》或其它相关资料,了解ADS 工程编辑和AXD 调试的内容。(本实验使用软件仿真)。五.实验步骤 (1)启动ADS 1.2,使用ARM Executable Image 工程模板建立一个工程ProgramC。(2)建立源文件Startup.S 和Test.c,编写实验程序,然后添加到工程中。(3)设置工程链接地址RO Base 为0x40000000,RW Base 为0x40003000。设置调试入口地址Image entry point 为0x40000000。 (4)设置位于开始位置的起始代码段,如图2.14 所示。

(5)编译链接工程,选择【Project】->【Debug】,启动AXD 进行软件仿真调试。 (6)在Startup.S 的“B Main”处设置断点,然后全速动行程序。 (7)程序在断点处停止。单步运行程序,判断程序是否跳转到C 程序中运行。(8)选择【Processor Views】->【Variables】)打开变量观察窗口,观察全局变量的值, 单步/全速运行程序,判断程序的运算结果是否正确。 六.实验参考程序 C 语言实验的参考程序见程序清单2.8。汇编启动代码见程序清单2.6。 程序清单2.8 C 语言实验参考程序 #define uint8 unsigned char #define uint32 unsigned int #define N 100 uint32 sum; // 使用加法运算来计算1+2+3+...+(N-1)+N 的值。(N>0) void Main(void) { uint32 i; sum = 0;

ARM基本指令实验报告书.

ARM基本指令实验报告书 ARM基本指令实验报告书1、实验内容或题目●熟悉开发环境的使用并使用ldr/str,mov 等指令访问寄存器或存储单元。●使用 add/sub/lsl/lsr/and/orr 等指令,完成基本数学/逻辑运算。2、实验目的与要求●初步学会使用Embest IDE for ARM 开发环境及ARM 软件模拟器;●通过实验掌握简单ARM 汇编指令的使用方法。3、实验步骤与源程序⑴ 实验步骤1) 新建工程:运行Embest IDE 集成开发环境,选择菜单项File → New Workspace,系统弹出一个对话框,输入相关内容。点击OK 按钮,将创建一个新工程,并同时创建一个与工程名相同的工作区。此时在工作区窗口将打开该工作区和工程。2) 建立源文件:点击菜单项File → New,系统弹出一个新的、没有标题的文本编辑窗,输入光标位于窗口中第一行,按照实验参考程序编辑输入源文件代码。3) 添加源文件:选择Project → Add To Project → Files 命令,或单击工程管理窗口中的相应右键菜单命令,弹出文件选择对话框,在工程目录下选择刚才建立的源文件asm1_a.s。4) 基本配置:选择菜单项Project → Settings…或快捷键Alt+F7,弹出工程设置对话框。在工程设置对话框中,选择Processor 设置对话框,按照图3-2 所示,进行目标板所用处理器的配置。5) 生成目标代码:选择菜单项Build → Build asm_a 或快捷键F7,生成目标代码。6) 调试设置:选择菜单项Project → Settings…或快捷键Alt+F7,弹出工程设置对话框。在工程设置对话框中,选择Remote 设置对话框,按照图3-4 所示对调试设备模块进行设置。7) 选择Debug 菜单Remote Connect 进行连接软件仿真器,执行Download 命令下载程序,并打开寄存器窗口。打开memory 窗口,观察地址0x8000~0x801f 的内容,与地址 0xff0~0xfff的内容。8) 单步执行程序并观察和记录寄存器与memory 的值变化。9) 结合实验内容和相关资料,观察程序运行,通过实验加深理解ARM 指令的使用。10)理解和掌握实验后,完成实验练习题。首先在C盘根目录下找到EmbestIDE文件夹,打开Examples\ARM_Basic\3.1_asm1,这是实验的第一题。系统用EmbestIDE Pro软件打开此项目。然后在软件中操作Build- >Build asm1_a,接着再操作Debug Remote Connect,最后操作Debug Download.便能得出结果。⑵ 源代码题目一: 0x00008000 mov sp, #40960x00008004 mov r0, #450x00008008 str r0, [sp]0x0000800c mov r0, #640x00008010 ldr r1, [sp]0x00008014 add r0, r0, r10x00008018 str r0, [sp] stop :0x0000801c b 0x801c题目二: 0x00008000 mov r0, #450x00008004 mov r0, r0, lsl #80x00008008 mov r1, #640x0000800c add r2, r0, r1, lsr #10x00008010 mov sp, #40960x00008014 str r2, [sp]毕业论文

湖南工业大学ARM实验报告

ARM嵌入式系统原理及应用开发 实验报告 学院:电气与信息工程学院 班级:电子信息1204 指导老师:谭会生 姓名: 学号: 实验一:ARM汇编指令使用实验——基本数学/逻辑运算一、实验目的 1.初步学会使用ARM ADS / Embest IDE for ARM 开发环境及ARM软件模拟器。 2.通过实验掌握数据传送和基本数学/逻辑运算的ARM汇编指令的使用方法。 二、实验设备 1.硬件:PC机。 2.软件:ADS 1.2 / Embest IDE 200X集成开发环境。 三、实验内容 熟悉ADS 1.2 / Embest IDE 200X开发环境的使用,使用LDR/STR和MOV等指令访问寄存器或存储单元,实现数据的加法运算。具体实验参考程序如下: 四.实验操作步骤 1.新建工程。先建立一个实验文件夹,如E\ARMSY\armasm1;然后运行Embest IDE集成开发环境,选择File→New Workspace菜单项,弹出一个对话框,输入工程名armasm1a/armasmlb等相关内容;最后单击OK按钮,将创建一个新工程,并同时创建一个与工程名相同的工作区。此时在工作区窗口将能打开该工作区和工程。 2.建立源文件。选择File→New菜单项,弹出一个新的、没有标题的文本编辑窗口,输入光标位于窗口中第一行,按照实验参考程序编辑输入源文件代码。编辑完后,保存文件armasmla. s。 1)armasmla. s源程序: /* armasm1a.s */ .EQU X, 45 /*定义变量X,并赋值为45*/ .EQU Y, 64 /*定义变量Y,并赋值为64*/ .EQU STACK_TOP, 0X1000 /*定义栈顶0X1000*/ .GLOBAL _START .TEXT

ARM7基础实验(附原理图)

11.ADC数模转换——ARM的Proteus实验 LED闪烁——ARM的Proteus实验 实验原理 ARM(LPC21XX)的一个I/O口接LED,通过给它送0和1来设置LED的亮和灭。Proteus仿真电路图

步骤 KEIL 1.创建新工程 2.选择ARM型号(KEIL会自动生成启动代码startup.s) 3.添加源文件,编写程序 4.设置项目选项(是否输出hex、lst文件,设置linker script) Proteus 1.绘制电路图 2.载入程序 3.仿真 C语言源程序 /****************************************************************** ************/ /* */ /* led.c: 用ARM点亮一个led并闪烁,有点浪费…… */ /* */ /****************************************************************** ************/ #include /****************************************************************** ************* **函数名: delay() **描述: 软件延时 ******************************************************************* *************/ void delay (void) { unsigned volatile long i,j; for(i=0;i<60000;i++) for(j=0;j<5;j++) ; } int main(void) {

ARM实验报告

南京邮电大学通达学院 嵌入式系统B 实验报告 班级100023 专业通信工程(嵌入式系统开发) 学号10002304 姓名陆海霞 实验项目: 1、ADS下简单ARM汇编程序 2、熟悉LINUX开发环境 3、多线程应用程序设计 指导教师范山岗

实验一ADS下简单ARM汇编程序 实验目的: 1、熟悉ADS1.2下进行汇编语言程序设计的基本流程; 2、熟悉在ADS中创建工程及编写、编译和运行汇编语言程序的方法; 3、熟悉AXD中各种调试功能。 实验环境: 1、硬件:PC机。 2、软件ADS1.2。 实验内容: 1、在ADS中新建工程,并设置开发环境。 2、在Code Warrior 环境中编辑、编译和链接汇编语言程序,并生成可执行文件。 3、在AXD中调试汇编程序; 4、使用命令行界面编辑、编译和链接汇编程序。 实验步骤: 本实验要求在ADS环境下,编写一个汇编程序,计算S=1+2+3……+n的累加值。 把累加结果S存入到存储器的指定位置;在AXD中调试该程序,使用ARMulator模拟目标机。 1、新建工程。 打开Code Warrior,选择File->New(project)选项,使用ARM Executable Image模版新建一个工程。 2、设置编译和链接选项。 由于我们使用的是模拟机,设置汇编语言编译器的模拟处理器架构为Xscale;在ARM Linker 中,选择output选项卡并选择Linktype为Simple类型,确认RO Base为0x8000,修改RW Base为0x9000, 3、为当前工程添加源程序文件。 ARM汇编程序源文件后缀名为S大小写均可。 确保添加入当前工程复选框选上。 4、编辑源程序代码。 参考程序add.s : ;armadd源程序 N EQU 7 ;累加次数 ;定义名为Adding的代码段 AREA Adding,CODE,READONL Y ENTRY MOV R0,#0 MOV R1,#1 REPEAT ADD R0,R0,R1

2014完整ARM嵌入式系统实验报告

郑州航空工业管理学院 嵌入式系统实验报告 (修订版) 20 – 20第学期 赵成,张克新编著 院系: 姓名: 专业: 学号: 电子通信工程系 2014年3月制

实验一ARM体系结构与编程方法 一、实验目的 了解ARM9 S3C2410A嵌入式微处理器芯片的体系结构,熟悉ARM微处理器的工作模式、指令状态、寄存器组及异常中断的概念,掌握ARM指令系统,能在ADS1.2 IDE中进行ARM汇编语言程序设计。 二、实验内容 1.ADS1.2 IDE的安装、环境配置及工程项目的建立; 2.ARM汇编语言程序设计(参考附录A): (1)两个寄存器值相加; (2)LDR、STR指令操作; (3)使用多寄存器传送指令进行数据复制; (4)使用查表法实现程序跳转; (5)使用BX指令切换处理器状态; (6)微处理器工作模式切换; 三、预备知识 了解ARM嵌入式微处理器芯片的体系结构及指令体系;熟悉汇编语言及可编程微处理器的程序设计方法。 四、实验设备 1. 硬件环境配置 计算机:Intel(R) Pentium(R) 及以上; 内存:1GB及以上; 实验设备:UP-NETARM2410-S嵌入式开发平台,J-Link V8仿真器; 2. 软件环境配置 操作系统:Microsoft Windows XP Professional Service Pack 2; 集成开发环境:ARM Developer Suite (ADS) 1.2。 五、实验分析 1.安装的ADS1.2 IDE中包括和两个软件组件。在ADS1.2中建立类型的工程,工程目标配置为;接着,还需要对工程进行、及链接器设置;最后,配置仿真环境为仿真方式。 2.写出ARM汇编语言的最简程序结构,然后在代码段中实现两个寄存器值的加法运算,给出运算部分相应指令的注释。 ; 文件名:

ARM嵌入式实验报告完整篇(修改)解析

《ARM嵌入式系统》 实验报告 学生姓名刘宝雨 班级测控1002班学号10401600244 电气与信息工程学院 2013年4 月20 日

目录 目录 (1) 实验一 ARM汇编指令实验1 (2) 一、实验目的 (2) 二.实验设备 (2) 三.实验内容 (2) 四.实验原理 (2) 五.实验操作步骤 (2) 六.实验报告 (10) 实验二ARM汇编指令实验2 (10) 一、实验目的 (10) 二.实验设备 (10) 三.实验内容 (10) 四.实验原理 (10) 五.实验操作步骤 (11) 六.实验报告 (18) 实验三会编与C语言的相互调用实验 (18) 一、实验目的.......................................................................................,.. (18) 二.实验设备....................................................................................,,,,,,. (18) 三.实验内容....................................................................................,,,,,,, (18) 四.实验原理.......................................................................................,,, (19) 五.实验操作步骤.................................................................................,,,,,,. (20) 六.实验报告.................................................................................,,,,,,. (22)

ADS arm程序设计实验

大连民族大学 计算机科学与工程学院实验报告 实验题目: ADS arm程序设计 ___________________________ 课程名称:嵌入式系统 _________________ 实验类型:□演示性□验证性□操作性□设计性□综合性 专业:XXXX 班级:XXXXXX 学生姓名:XXXXXX 日期XXXXXX 【实验评语】

[实验报告正文] 1实验目的 ●熟悉ADS集成环境 ● Arm程序设计 2实验内容 ●在ADS中新建工程,并设置开发环境。 ●在AXD中调试汇编程序 3实验环境 ●硬件:PC机 ●软件:ADS ●操作系统:WINDOW 7 4实验流程 1)ADS编译系统工程建立配置步骤描述 1.1新建工程:先建一个文件夹如:H:\ test1。然后运行ADS1.2集成开发环境,选择File→New 菜单项,弹出一个对话框,然后出来图1.1新建工程类型选择对话框,选择project,在“Project name”中输入工程文件名”test1”,点击确定,同时创建一个与工程名相同的工作区。 1.2为当前工程添加源程序文件。 ARM汇编程序源文件后缀名为S大小写均可。选择Debug,DebugRel Release. 按照同样步骤建立test2.s。

1.3. 添加源文件:选择Project→Add To Project→File项,或单击工程管理窗口中的相应右键快捷菜单命令,打开文件选择对话框,在工程目录下选择刚才建立的源并添加到文件test1.s。在“Add Files”对话框中选择“DebugRel”按照同样步骤建立test 2.s。 1.4基本设置:设置中只需设置“entry point” 1.5生成目标代码:按下图标生成目标代码。 1.6调试设置:按下图标。首先编译和链接之后,在工程test1所在的目录下生 成一个名为“test_data的目录,同时打开对话框使用Debugrel目标,选择生成的test.axf用于调试。 1.7打开存储器窗口,观察地址的内容. 1.8单步执行程序并观察和记录寄存器与存储器值的变化。 1.9结合实验内容和相关资料,观察程序运行,通过实验加深理解ARM指令。 2)完成程序设计:X=|X|+|Y|+|Z|,其中R0=X=1,R1=Y=2,R2=Z=3,用子程序调用的方 法,入口参数为R3,出口参数为R4 a)一个*.s文件实现 b)写出完整的代码

arm实验源程序代码

ARM处理器工作模式实验程序代码: USR_STACK_LEGTH EQU 64 SVC_STACK_LEGTH EQU 0 FIQ_STACK_LEGTH EQU 16 IRQ_STACK_LEGTH EQU 64 ABT_STACK_LEGTH EQU 0 UND_STACK_LEGTH EQU 0 AREA Example5,CODE,READONL Y ; 声明代码段Example5 ENTRY ; 标识程序入口 CODE32 ; 声明32位ARM指令 START MOV R0,#0 MOV R1,#1 MOV R2,#2 MOV R3,#3 MOV R4,#4 MOV R5,#5 MOV R6,#6 MOV R7,#7 MOV R8,#8 MOV R9,#9 MOV R10,#10 MOV R11,#11 MOV R12,#12 BL InitStack ; 初始化各模式下的堆栈指针 ; 打开IRQ中断(将CPSR寄存器的I位清零) MRS R0,CPSR ; R0 <= CPSR BIC R0,R0,#0x80 MSR CPSR_cxsf,R0 ; CPSR <= R0 ; 切换到用户模式 MSR CPSR_c, #0xd0 MRS R0,CPSR ; 切换到管理模式 MSR CPSR_c, #0xdf MRS R0,CPSR HALT B HALT ; 名称:InitStack ; 功能:堆栈初始化,即初始化各模式下的堆栈指针。 ; 入口参数:无 ; 出口参数:无 ; 说明:在特权模式下调用此子程序,比如复位后的管理模式

InitStack MOV R0, LR ; R0 <= LR,因为各种模式下R0是相同的 ;设置管理模式堆栈 MSR CPSR_c, #0xd3 LDR SP, StackSvc ;设置中断模式堆栈 MSR CPSR_c, #0xd2 LDR SP, StackIrq ;设置快速中断模式堆栈 MSR CPSR_c, #0xd1 LDR SP, StackFiq ;设置中止模式堆栈 MSR CPSR_c, #0xd7 LDR SP, StackAbt ;设置未定义模式堆栈 MSR CPSR_c, #0xdb LDR SP, StackUnd ;设置系统模式堆栈 MSR CPSR_c, #0xdf LDR SP, StackUsr MOV PC, R0 StackUsr DCD UsrStackSpace + (USR_STACK_LEGTH - 1)*4 StackSvc DCD SvcStackSpace + (SVC_STACK_LEGTH - 1)*4 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 ; 分配堆栈空间 AREA MyStacks, DATA, NOINIT, ALIGN=2 UsrStackSpace SPACE USR_STACK_LEGTH * 4 ; 用户(系统)模式堆栈空间 SvcStackSpace SPACE SVC_STACK_LEGTH * 4 ;管理模式堆栈空间IrqStackSpace SPACE IRQ_STACK_LEGTH * 4 ; 中断模式堆栈空间FiqStackSpace SPACE FIQ_STACK_LEGTH * 4 ; 快速中断模式堆栈空间AbtStackSpace SPACE ABT_STACK_LEGTH * 4 ;中止义模式堆栈空间UndtStackSpace SPACE UND_STACK_LEGTH * 4 ; 未定义模式堆栈END

ARM汇编实验报告

《嵌入式系统原理与应用B》课程实验报告 ARM汇编语言编程与调试 要求完成的主要实验 1、给出的数据中寻找最大、最小数问题 2、两种求和运算的编程与调试 3、第四章作业第9题 4、排序冒泡程序的调试与总结 5、第四章作业第11题 说明:标注完成的实验,未完成的给予说明 专业名称:通信工程 班级:1510班 学生姓名:石龙飞 学号(8位):03151307 指导教师:刘钊远

给出的数据中寻找最大、最小数问题 一、实验目的 1、学习汇编软件的安装、使用,熟悉汇编环境。 2、学会使用汇编软件,如何新建一个工程,如何书写源代码,如何进行链接、编译,以及如何调试。 3、尝试一些简单的指令,学会用汇编指令写一些简单的程序。 二、实验内容 编写一个汇编程序,要求在给定的一组数中找到最大数和最小数。 三、实验主要步骤 1、首先建立一个工程 2、再新建.s的源文件,添加到工程中 3、编写源代码,这里主要是实现在一组数中寻找最大数和最小数,最后将找到的两个数放到相应的寄存器中。

4、进行链接编译,看看有没有语法的错误,如果有错误编译器会提示错误的类型以及在哪里出错。 5、进行debug调试,查找代码中的逻辑错误,若无逻辑错误,可在debug界面查看运行结果,其最需要的关注的几个地方是菜单栏的一组运行按钮、源码执行的步骤以及断点、左边的寄存器状态、下方的存储器状态,将这些综合起来,就可以很明确的回到程序如何运行,运行结果如何。

四、实验代码

五、实验总结与分析 1、实验结果分析 其中用红色方框框起来的是最后程序运行的结果,也就是在R3中保存了最小数在R2中保存了最大数,完成了实验要求。 2、在用汇编语言编程之前首先要看看有没有汇编软件ADS、没有的话需要安装,WindowsXP安装起来比较简单,只需要点击setup,一直点击写一部就可以,但是如果是Windows 7或者更高版本的话就需要在setup的属性里点击兼容WindowsXP,运行时以管理员身份运行才能正确进行安装。

arm实验代码

1.寄存器R0和R1中有两个正整数,求这两个数的最大公约数,结果保存在R3中。AREA TEST, CODE,READONL Y ENTRY START MOV R0,#3 MOV R1,#4 MOV R2,#5 CMP R0,R1 BHI EXI BLS EXT EXI CMP R0,R2 BHI AXI BLS AXY AXI MOV R3,R0 EXT CMP R1,R2 BHI AXT BLS AXY AXT MOV R3,R1 AXY MOV R3,R2 END 2.用汇编语言设计程序实现10! AREA TEST, CODE,READONL Y ENTRY STRA T MOV R13 ,#0X1000 MOV R0,#0X01 MOV R1,#0X02 MOV R2,#0X03 STMFD R13,{R0,R2,R1} MOV R7,#&FF LDMFD R13!,{R3-R5} MOV R8,#&55 END 3.实现字符串的逆序复制TEXT1=HELLO=>TEXT2=0LLEH AREA invstring, CODE, READONL Y start

ADR R1,TEXT1 ADR R2,TEXT2 MOV R3, #0 LOOP LDRB R0,[R1], #1 ADD R3,R3,#1 CMP R0,#0 BNE LOOP SUB R1,R1,#2 LOOP1 LDRB R0,[R1], #-1 STRB R0,[R2], #1 SUB R3,R3, #1 CMP R3,#1 BNE LOOP1 MOV R5,#&55 NOP TEXT1 =“HELLO”,0 ALIGN TEXT2 =“OELLH” END 4.用调用子程序的方法实现1!+2!+3!+ (10) asmp.s AREA JC, CODE, READONL Y EXPORT JCP ENTRY JCP ADD R3, R0, #1 MOV R2, #1 MOV R1, #1 LOOP MUL R0, R1, R2 MOV R1, R0 ADD R2, R2, #1 CMP R2, R3 BNE LOOP NOP NOP MOV PC, LR END PROGC.c #include

ARM实验

汇编与 C 语言的相互调用 一.实验目的 阅读Embest Arm EduKit II 启动代码,观察处理器启动过程; 学会使用 Embest IDE 辅助信息窗口来分析判断调试过程和结果; 二.实验设备 硬件:PC 机。 软件:Embest IDE Pro 2004 集成开发环境,Windows 98/2000/NT/XP。 三.实验内容 使用汇编完成一个随机数产生函数,通过 C 语言调用该函数,产生一系列随机数,存放到数组里面。 四.实验原理 1. ARM过程调用ATPCS (ARM ),ATPCS 是一系列用于规定应用程序之间相互调用的基本规则,这此规则包括:①支持数据栈限制检查;②支持只读段位置无关(ROPI);③支持可读/写段位置无关(RWPI);④支持ARM 程序和Thumb 程序的混合使用;⑤处理浮点运算。使用以上规定的ATPCS 规则时,应用程序必须遵守如下: ①程序编写遵守ATPCS②变量传递以中间寄存器和数据栈完成;③汇编器使用-apcs 开关选项。 程序只要遵守ATPCS 相应规则,就可以使用不同的源代码编写程序。程序间的相互调用最主要的是解决参数传递问题。应用程序之间使用中间寄存器及数据栈来传递参数,其中,第一个到第四个参数使用 R0-R3,多于四个参数的使用数据栈进行传递。这样,接收参数的应用程序必须知道参数的个数但是,在应用程序被调用时,一般无从知道所传递参数的个数。不同语言编写的应用程序在调用时可以自定义参数传递的约定,使用具有一定意义的形式来传递,可以很好地解决参数个数的问题。常用的方法是把第一个或最后一个参数作为参数个数(包括个数本身)传递给应用程序。 ATPCS 中寄存器的对应关系

ARM实验报告

重庆交通大学信息科学与工程学院综合性设计性实验报告 专业:xxxxxxxxxxxx 学号:xxxxxxxx 姓名:xxxx 实验所属课程:ARM嵌入式系统 实验室(中心):信息技术软件实验室 指导教师:xxxxx 2014年12月

流水灯显示姓名及按键实验 一、实验目的 (1)了解μC/OS-II 操作系统的基本原理和移植条件。 (2)掌握流水灯的原理与应用,能改变流水灯状态,从初始状态开始。 (3)掌握LPC2200(for MagicARM2200)专用工程模板的使用,能够在MagicARM2200-S上运行基于μC/OS-II操作系统的程序。 二、实验设备 硬件:PC 机一台 MagicARM2200-S 教学实验开发平台一套 软件:Windows98/XP/2000 系统 ADS 1.2 集成开发环境μC/OS-II 操作系统(V2.52) 三、实验内容 学习移植μC/OS-II 操作系统到ARM7 处理器,然后编写一个简单的多任务应用程序,实现按键LED 流水灯控制。流水灯显示本人名字的ASCII码,每次按键LED变化一次;另一个任务用于控制蜂鸣器,蜂鸣器控制任务平时处于等待状态,当按键检测任务检测到有效按键输入时,立即唤醒蜂鸣器控制任务。 四、实验预习要求 (1)了解μC/OS-II 的组成和移植相关的文件内容。 (2)了解ARM7 体系结构及其汇编编程,了解LPC2000 系列ARM7 微控制器的硬件结构(如向量中断控制器和定时器等)和μC/OS-II 移植的相关说明。

(3)仔细阅读参考文献第5.7节的LPC2000管脚连接模块,第5.9节的GPIO;仔细阅读本书第1章的内容,了解MagicARM2200-S的硬件结构,注意蜂鸣器的控制电路及KEY1按键电路的说明;仔细阅读产品配套光盘附带文档《ADS集成开发环境及仿真器应用》或其它相关资料,了解ADS 1.2集成开发环境、LPC2200(for MagicARM2200)专用工程模板、EasyJTAG仿真器的应用;阅读参考文献[4]的第16章和第17章的内容,了解μC/OS-II操作系统的配置,系统的初始化,任务的建立,系统的启动等等。 五、实验原理 (1) μC/OS-II 概述 μC/OS-II 是一个完整的、可移植、可固化、可剪裁的占先式实时多任务内核。μC/OS-II是用ANSIC 语言编写,包含一小部分汇编代码,使之可以供不同架构的微处理器使用。 μC/OS-II 可以管理64 个任务,具有信号量、互斥信号量、事件标志组、消息邮箱、消息队列、任务管理、时间管理和内存块管理等系统功能。 μC/OS-II 软件体系结构如图3.1 所示,由图可以看出,μ C/OS-II 包括以下3 个部分: μC/OS-II 核心代码:包括10 个C 程序文件和1 个头文件,主要实现了系统调度、 任务管理、内存管理、信号量、消息邮箱和消息队列等系统功能。此部分的代码与处理器无关。 μC/OS-II 配置代码:包括2 个头文件,用于裁剪和配置μ

ARM嵌入式原理和开发实验报告

. 南京邮电大学海外学院 实验报告 实验名称: 实验一基于ADS开发环境的程序设计 实验二嵌入式Linux交叉开发环境的建立实验三嵌入式Linux环境下的程序设计 课程名称嵌入式系统与开发 班级学号 姓名 开课时间 2014/2015学年第1学期

实验一基于ADS开发环境的程序设计 一、实验目的 1、学习ADS开发环境的使用; 2、学习和掌握ADS环境下的汇编语言及C语言程序设计; 3、学习和掌握汇编语言及C语言的混合编程方法。 二、实验内容 1、编写和调试汇编语言程序; 2、编写和调试C语言程序; 3、编写和调试汇编语言及C语言的混合程序; 4、编写程序测试多寄存器传送指令的用法。 三、实验原理 ADS全称为ARM Developer Suite,是ARM公司推出的新一代ARM集成开发工具。现在常用的ADS版本是ADS1.2,它取代了早期的ADS1.1和ADS1.0。 ADS用于无操作系统的ARM系统开发,是对裸机(可理解成一个高级单片机)的开发。ADS具有极佳的测试环境和良好的侦错功能,它可使硬件开发工作者更深入地从底层去理解ARM处理器的工作原理和操作方法,为日后自行设计打基础,为BootLoader的编写和调试打基础。 1.ADS软件的组成 ADS由命令行开发工具、ARM运行时库、GUI开发环境(CodeWarrior和AXD)、实用程序、支持软件等组成。 2.GUI开发环境 ADS GUI开发环境包含CodeWarrior和AXD两种,其中Code Warrior是集成开发工具,而AXD是调试工具。 使用汇编语言进行编程简单、方便,适用于初始化硬件代码、启动代码等。 汇编语言具有一些相同的基本特征: 1.一条指令一行。 2.使用标号(label)给内存单元提供名称,从第一列开始书写。 3.指令必须从第二列或能区分标号的地方开始书写。 4.注释必须跟在指定的注释字符后面,一直书写到行尾。 在ARM汇编程序中,每个段必须以AREA作为段的开始,以碰到下一个AREA 作为该段的结束,段名必须唯一。程序的开始和结束需以ENTRY和END来标识。 嵌入式C语言设计是利用基本的C语言知识,面向嵌入式工程实际应用进行程序设计。为了使单独编译的C语言程序和汇编程序之间能够相互调用,必须为子程序之间的调用规定一定的规则。ATPCS就是ARM程序和Thumb程序中子程序调用的基本规则。

相关主题