2440裸板程序之点灯

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段的地址(指针)。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值