课程-ARM系统精讲班.doc

上传人:bao****ty 文档编号:132371449 上传时间:2020-05-15 格式:DOC 页数:125 大小:3.47MB
返回 下载 相关 举报
课程-ARM系统精讲班.doc_第1页
第1页 / 共125页
课程-ARM系统精讲班.doc_第2页
第2页 / 共125页
课程-ARM系统精讲班.doc_第3页
第3页 / 共125页
课程-ARM系统精讲班.doc_第4页
第4页 / 共125页
课程-ARM系统精讲班.doc_第5页
第5页 / 共125页
点击查看更多>>
资源描述

《课程-ARM系统精讲班.doc》由会员分享,可在线阅读,更多相关《课程-ARM系统精讲班.doc(125页珍藏版)》请在金锄头文库上搜索。

1、 ARM系统精讲班实验手册 实验目录实验1-1 ARM汇编编程-寄存器访问4实验1-2 ARM汇编编程-算术运算5实验1-3 ARM汇编编程-寻址方式7实验1-4 ARM汇编编程-逻辑控制9实验1-5 ARM汇编编程-模式切换13实验1-6 ARM/C混合编程16实验2-1 ADS集成开发环境18实验2-2 ARM综合实验-二进制数字显示38实验2-3 ARM综合实验-二进制数字显示46实验2-4 ARM综合实验-按键程序设计54实验3-1 ARM综合实验-定时器程序设计62实验4-1 ARM综合实验-串口程序设计172实验4-2 ARM综合实验-串口程序设计284实验5-1 ARM综合实验-

2、ADC程序设计193实验5-2 ARM综合实验-ADC程序设计2104实验5-3 ARM综合实验-触摸屏程序设计115实验6-1 ARM综合实验-LCD程序设计127 实验1-1 ARM汇编编程-寄存器访问l 实验目的:掌握ARM通用寄存器,存储器的访问方法l 实验要求:1. 使用MOV指令访问ARM通用寄存器2. 使用LDR/STR指令完成存储器的访问l 实验代码与分析:1-1 test1.sCOUNTEQU0x30003100; 定义一个变量,地址为0x30003100AREAExample2,CODE,READONLY; 声明代码段Example2 ENTRY; 标识程序入口CODE32

3、; 声明32位ARM指令STARTLDRR1,=COUNT; R1 = COUNTMOVR0,#0; R0 = 0 STRR0,R1; R1 = R0,即设置COUNT为0LOOP LDRR1,=COUNTLDRR0,R1; R0 = R1 ADDR0,R0,#1; R0 = R0 + 1STRR0,R1; R1 = R0,即保存COUNTBLOOPEND实验1-2 ARM汇编编程-算术运算l 实验目的:掌握ARM算术,逻辑运算指令l 实验要求:使用ADD、SUB、AND、ORR、CMP、TST等指令完成数据加减运算及逻辑运算l 实验代码与分析:1-2 test2.sXEQU11; 定义X的值

4、为11YEQU8; 定义Y的值为8BIT23EQU(123); 定义BIT23的值为0x00800000AREAExample2,CODE,READONLY; 声明代码段Example2ENTRY; 标识程序入口CODE32; 声明32位ARM指令START; 使用MOV、ADD指令实现:R8 = R3 = X + YMOVR0,#X; R0 = X,X的值必须是8位图数据MOVR1,#Y; R1 = Y,Y的值必须是8位图数据ADDR3,R0,R1; 即是R3 = X + YMOVR8,R3; R8 (2*X)吗?若大于则R5 = R5&0xFFFF0000,否则R5 = R5|0x0000

5、00FFMOVR0,#YADDR0,R0,R0,LSL #2; 计算R0 = Y + 4*Y = 5*YMOVR0,R0,LSR #1; 计算R0 = 5*Y/2MOVR1,#XMOVR1,R1,LSL #1; 计算R1 = 2*XCMPR0,R1; 比较R0和R1,即(5*Y/2)和(2*X)进行比较LDRHI R2,=0xFFFF0000; 若(5*Y/2)(2*X),则R2 (2*X),则R5 = R5&R2ORRLSR5,R5,#0x000000FF; 若(5*Y/2)(2*X),则R5 = R5|0x000000FF; 使用TST指令测试R5的bit23是否为1,若是则将bit6位清

