1.点亮一盏LED(ARM汇编实现)

来源:互联网 发布:c gui qt 4编程 编辑:程序博客网 时间:2024/05/22 15:08

1.点亮一盏LED

 

1.1步骤:

 

1.1.1查看原理图

结果:GPB5输出低电平时,LED1亮

即nLED1 GPB5 = 0ON

GBP5 = 1OFF

 

1.1.2查看datasheet结果:需要控制GPBCONGPBDATGPBUP3个寄存器

 

 

 

 

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                 ;程序结束符