电子科技大学微机实验报告-实验2

时间:2020-11-04 09:43:50 手机站 来源:网友投稿

【实验目的】

实验二 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

版权声明 :以上文章中选用的图片文字均来源于网络或用户投稿 ,如果有侵权请立即联系我们 , 我们立即删除 。