s3c2440 ARM9 裸机驱动第一篇-GPIO驱动(C)

 

此文为对于LED驱动的补充:

废话不说,先上代码。

start.s

 

.text
.global _start
_start:
	ldr 	r0 	,= 0x53000000 	@WATCHDOG ADD
	mov r1	,#0x0
	str	r1	,[r0]			@r1 的数据写入r0 关看门狗
	ldr	sp	,=1024*4		@设置栈
	bl main					@跳转到main执行
 halt:	
	b	halt

led.c

 

 

#define	GPFCON	(*(volatile unsigned long *)0x56000050)
#define	GPFDAT	(*(volatile unsigned long *)0x56000054)


void delay(unsigned int num);
int main(int argv, char *argc)
{
	GPFCON	&=0x00ff;
	GPFCON	|=0x5500;
	GPFDAT	&=0x0f;
	while(1)
	{
		GPFDAT	|=0xf0;
		delay(20);
		GPFDAT	&=0x0f;
		delay(20);
	
	}
	return 0;
}

void delay(unsigned int num)
{
	unsigned int i,j;
	for(i=0;i<3000;i++)
		for(j=0;j<num;j++);
}

Makefile

 

 

CC=arm-linux-gcc
LD=arm-linux-ld
led.bin:led.o start.o
	$(LD) -Ttext 0x0000000 -g start.o led.o -o led_elf
	arm-linux-objcopy -O binary -S led_elf led.bin	
	arm-linux-objdump -D -m arm  led_elf > led.dis
led.o:led.c
	$(CC)  -c -g -o led.o led.c
start.o:start.s
	$(CC)  -c -g -o start.o start.s
clean:
	rm -f led.bin led_elf led.dis start.o


其中有一个注意的地方,在Makefile中两个.o文件链接为一个led_elf文件时

 

由于没注意,写为:

 

$(LD) -Ttext 0x0000000 -g led.o start.o -o led_elf

导致无法点亮LED,是因为将led.o文件内容放到了0地址。

 

 

 


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值