1. 程式人生 > >s3c2440裸板程式四個led輪流滅

s3c2440裸板程式四個led輪流滅

   這個程式是基於s3c2440 上編寫的,程式是根據韋東山老師的教程編寫出來的,但是韋東山是針對6410的,所特在此記錄一下學習的過程。

這個程式是通過彙編程式碼來編寫啟動程式碼,然後呼叫c語言程式碼來實現的。程式的編寫環境式linux。

(1)首先新建一個leds3.s 檔案,輸入內容如下:

-------------分割線--------------------

.globl _start
_start:

/* 硬體相關的設定:*/
/* Peripheral port setup (檢視s3c2440 memory map ) */
/* 基地址+size*/
/* 檢視s3c2440晶片說明 和 arm926ej-s cp15*/
ldr r0, =0x50000000
orr r0,r0,#0x08
mcr p15,0,r0,c15,c2,4    @128k(0x50000000-0x5000FFFF)

/* 關看門狗      看門狗每三秒就會重啟系統,所以需要把看門狗關掉 */
/* 往 WTCON(0x53000000)寫0*/
ldr r0, =0x53000000
mov r1, #0
str r1, [r0]

/*設定棧

設定sp指標的指向,儘量使sp在SRAM之外,因為SRAM為4k所以這裡指向4*1024

*/
ldr sp, = 4*1024   @檢視SRAM
bl main          @這裡呼叫的是C語言
halt:
    b halt

-------------分割線--------------------

(2)再新建一個led3.c 檔案,輸入內容如下:

-------------分割線--------------------

void delay(){
    volatile int i = 0x20000;
    while(i--);
}
/*在這裡定義了leds3.s 檔案所呼叫了的main 函式*/
int main()
{
    int i = 0x010 ;
    volatile unsigned long *gpbcon = (volatile unsigned long *) 0x56000010;     //0x56000010是GPBCON暫存器的地址
    volatile unsigned long *gpbdat = (volatile unsigned long *) 0x56000014;     //0x56000014是GPBDAT暫存器的地址
    
    /*配置四個led燈為輸出*/

   /*檢視TQ2440底板原理圖和核心板原理圖得到led1,led2,led3,led4分別連線到GPB5,GPB6,GPB7,GPB8上

  再檢視s3c2440晶片手冊得到配置GPB[5:8]為輸出的方式*/
    *gpbcon = 0x15400 ;

    while(1){
    //i= 0000 0001 0000 。GPB5,GPB6,GPB7,GPB8都為0,GPB4為1
        *gpbdat = i ;  
        i = i<<1;
        if(i == 0x200) // 0x200 = 0010 0000 0000
            i = 0x10;
        delay();
    }
    return 0;
}

-------------分割線--------------------

(3)最後新建MakeFile,輸入內容如下:

-------------分割線--------------------

led3.bin: leds3.o led3.o
    arm-linux-ld -Ttext 0 -o led3.elf leds3.o led3.o
    arm-linux-objcopy -O binary led3.elf led3.bin
    arm-linux-objdump -D led3.elf > led3.dis

leds3.o : leds3.s
    arm-linux-gcc -o leds3.o leds3.s -c
led3.o : led3.c
    arm-linux-gcc -o led3.o led3.c -c

clean:
    rm *.o led3.elf led3.bin led3.dis

 -------------分割線--------------------

最後在linux下執行make編譯即可得到我要的led3.bin。

程式碼:http://download.csdn.net/detail/u014699958/8888597