欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

GEC6818,s5p6818 第一个裸机程序(烧写为重)led和蜂鸣器

程序员文章站 2022-06-08 22:16:33
...

开发环境

粤嵌的GEC6818
ubuntu:16
gcc version 4.5.1 (ctng-1.8.1-FA)
在测试中发现在 start.S (用来启动关看门够狗,设置寄存器建立链接,再跳转到main.c)之前还有一步让sd卡和板子适配
这样裸机才能在开发板上跑,所以这里使用网络tftp传递我们的裸机程序
所以这篇文章分析的

程序分析

小意思点灯

GEC6818,s5p6818 第一个裸机程序(烧写为重)led和蜂鸣器
上图中,开发板上电后,无需按任何按键,VCC3P3_SYS 会产生 3.3V 的电压,其中
D26 无需 GPIO 控制,为常亮状态,即我们所说的电源指示灯。对应 GPIO 如下:
LED 指示灯 GPIO 口
D22 GPIO_B26
D23 GPIO_C11
D24 GPIO_C7
D25 GPIO_C12
当对应的 GPIO 口为低电平时,相应的 LED 灯被点亮,反之会灭

所以就是作为输出端

查看我们的datasheet
先设置使能(GPIO_OUTENB) 再设置 引脚作为输出
GEC6818,s5p6818 第一个裸机程序(烧写为重)led和蜂鸣器

程序的烧写

把程序编译----->保证有个gcc就行了

下面给程序和makefile
GEC6818,s5p6818 第一个裸机程序(烧写为重)led和蜂鸣器

进行烧录

当文件在linux里的tftp文件夹时,开发板启动uboot
设置好 ipaddr ,serverip
GEC6818,s5p6818 第一个裸机程序(烧写为重)led和蜂鸣器

用tftp进行传输

ping通虚拟机
GEC6818,s5p6818 第一个裸机程序(烧写为重)led和蜂鸣器
用tftp 传输文件到 内存里 执行go命令 不要烧到uboot在的地方

tftp 0x41000000 led.bin
go 0x41000000

输入fastboot 就可知道 程序烧在bootloader以下就行
GEC6818,s5p6818 第一个裸机程序(烧写为重)led和蜂鸣器

源码

ledDemo.S

.globl _start

_start:
	//设置蜂鸣器
	ldr r1, =0xC001C004 					
	ldr r0, =0x4000
	str r0, [r1]
	// 设置GPIOE[13]为输出功能
	ldr r1, =0xC001E004 					
	ldr r0, =0x2000
	str r0, [r1]
	
	//ldr r1, =0xC001C004
	//ldr r0, =0x21180
	//str r0, [r1]

	mov r2, #0x100
led_blink:
	// 设置GPIOe的bit[13],使GPIOE_13引脚输出低电平,LED亮
	ldr r1, =0xC001E000 					
	mov r0, #0
	str r0, [r1]
	
	ldr r1, =0xC001C000 					
	mov r0, #0
	str r0, [r1]
	
	//ldr r1, =0xC001C000 
	//mov r0, #0
	//str r0, [r1]

	// 延时
	bl delay							

	// 设置GPIOe的bit[13],使GPIOE_13引脚输出高电平,LED灭
	ldr r1, =0xC001E000					
	mov r0, #0x2000
	str r0, [r1]
	
	ldr r1, =0xC001C000 					
	ldr r0, =0x4000
	str r0, [r1]
	
	//ldr r1, =0xC001C000 
	//ldr r0, =0x21180
	//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 aaa@qq.com $< -c

clean:
	rm *.o *.elf *.bin *.dis