学习嵌入式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 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;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地址。