电子科技大学微机实验报告 实验2
- 格式:docx
- 大小:41.09 KB
- 文档页数:7
实验二 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 口控制寄存器,在 ledtest.s 文件中添加汇编代码,设置 GPG5-GPG8 为 output。 2、在 ledtest.s 文件中添加汇编代码,禁止 GPG5-GPG8 端口的上拉电阻。 3、在 ledtest.s 文件中添加汇编代码,点亮 LED6,熄灭 LED5,LED7,LED8,并调用延时。4、 在 ledtest.s 文件中添加汇编代码,点亮 LED7,熄灭 LED5,LED6,LED8,并调用延时。5、在 ledtest.s 文件中添加汇编代码,点亮 LED8,熄灭 LED5,LED6,LED7,并调用延时。
6、在 ledtest.s 文件中添加汇编代码,实现 LED5-LED8 依次点亮。 7.连接好 JTAG 仿真板,一口与 PC 的并口相连,另一口与开发板的 JTAG 口相连,打开开 发板电源。打开 H-jtag 程序,检测 CPU,点击 RVDS 中的“Debug”,打开 RVD 进行硬件调 试
(二)LED C 语言实验(选做)
【实验结果和程序】 (一)LED 汇编实验 ;GPIO 寄存器宏定义
GPGCON EQU 0x56000060 GPGDAT EQU 0x56000064 GPGUP EQU 0x56000068
EXPORT LEDTEST AREA LEDTESTASM,CODE,READONLY ; 该 伪 指 令 定 义 了 一 个 代 码 段 , 段 名 为 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,READONLY ENTRY ;ldr r13,=0x1000 IMPORT main b main END C 语言部分: //---------------Serial Experiment-------------------- //-----------This is coded by UESTC HQ 20101018------- /* 串口通信 C 程序,按‘e’退出通信
*/ #define ULCON0 (*(volatile unsigned *)0x50000000) //UART 线控制寄存器 #define UCON0 (*(volatile unsigned *)0x50000004) //UART 控制寄存器 #define UFCON0 (*(volatile unsigned *)0x50000008) //FIFO 控制寄存器 #define UMCON0 (*(volatile unsigned *)0x5000000C) //AFC disable #define UTRSTAT0 (*(volatile unsigned*)0x50000010) //UART 状态寄存器 #define UBRDIV0 (*(volatile unsigned *)0x50000028) //波特率 #define UTXH0 (*(volatile unsigned *)0x50000020) #define URXH0 (*(volatile unsigned *)0x50000024) #define CAMDIV0 (*(volatile unsigned *)0x4C000018) #define GPHCON (*(volatile unsigned *)0x56000070) #define GPHDAT (*(volatile unsigned *)0x56000074) #define GPHUP (*(volatile unsigned *)0x56000078) #define MPLLCON (*(volatile unsigned *)0x4C000004) #define UPLLCON (*(volatile unsigned *)0x4C000008) #define CLKDIVN (*(volatile unsigned *)0x4C000014) #define WTCON (*(volatile unsigned *)0x53000000)
void initpll() { MPLLCON=0x76022; //Fin=16.9344MHz, Fout=266.72MHz CLKDIVN=0x07; //0000 0111 } void inituart() { ULCON0=0x03; //1 位起始位,8 位数据位 UCON0 =0x0805; //串口时钟 PCLK,查询方式 UFCON0 =0x0; UMCON0 =0x0; UBRDIV0 =0x17; // 波 特 率 115200 UBRDIV0 = 44450000/(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 ; } }