iTOP4412裸機開發——LED

開發板有兩個可控制的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被點亮了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章