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被点亮了。

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值