实验目的
通过控制s5p6818的GPIPE_13的引脚控制LED发光二极管闪烁
实验环境准备
实验材料:GEC6818实验箱、电脑、
实验环境:VMware下Linux系统,windows系统、secureCRT平台
第一步:测试三个系统是否连通
- 禁用pc机无线网卡、关闭所有防火墙
- 设置pc机的IP地址(192.168.1.160)、子网掩码(255.255.255.0)、网关(192.168.1.1)
- 实用串口线和网线连接pc机与实验箱,开启secureCRT,然后开启实验箱并在secure CRT下按空格键进入uboot模式
- 设置实验箱下uboot模式的IP地址
进入到u boot模式下,
使用printenv打印所有环境变量
。
注意,如果存在gateway,要删除它,因为这可能是误操作的结果,实际上是没有这个变量的,使用命令进行删除:
setenv gateway
。
设置实验箱IP地址、网关、服务器IP地址(这里以虚拟机的Linux系统为服务器,因为等会会通过tftp服务将虚拟机编译好的文件传到实验箱中):
setenv ipaddr 192.168.1.180 setenv gatewayip 192.168.1.1 setenv serverip 192.168.1.170
- 在虚拟机下,设置IP地址,使之与pc机、实验箱处于同一网段下:
ifconfig eth0 192.168.1.170
- 三个端相互ping,看是否能ping成功,一定要 ping成功才能进行下一步
第二步:编写并编译LedDemo.S文件
- 在虚拟机中在/home下创建一个目录LedDemoS
cd /home
mkdir LedDemoS
- 进入到LedDemoS目录
cd LedDemoS
- 编写LedDemo.S文件
.globl _start
_start:
// 设置GPIOE[13]为输出功能
ldr r1, =0xC001E004
ldr r0, =0x2000
str r0, [r1]
mov r2, #0x100
led_blink:
// 设置GPIOe的bit[13],使GPIOE_13引脚输出低电平,LED亮
ldr r1, =0xC001E000
mov r0, #0
str r0, [r1]
// 延时
bl delay
// 设置GPIOe的bit[13],使GPIOE_13引脚输出高电平,LED灭
ldr r1, =0xC001E000
mov r0, #0x2000
str r0, [r1]
// 延时
bl delay
sub r2, r2, #1
cmp r2,#0
bne led_blink
halt:
b halt
delay:
mov r0, #0xF0000000
delay_loop:
cmp r0, #0
sub r0, r0, #1
bne delay_loop
mov pc, lr
- 编写Makefile文件
led.bin: LedDemo.o
arm-linux-ld -Ttext 0x40000000 -o led.elf $^
arm-linux-objcopy -O binary led.elf led.bin
arm-linux-objdump -D led.elf > led_elf.dis
%.o : %.S
arm-linux-gcc -o $@ $< -c
clean:
rm *.o *.elf *.bin *.dis
- make一下:
make
- 在当前目录找到刚才生成的led.bin文件,并复制到tftp下,以作者目录为例:
cp led.bin /tftp
第三步:将led.bin文件传到实验箱当中,并测试运行
- 在secureCRT里的uboot模式下,输入命令:
tftp 0x40000000 led.bin
- 执行程序:
go 0x40000000
然后看到实验箱上对应的LED灯D7有规律闪烁