LED对应的引脚是GPF4、GPF5、GPF6。
使用的编译器为arm-linux-gcc-4.5.1。
包括四个文件head.S main.c main.lds Makefile。
head.S
.text
.global _start
_start:
ldr r0, =0x53000000 @Close WATCHDOG
mov r1, #0x0
str r1, [r0]
ldr sp, =1024*4
ldr lr,=loop
bl main @Call C
loop:
b loop
main.c
#define GPFCON (*(volatile unsigned long *)0x56000050)
#define GPFDAT (*(volatile unsigned long *)0x56000054)
#define GPF4_out (1<<(4*2))
#define GPF5_out (1<<(5*2))
#define GPF6_out (1<<(6*2))
#define GPF7_out (1<<(7*2))
void wait(volatile unsigned long dly)
{
for(; dly > 0; dly--);
}
int main(void)
{
unsigned long i = 0;
GPFCON = GPF4_out|GPF5_out|GPF6_out; //Configure the gpio of led
while(1){
wait(30000);
GPFDAT = (~(i<<4)); //Turn
if(++i == 8)
i = 0;
}
return 0;
}
man.lds
SECTIONS {
first 0x00000000 : { head.o main.o}
//second 0x30000000 : AT(1024) { main.o }
}
Makefile
objs = head.o main.o
all: $(objs)
arm-linux-ld -T main.lds $^ -o main.elf
arm-linux-objcopy -O binary -S main.elf main.bin
arm-linux-objdump -D main.elf > main.dis
clean:
rm -f *.bin $(objs) *.elf *.dis
%.o : %.c
arm-linux-gcc -march=armv4 -c -o $@ $<
%.o : %.S
arm-linux-gcc -march=armv4 -c -o $@ $<
PS:
在c文件中声明int a = 3;
在s文件中声明.long a,那么这个地址存放的就是a在data段的地址(指针)。