6、零(使用BIC指令)TST R5,#BIT23BICNER5,R5,#0x00000040BSTARTEND实验1-3 ARM汇编编程-寻址方式l 实验目的:掌握ARM寻址方式l 实验要求:编写汇编程序,分别实现立即数寻址寄存器寻址寄存器间接寻址基址变址寻址多寄存器寻址l 实验代码与分析:1-3 test3.sAREA TEST,CODE,READONLYENTRYCODE32;立即数寻址MOV R0,#0x1 ;立即数0x1存入寄存器R0ADD R0,R0,#0x4 ;寄存器R0中的内容加上立即数0x4 然后存入寄存器R0;寄存器寻址MOV R1,#0x2 ;立即数0x2存入寄存器R1ADD

7、 R2,R1,R0 ;寄存器R0中的内容和寄存器R1的内容相加存入寄存器R2ADD R2,R2,R0,LSL #1 ;寄存器R0中的内容逻辑左移1位加上寄存器R2的内容在存入寄存器R2;寄存器间接寻址MOV R1,#0x10 ;将立即数0x10存入寄存器R1STR R2,R1 ;将寄存器R2的内容存入以寄存器R1的值为地址的存储器中SWP R0,R0,R1 ;完成寄存器R1所指向的存储器中的字数据与寄存器R0的内容交换;基址变址寻址MOV R3,#0x14 ;将立即数0x14存入寄存器R3MOV R0,#0x3 ;将立即数0x3存入寄存器R0STR R0,R3 ;将寄存器R0的内容存入寄存器R

8、3所指向的存储器LDR R4,R1,#4 ;将寄存器R1的内容加上4所指向的存储器的字存入寄存器R4;多寄存器寻址LDMIA R1,R5,R6;相对寻址B NEXTNOPNOPNOPNOPNOPNOPNEXTNOPNOPNOPEND实验1-4 ARM汇编编程-逻辑控制l 实验目的:掌握ARM各种逻辑控制语句结构l 实验要求:1.使用ARM汇编指令实现if条件执行 2.使用ARM汇编指令实现for循环结构 3.使用ARM汇编指令实现while循环结构 4.使用ARM汇编指令实现dowhile循环结构 5.使用ARM汇编指令实现switch开关结构l 实验代码与分析:1-4 test4.sAREA

9、Example4,CODE,READONLY; 声明代码段Example4ENTRY; 标识程序入口CODE32; 声明32位ARM指令START; if(xy) z=100; else z=50; ; 设x为R0,y为R1,z为R2 (x、y、z均为无符号整数)MOVR0,#76; 初始化x的值MOVR1,#243; 初始化y的值CMPR0,R1; 判断xy?MOVHIR2,#100; xy条件正确,z=100MOVLSR2,#50; 条件失败,z=50; for(i=0; i10; i+); x+; ; 设x为R0,i为R2 (i、x均为无符号整数)MOVR0,#0; 初始化x的值MOVR

10、2,#0; 设置i=0FOR_L1CMPR2,#10; 判断i=10,退出循环ADDR0,R0,#1; 循环体,x+ADDR2,R2,#1; i+BFOR_L1FOR_ENDNOP; while(x0); 设x为R0 (x为无符号整数)MOVR0,#5; 初始化x的值DOWHILE_L1ADDR0,R0,#-1; 循环体,x-DOWHILE_L2MOVSR0,R0; R0 = R0,并影响条件码标志BNEDOWHILE_L1; 若R0不为0(即x不为0),则继续循环DOWHILE_ENDNOP; switch(key&0x0F); case 0:; case 2:; case 3: x = key + y; break; case 5: x = key - y; break; case 7: x = key * y; break; default: x = 168; break; ; ; 设x为R0,y为R1,key为R2 (x、y、key均为无符号整数)MOVR1,#3; 初始化y的值MOVR2,#2; 初始化key的值SWITCHANDR2,R2,#0x0F; switch(key&0x0F)CASE_0C

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 其它相关文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号