电子科技大学微机实验报告-实验2
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验二 ARM 汇编控制LED 实验
【实验目的】
1、理解掌握通过ARM 汇编控制硬件操作;
2、熟练使用ARM 调试软件RVDS 进行硬件调试。
【实验内容】
1、掌握ARM 处理器GPIO 相关寄存器的使用;
2、用ARM 汇编实现控制开发LED 按照一定方式点亮。
【预备知识】
1、ARM 汇编基础
2、ARM 处理器通用IO 口的操作
【实验设备和工具】
软件:Windows 操作系统,RVDS 软件
硬件:ARM 嵌入式开发板,PC 机Pentium100 以上,并口线,JTAG 板,JTAG 连接线
【实验原理】
1、 S3C2440 处理器相关寄存器介绍
PORT G 控制寄存器( GPGCON )
PORT G 数据寄存器(GPGDAT)
PORT G 禁止上拉寄存器(GPGUP)
注:以上寄存器详细描述见实验指导书或者S3C2440 芯片手册。
2、开发板LED 部分原理图说明
GPG5 接LED4,串联上拉电阻
GPG6 接LED5,串联上拉电阻
GPG7 接LED6,串联上拉电阻
GPG8 接LED7,串联上拉电阻
所以,当IO 口输出低电平时,相应的LED 才能点亮。
【实验步骤】
(一)LED 汇编实验
1、通过查看S3C2440 处理器G 口控制寄存器,在文件中添加汇编代码,设置
GPG5-GPG8 为output。
2、在文件中添加汇编代码,禁止GPG5-GPG8 端口的上拉电阻。
3、在文件中添加汇编代码,点亮LED6,熄灭LED5,LED7,LED8,并调用延时。
4、在文件中添加汇编代码,点亮 LED7,熄灭 LED5,LED6,LED8,并调用延时。
5、在文件中添加汇编代码,点亮LED8,熄灭LED5,LED6,LED7,并调用延时。
6、在文件中添加汇编代码,实现LED5-LED8 依次点亮。
7.连接好 JTAG 仿真板,一口与 PC 的并口相连,另一口与开发板的 JTAG 口相连,打开开发板电源。打开H-jtag 程序,检测CPU,点击RVDS 中的“Debu g”,打开RVD 进行硬件调试
(二)LED C 语言实验(选做)
【实验结果和程序】
(一)LED 汇编实验
;GPIO 寄存器宏定义
GPGCON EQU 0x
GPGDAT EQU 0x
GPGUP EQU 0x
EXPORT LEDTEST
AREA LEDTESTASM,CODE,READONL Y ; 该伪指令定义了一个代码段,段名为LEDTESTASM,属性只读
ENTRY
LEDTEST
;设置GPG5-GPG8(即LED4--LED7)为output
ldr r0,=GPGCON
ldr r1,[r0]
mov
r1,#0x00015400
str r1,[r0]
;禁止GPG5-GPG8(即LED4--LED7)端口的上拉电阻
ldr r0,=GPGUP
ldr r1,[r0]
mov
r1,#0x01e0
str r1,[r0]
looptest
;将数据端口G 的数据寄存器的地址附给寄存器r2
ldr r2,=GPGDAT
; 点亮LED5,熄灭LED6-LED8,并调用延时
ldr r3,[r2]
orr
r3,r3,#0x01e0
bic
r3,r3,#0x0020
str r3,[r2] ;GPG5(即LED5) output 0
ldr r0,=0xffffff ;初始计数值
bl delay ;调用延迟子程序
;----------点亮LED6,熄灭LED5,LED7,LED8,并调用延时---- ldr r3,[r2]
orr
r3,r3,#0x01e0
bic
r3,r3,#0x0040
str r3,[r2] ;GPG6(即LED6) output 0
ldr r0,=0xffffff ;初始计数值
bl delay
;----------点亮LED7,熄灭LED5,LED6,LED8,并调用延时---- ldr r3,[r2]
orr
r3,r3,#0x01e0
bic
r3,r3,#0x0080
str r3,[r2] ;GPG7(即LED7) output 0
ldr r0,=0xffffff ;初始计数值
bl delay
;----------点亮LED8,熄灭LED5,LED6,LED7,并调用延时---- ldr r3,[r2]
orr
r3,r3,#0x01e0
bic
r3,r3,#0x0100
str r3,[r2] ;GPG8(即LED8) output 0 ldr r0,=0xffffff ;初始计数值
bl delay
;-------------实现LED5-LED8 依次点亮-------------------
b looptest
delay
sub r0,r0,#1 ;r0=r0-1
cmp r0,#0x0 ;将r0 的值与0 相比较
bne delay ;比较的结果不为0(r0 不为0),继续调用delay,否则执行下一条语句mov pc,lr ;返回
END ;程序结束符
(二)LED C 语言实验(选做)
arm 汇编部分:
AREA |DATA|,CODE,READONL Y
ENTRY
;ldr r13,=0x1000
IMPORT main
b main
END
C 语言部分:
//---------------Serial Experiment--------------------
//-----------This is coded by UESTC HQ 20
/*
串口通信C 程序,按‘e’退出通信
*/
#define ULCON0 (*(volatile unsigned *)0x) //UART 线控制寄存器
#define UCON0 (*(volatile unsigned *)0x) //UART 控制寄存器
#define UFCON0 (*(volatile unsigned *)0x) //FIFO 控制寄存器
#define UMCON0 (*(volatile unsigned *)0x5000000C) //AFC disable
#define UTRSTA T0 (*(volatile unsigned*)0x) //UART 状态寄存器
#define UBRDIV0 (*(volatile unsigned *)0x) //波特率
#define UTXH0 (*(volatile unsigned *)0x)
#define URXH0 (*(volatile unsigned *)0x)
#define CAMDIV0 (*(volatile unsigned *)0x4C000018)