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

2019-07-12 23:45发布

学习嵌入式linux的小白,欢迎交流 QQ:1300046380 此文为对于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 haltled.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;jMakefile 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地址。