S5PV210的第一个裸机程序

S5PV210的第一个裸机程序

@(s5pv210学习)

文章目录

    • S5PV210的第一个裸机程序
      • 硬件
      • 软件
        • 代码编译下载
        • 使用makefile来编译文件

硬件

原理如下:
S5PV210的第一个裸机程序_第1张图片
GPJ0口的相关寄存器
Alt text
GPJ0CON: 控制寄存器
GPJ0DAT: 数据寄存器
GPJ0PUD:上拉、下拉开关
GPJ0DRV:驱动
GPJ0CONPDN:低功耗配置
GPJ0PUDPND:低功耗上下拉配置上
如果控制LED,只需要控制GPJ0CON为输出,GPJ0DAT为高或低来熄灭或点亮LED

软件

简单的led闪烁汇编代码 led.s

简单的汇编代码和指令将有专门章节进行整理

.globl _start

_start:
								// GPJ0CON寄存器地址为:  0xE020_0240   数据寄存器GPJ0DAT:0xE020_0244

	ldr r0, = 0xE0200240		//=说明是伪指令 用#是指令,但是对立即数有要求,无法确认立即数是否合法,请使用伪指令
	ldr r1, = 0x00111000		//寄存器间接寻址,把r1的值写入r0的值为地址的内存中去
	str r1, [r0]
	ldr r0, = 0xE0200244
	ldr r1, = 0x00000000
	str r1, [r0]
led:
	bl delay
	ldr r0, = 0xE0200244
	ldr r1, = 0x00000038		//熄灭
	str r1, [r0]	
	bl delay
	ldr r0, = 0xE0200244
	ldr r1, = 0x00000000
	str r1, [r0]	
	b led
	b .						//一直跳转到当前 相当于while(1);

delay:
	ldr r2, =1000000
	ldr r3, =0
delay_loop:
	sub r2, r2, #1
	cmp r2, r3				//cmp会影响Z标志位,如果r2 == r3则Z=1
	bne delay_loop
	mov pc, lr

代码编译下载

在命令行输出以下命令,将产生可执行文件led.bin
使用DNW,S5PV210用USB方式启动,DNW的地址设置为0xd0020010
使用此代码下载进板子可以发现LED闪烁

arm-linux-gcc -o led.o led.S -c    
arm-linux-ld -Ttext 0x0 -o led.elf led.o
arm-linux-objcopy -O binary led.elf led.bin
arm-linux-objdump -D led.elf > led_elf.dis

使用makefile来编译文件

以上使用gcc命令来编译,看起来有点麻烦

led.bin: led.o 
	arm-linux-ld -Ttext 0x0 -o led.elf $^   #链接
	arm-linux-objcopy -O binary led.elf led.bin #用于复制,可进行格式转换
	arm-linux-objdump -D led.elf > led_elf.dis  # -D 反汇编所有段
	gcc mkv210_image.c -o mkx210     #编译生成转SD卡下载的格式的程序
	./mkx210 led.bin 210.bin         #生成SD卡的bin  210.bin
	
%.o : %.S
	arm-linux-gcc -o $@ $< -c  #预处理 编译和汇编

%.o : %.c
	arm-linux-gcc -o $@ $< -c   #预处理 编译和汇编

clean:
	rm *.o *.elf *.bin *.dis mkx210 -f

你可能感兴趣的:(嵌入式,s5pv210)