1、 实验二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 数据寄存器
2、( GPGDAT) ? PORT G 禁止上拉寄存器 (GPGUP) 注:以上寄存器详细描述见实验指导书或者 S3C2440 芯片手册。 2、开发板 LED 部分原理图说明 ? GPG5 接 LED4,串联上拉电阻 ? GPG6 接 LED5,串联上拉电阻 ? GPG7 接 LED6,串联上拉电阻 ? GPG8 接 LED7,串联上拉电阻 所以,当 IO 口输出低电平时,相应的 LED 才能点亮。 (一)LED 汇编实验 1、通过查看 S3C2440 处理器 G 口控制寄存器,在 ledtest.s 文件中添加汇编代码,设置 GPG5GPG8 为 output。 2、在 ledtest.s 文
3、件中添加汇编代码,禁止 GPG5GPG8 端口的上拉电阻。 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-j
4、tag 程序,检测 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 ;设置 GPG5GPG8( 即 LED4-LED7)为 output ldr r0,=GPGCON ldr
5、 r1,r0 mov r1,#0x00015400 str r1,r0 ;禁止 GPG5GPG8( 即 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 ;初始计数
6、值 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 ;初
7、始计数值 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,否则执行下一条语句
8、 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 (*(vol
9、atile 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 (
10、*(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 (
11、*(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=0x0
12、3; /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 void uart_send(char * c) for (; *c != 0; c+) URXH0 = *c ; unsigned char uar
13、t_get() UTXH0=URXH0; return UTXH0; int main() char key = ; initpll(); /初始化锁相环 PLL initgpio(); /初始化 IO 口 inituart(); /初始化串口 uart_send(“If you want to quit ,please press ern“); while(1) key = uart_get(); if (key = e) uart_send (“rnyou pressed e and youll quit!rn“); break; else uart_send( return 0; 1 、如何实现 LED0-LED7 的循环点亮。 答:将 GPGCON 端口的值改为 0x0001555,GPGUP 的值改为 0x01ff。再仿照 led4-led7的程序写出 led0-led3 的点亮代码,最后循环执行即可 2 、一般情况下,配置通用 IO 口的需要哪些步骤。 答:读入 IO 口控制寄存器地址,配置 IO 口的状态(读或写等) 。 3 、 ledtest.s 文件的汇编程序中代码 ldr r0,=0x f fffff 的作用是什么。 答:设置延迟的时间。 本实验通过 arm 对 Led 灯的控制,了解了 S3C2440 处理器端口的配置