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

来源:互联网 发布:java算法书籍推荐 编辑:程序博客网 时间:2024/06/06 07:51

学习嵌入式linux的小白,欢迎交流 QQ:1300046380

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

废话不说,先上代码。

start.s

.text.global _start_start:ldr r0 ,= 0x53000000 @WATCHDOG ADDmov r1,#0x0strr1,[r0]@r1 的数据写入r0 关看门狗ldrsp,=1024*4@设置栈bl main@跳转到main执行 halt:bhalt
led.c

#defineGPFCON(*(volatile unsigned long *)0x56000050)#defineGPFDAT(*(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-gccLD=arm-linux-ldled.bin:led.o start.o$(LD) -Ttext 0x0000000 -g start.o led.o -o led_elfarm-linux-objcopy -O binary -S led_elf led.binarm-linux-objdump -D -m arm  led_elf > led.disled.o:led.c$(CC)  -c -g -o led.o led.cstart.o:start.s$(CC)  -c -g -o start.o start.sclean: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地址。



原创粉丝点击