【实验目的】
实验二 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数据寄存器( GPGDA)T PORT G禁止上拉寄存器 (GPGUP)
注:以上寄存器详细描述见实验指导书或者 S3C2440 芯片手册。
2、开发板 LED 部分原理图说明GPG5接 LED4,串联上拉电阻GPG6接 LED5,串联上拉电阻GPG7接 LED6,串联上拉电阻GPG8接 LED7,串联上拉电阻
所以,当 IO 口输出低电平时,相应的 LED 才能点亮。
【实验步骤】
(一) LED 汇编实验
1、通过查看 S3C2440 处理器 G 口控制寄存器, 在 文件中添加汇编代码, 设置
GPG5- GPG8为 output 。
2、在 文件中添加汇编代码,禁止 GPG-5
GPG8端口的上拉电阻。
3、在 文件中添加汇编代码,点亮 LED6,熄灭 LED5,LED7,LED8,并调用延时。 4、 在 文件中添加汇编代码,点亮 LED7, 熄灭 LED5,LED6,LED8,并调用延时。 5、在 文件中添加汇编代码,点亮 LED8,熄灭 LED5,LED6,LED7,并调用延时。
6、在 文件中添加汇编代码,实现 LED5-LED8 依次点亮。
连接好 JTAG 仿真板,一口与 PC 的并口相连,另一口与开发板的 JTAG 口相连,打开开发板电源。打开 H-jtag 程序,检测 CPU,点击 RVDS中的“ Debug”,打开 RVD进行硬件调试
(二) LED C 语言实验(选做)
【实验结果和程序】
(一) LED 汇编实验
;GPIO 寄存器宏定义
GPGCON EQU 0x GPGDAT EQU 0x GPGUP EQU 0x
EXPORT LEDTEST
AREA LEDTESTASM,CODE,READYONL; 该 伪 指 令 定 义 了 一 个 代 码 段 , 段 名 为
LEDTESTAS,M属性只读 ENTRY
LEDTEST
; 设置 GPG5-GPG8(即 LED4--LED7) 为 output ldr r0,=GPGCON
ldr r1,[r0] mov
r1,#0str 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( ldr r0,=0xffffff ;
即 LED7) output 0
初始计数值
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,READOYNL
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 UTRSTAT0 (*(volatile unsigned*)0x) //UART 状态寄存器#define UBRDIV0 (*(volatile unsigned *)0x) // 波特率
#define UTXH0 (*(volatile unsigned *)0x) #define URXH0 (*(volatile unsigned *)0x)
#define CAMDIV0 (*(volatile unsigned *)0x4C000018)
#define GPHCON (*(volatile unsigned *)0x) #define GPHDAT (*(volatile unsigned *)0x) #define GPHUP (*(volatile unsigned *)0x)
#define MPLLCON (*(volatile unsigned *)0x4C000004) #define UPLLCON (*(volatile unsigned *)0x4C000008) #define CLKDIVN (*(volatile unsigned *)0x4C000014) #define WTCON (*(volatile unsigned *)0x)
void initpll()
{
MPLLCON=0x76022; //Fin=, Fout=
CLKDIVN=0x07; //0000 0111
}
void inituart()
{
ULCON0=0x03; //1 位起始位, 8 位数据位UCON0 =0x0805; // 串口时钟 PCLK,查询方式UFCON0 =0x0;
UMCON0 =0x0;
UBRDIV0 =0x17; // 波 特 率 115200 UBRDIV0 =
/(115200*16)-1=24-1=23
}
void initgpio()
{
GPHCON |=0xa0; // set to rxd and txd
GPHUP |=0x0f; // pull up WTCON &=0xdb;
}
void uart_send(char * c)
{
for (; *c != '\0'; c++)
{
URXH0 = *c ;
}
}
unsigned char uart_get()
{
}
int main()
{
UTXH0=URXH0;
return UTXH0;
char key = ' ';
initpll(); // 初始化锁相环 PLL initgpio(); // 初始化 IO 口
inituart(); // 初始化串口
uart_send("If you want to quit ,please press 'e'\r\n"); while(1)
{
key = uart_get(); if (key == 'e')
{
}
else
uart_send ("\r\nyou pressed 'e' and you'll quit!\r\n"); break;
{
uart_send(&key) ;
}
}
uart_send("the program exited by user!\r\n"); return 0;
}
【思考题】
、如何实现 LED0-LED7 的循环点亮。
答:将 GPGCON端口的值改为 0x0001555, GPGUP的值改为 0x01ff 。再仿照 led4-led7
的程序写出 led0-led3 的点亮代码,最后循环执行即可
、一般情况下,配置通用 IO 口的需要哪些步骤。
答:读入 IO 口控制寄存器地址,配置 IO 口的状态(读或写等) 。
、 文件的汇编程序中代码 ldr r0,=0x f fffff 的作用是什么。答:设置延迟的时间。
【实验结论】
本实验通过 arm 对 Led 灯的控制,了解了 S3C2440 处理器端口的配置
推荐访问:实验报告 实验 微机 电子科技大学 电子科技大学微机实验报告-实验2