2.点亮一盏LED(Thumb和ARM语言实现)

;================================================
;文件名称:thumb_arm.s
;摘    要:GEC2440开发板,点亮LED灯,相关LED1接GPB5

;当前版本:1.0
;作    者:tzf
;完成日期:2012-6
;================================================

;GPIO寄存器宏定义
GPBCON EQU 0x56000010
GPBDAT EQU 0x56000014
GPBUP EQU 0x56000018

 EXPORT THUMBTEST      
 AREA LEDTESTASM, CODE, READONLY ;该伪指令定义了一个代码段,段名为LEDTESTASM
 CODE32        ;32位
 ENTRY        ;入口

THUMBTEST
 ;设置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

;将数据端口B的数据寄存器的地址赋给寄存器r2
 ldr r2, =GPBDAT

led_on 
 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
 adr r4, delay1+1
 bx r4   ;调用延时子程序

led_off
 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
 adr r4, delay2+1
 bx r4   ;调用延时子程序

; b looptest  ;实现死循环while(1)


;进入Thumb模式
 AREA LEDTESTASM, CODE, READONLY ;该伪指令定义了一个代码段,段名为LEDTESTASM
 CODE16        ;16位
delay1
 sub r0, r0, #0x1 ;r0 = r0 - 1
 cmp r0, #0x0  ;将r0的值与0相比较
 bne delay1   ;比较的结果不为0(r0不为0), 继续调用delay1,否则执行下一条语句

 ldr r1, =led_off
 ;bx lr    ;BX LR来完成子程序返回
 bx r1

delay2
 sub r0, r0, #0x1 ;r0 = r0 - 1
 cmp r0, #0x0  ;将r0的值与0相比较
 bne delay2   ;比较的结果不为0(r0不为0), 继续调用delay2,否则执行下一条语句

 ldr r1, =led_on
 ;bx lr    ;BX LR来完成子程序返回
 bx r1
       
 END     ;程序结束符

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值