FS2410开发板测试LED的ADS汇编程序代码
2008-04-09 22:09
316 查看
今天写了一下这个代码:
;控制4个LED的亮灭
;寄存器地址
rGPFCON equ 0x56000050
rGPFDAT equ 0x56000054
rGPFUP equ 0x56000058
;常量定义
ledONDATA equ 0xfffffeff
ledOFFDATA equ 0xf0
delayCOUNT equ 0x2ffff
;LED个数
numLED equ 0x4
AREA led_on,CODE,READONLY
CODE32
ENTRY
start
mov sp,#0x0c700000 ;定义堆栈指针
ldr r0,=rGPFCON ;GPFCON
mov r1,#0x5500 ;GPF4~GPF7 out
str r1,[r0] ;GPF4~GPF7设置为输出
ldr r0,=rGPFUP ;GPFUP
ldr r1,=0xffff
str r1,[r0] ;禁止内部上拉
main_loop
ldr r0,=rGPFDAT ;GPFDAT
mov r4,#numLED ;装入LED个数作为循环次数
led_loop
ldr r1,=ledONDATA ;装入LED控制值
mov r1,r1,ror r4 ;循环显示
bl ledon
ldr r3,=delayCOUNT
bl delay
sub r4,r4,#1
cmp r4,#0x0
bne led_loop
ldr r1,=ledOFFDATA
bl ledoff ;全灭
ldr r3,=delayCOUNT
bl delay
b main_loop
;入口参数:
; r0:GPFDAT地址
; r1:LED亮控制值
ledon
ldr r2,[r0] ;读出GPFDAT当前值
and r2,r2,r1 ;进行LED亮控制
str r2,[r0] ;写入GPFDAT
mov pc,lr
;入口参数:
; r0:GPFDAT地址
; r1:LED灭控制值
ledoff
ldr r2,[r0] ;读出GPFDAT当前值
orr r2,r2,r1
str r2,[r0] ;写入GPFDAT
mov pc,lr
;入口参数
; r3:延时常数
delay
sub r3,r3,#1 ;r0=r0-1
cmp r3,#0x0 ;将r0的值与0相比较
bne delay ;比较的结果不为0(r0不为0),继续调用delay,否则执行下一条语句
mov pc,lr ;返回
end
-----------------------------------------------------------------------------------------------------------------------------------------------
对于其他的开发板,可能设计的控制LED的GPIO不同,仅需修改相应的部分即可。
;控制4个LED的亮灭
;寄存器地址
rGPFCON equ 0x56000050
rGPFDAT equ 0x56000054
rGPFUP equ 0x56000058
;常量定义
ledONDATA equ 0xfffffeff
ledOFFDATA equ 0xf0
delayCOUNT equ 0x2ffff
;LED个数
numLED equ 0x4
AREA led_on,CODE,READONLY
CODE32
ENTRY
start
mov sp,#0x0c700000 ;定义堆栈指针
ldr r0,=rGPFCON ;GPFCON
mov r1,#0x5500 ;GPF4~GPF7 out
str r1,[r0] ;GPF4~GPF7设置为输出
ldr r0,=rGPFUP ;GPFUP
ldr r1,=0xffff
str r1,[r0] ;禁止内部上拉
main_loop
ldr r0,=rGPFDAT ;GPFDAT
mov r4,#numLED ;装入LED个数作为循环次数
led_loop
ldr r1,=ledONDATA ;装入LED控制值
mov r1,r1,ror r4 ;循环显示
bl ledon
ldr r3,=delayCOUNT
bl delay
sub r4,r4,#1
cmp r4,#0x0
bne led_loop
ldr r1,=ledOFFDATA
bl ledoff ;全灭
ldr r3,=delayCOUNT
bl delay
b main_loop
;入口参数:
; r0:GPFDAT地址
; r1:LED亮控制值
ledon
ldr r2,[r0] ;读出GPFDAT当前值
and r2,r2,r1 ;进行LED亮控制
str r2,[r0] ;写入GPFDAT
mov pc,lr
;入口参数:
; r0:GPFDAT地址
; r1:LED灭控制值
ledoff
ldr r2,[r0] ;读出GPFDAT当前值
orr r2,r2,r1
str r2,[r0] ;写入GPFDAT
mov pc,lr
;入口参数
; r3:延时常数
delay
sub r3,r3,#1 ;r0=r0-1
cmp r3,#0x0 ;将r0的值与0相比较
bne delay ;比较的结果不为0(r0不为0),继续调用delay,否则执行下一条语句
mov pc,lr ;返回
end
-----------------------------------------------------------------------------------------------------------------------------------------------
对于其他的开发板,可能设计的控制LED的GPIO不同,仅需修改相应的部分即可。
相关文章推荐
- FS2410开发板的测试键盘的ADS汇编代码[原]
- 汇编中数据,代码,栈放入不同段程序代码测试
- C程序代码中内嵌as汇编(一、基础知识)
- C程序代码中内嵌as汇编(二、占位符)
- Linux下objdump查看C程序编译后的汇编代码
- 在.net程序中嵌入asm汇编代码
- 测试一段程序代码执行时间的方法
- 得到程序的汇编代码
- 一个新手为老代码写测试程序的心得
- 嵌入式串口测试程序代码
- 【转】 尺度不变特征变换(SIFT算法)Matlab程序代码测试例子说明(Lowe的代码)
- 【原创】DOS下TSR程序的汇编演示代码2--黑屏保护程序
- 收集Android程序测试代码覆盖率
- 一段汇编小程序及说明——将数据,代码,栈放入不同的段
- 云课堂 Linux内核分析 通过反汇编一个简单的C程序,分析汇编代码理解计算机是如何工作的
- 汇编语言32位控制台读取用户输入字符程序代码分析(17)
- 程序代码即测试代码
- led驱动测试程序
- 简单c程序汇编代码分析
- 6410led驱动模块及测试程序(独立控制四个led)