//Makefile文件
led.bin: led.o 
    arm-linux-ld -Ttext 0x0 -o led.elf $^
    arm-linux-objcopy -O binary led.elf led.bin
    
%.o : %.S
    arm-linux-gcc -o $@ $< -c
%.o : %.c
    arm-linux-gcc -o $@ $< -c 
clean:
    rm *.o *.elf *.bin   -f
//led.S  GPJ0 3 5引脚常亮
#define GPJ0CON        0xE0200240
#define GPJ0DAT        0xE0200244
.global _start
_start:
    ldr r0, =0x11111111        //所有引脚设置为输出模式对应的16进制数
    ldr r1, =GPJ0CON        //GPJ0CON  寄存器位置
    str r0, [r1]            //把r0中的数存到r1指向的地方
    
    ldr r0, =0xd7            //3 5位拉低,其他位拉高
    ldr r1, =GPJ0DAT        //GPJ0DAT 寄存器位置
    str r0, [r1]                //把r0中的数存到r1指向的地方
    
flag:
    b flag                    //死循环  或  b.
//led.S 使用寄存器操作 3 4引脚常亮
#define GPJ0CON        0xE0200240
#define GPJ0DAT        0xE0200244
.global _start
_start:
    ldr r0, =0x11111111        //所有引脚设置为输出模式对应的16进制数
    ldr r1, =GPJ0CON        //GPJ0CON  寄存器位置
    str r0, [r1]            //把r0中的数存到r1指向的地方
    
    ldr r0, =~((1<<3) | (1<<4))        //3 4位拉低,其他位拉高
    ldr r1, =GPJ0DAT        //GPJ0DAT 寄存器位置
    str r0, [r1]                //把r0中的数存到r1指向的地方
    
    b.            //死循环
//led.S 延时,流水灯效果
#define GPJ0CON        0xE0200240
#define GPJ0DAT        0xE0200244
.global _start
_start:
    ldr r0, =0x11111111        //所有引脚设置为输出模式对应的16进制数
    ldr r1, =GPJ0CON        //GPJ0CON  寄存器位置
    str r0, [r1]            //把r0中的数存到r1指向的地方
    
    ldr r0, =~(1<<3)        //3 位拉低,其他位拉高
    ldr r1, =GPJ0DAT        //GPJ0DAT 寄存器位置
    str r0, [r1]                //把r0中的数存到r1指向的地方
    
    bl delay
    
    ldr r0, =~(1<<4)        // 4位拉低,其他位拉高
    ldr r1, =GPJ0DAT        //GPJ0DAT 寄存器位置
    str r0, [r1]                //把r0中的数存到r1指向的地方
    
    bl delay
    
    ldr r0, =~(1<<5)        //5位拉低,其他位拉高
    ldr r1, =GPJ0DAT        //GPJ0DAT 寄存器位置
    str r0, [r1]                //把r0中的数存到r1指向的地方
    
    bl delay
    
    b _start                //死循环  
    
    
    
delay:
    ldr r2, =9000000
    ldr r3, =0x0
delay_loop:
    sub r2, r2, #1        //r2 = r2 -r1
    cmp r2, r3            //cmp影响Z标志位,如果r2等于r3,则Z=1,下一句中eq就会成立
    bne delay_loop      //如果Z等于0,则ne成立,该句执行
    
    mov pc, lr            //如果Z不等于0,则该句执行