start.s

 1 .globl _start
 2 _start:
 3   ldr r0, =0x70000000
 4   orr r0, r0, #0x13
 5   mcr p15, 0, r0, c15, c2, 4
 6 
 7   ldr r0, =0x7E004000
 8   mov r1, #0
 9   str r1, [r0]
10 
11   bl clock_init
12 
13   ldr sp, =8*1024
14   bl main
15 
16 halt:
17   b halt

clock.s

  1 .globl clock_init
  2 clock_init:
  3   ldr r0, =0x7E00F000
  4   ldr r1, =0x0000FFFF
  5   str r1, [r0]
  6 
  7   str r1, [r0,#4]
  8   str r1, [r0,#8]
  9 
 10   ldr r0, =0x7E00F900
 11   ldr r1, [r0]
 12   bic r1, r1, #0xC0
 13   str r1, [r0]
 14 
 15 loop1:
 16   ldr r0, =0x7E00F900
 17   ldr r1, [r0]
 18   and r1, r1, #0xF00
 19   cmp r1, #0
 20   bne loop1
 21 
 22 #define ARM_RATIO 0
 23 #define HCLKX2_RATIO 1
 24 #define HCLK_RATIO 1
 25 #define PCLK_RATIO 3
 26 #define MPLL_RATIO 0
 27   ldr r0, =0x7E00F020
 28   @ (ARM_RATIO)|(MPLL_RATIO << 4)|(HCLK_RATIO << 8)|(HCLKX2_RATIO << 9)|(PCLK_RATIO << 12)
 29   ldr r1, =(0)|(0 << 4)|(1 << 8)|(1 << 9)|(3 << 12)
 30   str r1, [r0]
 31 
 32   @ #define APLL_CON_VAL ((1<<31)|(266<<6)|(3<<8)|(1))
 33   ldr r0, =0x7E00F00C
 34   ldr r1, =(1<<31)|(266<<6)|(3<<8)|(1)
 35   str r1, [r0]
 36 
 37   @ #define MPLL_CON_VAL ((1<<31)|(266<<16)|(3<<8)|(1))
 38   ldr r0, =0x7E00F010
 39   ldr r1, =(1<<31)|(266<<16)|(3<<8)|(1)
 40   str r1, [r0]
 41 
 42   ldr r0, =0x7E00F01C
 43   ldr r1, =0x03
 44   str r1, [r0]
 45 
 46   mov pc, lr

led.c

 1 void delay()
 2 {
 3   volatile int i = 0x10000;
 4   while(i--);
 5 }
 6 
 7 int main()
 8 {
 9   int i = 0;
10   volatile unsigned long *gpmcon = (volatile unsigned long *)0x7E008820;
11   volatile unsigned long *gpmdat = (volatile unsigned long *)0x7F008824;
12 
13   while(1)
14   {
15     *gpmdat = i;
16     i ++;
17     if(i == 16)
18       i = 0;
19     delay();
20   }
21 
22   return 0;
23 }

Makefile

led.bin:start.o clock.o led.o
        arm-linux-ld -Ttext 0 -o led.elf start.o clock.o led.o
        arm-linux-objcopy -O binary led.elf led.bin
        arm-linux-objdump -D led.elf > led.dis
%.o:%.s
        arm-linux-gcc-4.2.2 -o $@ $< -c
%.o:%.c
        arm-linux-gcc-4.2.2 -o $@ $< -c
clean:
        rm *.o led.elf led.bin led.dis

 

posted on 2015-09-17 12:29  ChunJian-YANG  阅读(54)  评论(0)    收藏  举报