開發板有兩個可控制的LED燈:分別接到引腳:KP_COL0和VDD50_EN
由原理圖可知這兩個引腳分別輸出高電平之後LED就會亮。
KP_COL0就是GPL2_0
VDD50_EN就是GPK1_1
配置GPX_CON對應位爲輸出功能,設置GPX_DAT相應管腳輸出爲1,就可以點亮LED燈了。
程序實現如下:
start.S:
.global _start
#include "s3c4412_gpio.h"
.word 0x2000
.word 0x0
.word 0x0
.word 0x0
_start:
ldr r0, =0x1002330C
ldr r1, [r0]
orr r1, r1, #0x300
str r1, [r0]
ldr r0, =0x11000C08
ldr r1, =0x0
str r1, [r0]
ldr r0, =GPL2CON
mov r1, #(0x01 << 0)
str r1, [r0]
ldr r0, =GPK1CON
mov r1, #(0x01 << 4)
str r1, [r0]
ldr r0, =GPK1DAT
mov r1, #0x2
str r1, [r0]
ldr r0, =GPL2DAT
mov r1, #0x1
str r1, [r0]
halt:
b halt
s3c4412_gpio.h:
#ifndef S3C4412_GPIO_H
#define S3C4412_GPIO_H
#define GPX1CON (0x11000000 + 0x0C20)
#define GPX1DAT (0x11000000 + 0x0C24)
#define GPX1PUD (0x11000000 + 0x0C28)
#define GPX1DRV (0x11000000 + 0x0C2C)
#define GPK1CON (0x11000000 + 0x0060)
#define GPK1DAT (0x11000000 + 0x0064)
#define GPK1PUD (0x11000000 + 0x0068)
#define GPK1DRV (0x11000000 + 0x006C)
#define GPL2CON (0x11000000 + 0x0100)
#define GPL2DAT (0x11000000 + 0x0104)
#define GPL2PUD (0x11000000 + 0x0108)
#define GPL2DRV (0x11000000 + 0x010C)
#endif
link.lds:
SECTIONS {
. = 0x0;
.text : {
*(.text)
}
.rodata ALIGN(4) : {
*(.rodata*)
}
.data ALIGN(4) : {
*(.data*)
}
.bss ALIGN(4) : {
*(.bss)
*(COMMON)
}
}
Makefile:
CFLAGS := -nostdlib -O0
TARGET := led.bin
$(TARGET) : start.o
$(CROSS_COMPILE)ld -T link.lds -o led.elf $^
$(CROSS_COMPILE)objcopy -O binary led.elf $@
$(CROSS_COMPILE)objdump -D led.elf > led.dis
%.o : %.S
$(CROSS_COMPILE)gcc -o $@ $< -c
%.o : %.c
$(CROSS_COMPILE)gcc $(CFLAGS) -o $@ $< -c
.PHONY:clean flash
clean:
rm -rf *.o *.elf *.bin *.dis mk4412
flash:
gcc ../tools/mk4412.c -static -o mk4412
./mk4412 $(TARGET)
@if [ -b /dev/sdb ]; then \
sudo mkfs.vfat -F 32 -I /dev/sdb; \
sudo dd if=/dev/zero of=/dev/sdb bs=512 seek=1 iflag=dsync oflag=dsync count=2048; \
sudo dd if=./$(TARGET) of=/dev/sdb bs=512 seek=1 iflag=dsync oflag=dsync; \
fi
完整的代碼詳見我的GitHub地址:https://github.com/675816156/iTop4412_bare_machine/tree/master/1_led_s
因爲這個裸機是s3c4412datasheet中所描述的bl1, 所以編譯出的led.bin頭16個字節需要處理下,才能正常運行
mk4412工具源碼詳見:mk4412.c
執行如下:mk4412 led.bin
編譯好的鏡像製作工具mk4412從這裏下載:http://download.csdn.net/detail/cj675816156/9101607
然後燒寫處理好的led.bin到sd卡里頭:make flash
最後就能看到開發板上led2和led3被點亮了。