天天看點

1.點亮一盞LED(ARM彙編實作)1.點亮一盞LED 

1.點亮一盞LED

1.1步驟:

1.1.1檢視原理圖

1.點亮一盞LED(ARM彙編實作)1.點亮一盞LED 

結果:GPB5輸出低電平時,LED1亮

即nLED1 GPB5 = 0ON

GBP5 = 1OFF

1.1.2檢視datasheet結果:需要控制GPBCON、GPBDAT、GPBUP這3個寄存器

1.點亮一盞LED(ARM彙編實作)1.點亮一盞LED 

即GPB5 = 01(設為輸出)

GPBDAT = 0(設為低電平)

GPBUP = 1(設為停止使用上拉電阻)

1.1.3實作代碼

;================================================

;檔案名稱:LED_ASM.s

;摘    要:GEC2440開發闆,點亮LED燈,相關LED1接GPB5

;目前版本:1.0

;作    者:tzf

;完成日期:2012-6

;================================================

;GPIO寄存器宏定義

GPBCON EQU 0x56000010

GPBDAT EQU 0x56000014

GPBUP  EQU 0x56000018

    EXPORT LEDTEST      

    AREA LEDTESTASM, CODE, READONLY ;該僞指令定義了一個代碼段,段名為LEDTESTASM

    ENTRY                           ;入口

LEDTEST

    ;設定GPB5為輸出 00:input 01:output

    ldr r0, =GPBCON  

    ldr r1, [r0]

    bic r1, r1, #0x0C00 ;b00 0000 0000 1100 0000 0000 

                       ;0x0C00 0x2000 0xC000 0x20000

    orr r1, r1, #0x400  ;b00 0000 0000 0100 0000 0000

    str r1, [r0]

    ;禁止GPB5端口的上拉電阻 0:上拉使能 1:禁止上拉

    ldr r0, =GPBUP

    ldr r1, [r0]

    orr r1, r1, #0x20   ;b000 0010 0000

    str r1, [r0]

looptest

    ldr r2, =GPBDAT

    ldr r3, [r2]

    bic r3, r3, #0x20   ;b00 0010 0000 -> b11 1101 1111

    orr r3, r3, #0x0    ;b00 0000 0000 -> b11 1101 1111

    str r3, [r2]        ; GPB5輸出1

    ldr r0, =0x2fffff

    bl delay            ;調用延時子程式

    ldr r3, [r2]

    bic r3, r3, #0x20   ;b00 0010 0000 -> b11 1101 1111 0x2 0x4 0x8 0xA

    orr r3, r3, #0x20   ;b00 0010 0000 -> b11 1111 1111

    str r3, [r2]        ; GPB5輸出0

    ldr r0, =0x2fffff

    bl delay            ;調用延時子程式

    b looptest          ;實作死循環while(1)

delay

    sub r0, r0, #0x1    ;r0 = r0 - 1

    cmp r0, #0x0        ;将r0的值與0相比較

    bne delay           ;比較的結果不為0(r0不為0), 繼續調用delay,否則執行下一條語句

    ; mov pc, lr        ;有警告

    bx lr               ;可以使用MOV PC, LR或者BX LR來完成子程式傳回

    END                 ;程式結束符