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传递我们的裸机程序
所以这篇文章分析的
程序分析
小意思点灯
上图中,开发板上电后,无需按任何按键,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) 再设置 引脚作为输出
程序的烧写
把程序编译----->保证有个gcc就行了
下面给程序和makefile
进行烧录
当文件在linux里的tftp文件夹时,开发板启动uboot
设置好 ipaddr ,serverip
用tftp进行传输
ping通虚拟机
用tftp 传输文件到 内存里 执行go命令 不要烧到uboot在的地方
tftp 0x41000000 led.bin
go 0x41000000
输入fastboot 就可知道 程序烧在bootloader以下就行
源码
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
上一篇: php购物网站支付paypal使用方法
下一篇: php学习笔记 面向对象的构造与析构方法