您的位置:首页 > 其它

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

2012-06-07 19:37 225 查看
;================================================

;文件名称: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
4000
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     ;程序结束符
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  语言 delay input c