通过代码实现LED流水灯效果
.text
.global _start
_start:
@使能SPIOE的外设时钟
LDR R0,=0x50000A28 @让R0保存寄存器地址
LDR R1,[R0] @将R0为首地址的四字节数据读取到R1中
ORR R1,R1,#(0x3<<4) @将第四位设置为1,其他位不变
@ORR R1,R1,#(0x1<<5)
STR R1,[R0] @将修改后的数值写回
@设置PE10为输出模式
LDR R0,=0x50006000 @让R0保存寄存器地址
LDR R1,[R0] @将R0为首地址的四字节数据读取到R1中
BIC R1,R1,#(0x3<<20)
BIC R1,R1,#(0x3<<16)
ORR R1,R1,#(0x1<<20)
ORR R1,R1,#(0x1<<16)
STR R1,[R0] @将修改后的数值写回
LDR R0,=0x50007000
LDR R1,[R0]
BIC R1,R1,#(0x3<<20)
ORR R1,R1,#(0x1<<20)
STR R1,[R0]
@设置PE10为推挽模式
LDR R0,=0x50006004 @让R0保存寄存器地址
LDR R1,[R0] @将R0为首地址的四字节数据读取到R1中
BIC R1,R1,#(0x1<<10)
BIC R1,R1,#(0x1<<8)
STR R1,[R0]
LDR R0,=0x50007004
LDR R1,[R0]
BIC R1,R1,#(0x1<<10)
STR R1,[R0]
@设置PE10为低速输出
LDR R0,=0x50006008 @让R0保存寄存器地址
LDR R1,[R0] @将R0为首地址的四字节数据读取到R1中
BIC R1,R1,#(0x3<<20)
BIC R1,R1,#(0x3<<16)
STR R1,[R0]
LDR R0,=0x50007008
LDR R1,[R0]
BIC R1,R1,#(0x3<<20)
STR R1,[R0]
@设置无上拉下拉电阻
LDR R0,=0x5000600c @让R0保存寄存器地址
LDR R1,[R0] @将R0为首地址的四字节数据读取到R1中
BIC R1,R1,#(0x3<<20)
BIC R1,R1,#(0x3<<16)
STR R1,[R0]
LDR R0,=0x5000700c
LDR R1,[R0]
BIC R1,R1,#(0x3<<20)
STR R1,[R0]
main:
bl led1_on
bl delay
bl led1_close
bl led2_on
bl delay
bl led2_close
bl led3_on
bl delay
bl led3_close
bl main
led1_on:
@点亮灯
LDR R0,=0x50006014 @让R0保存寄存器地址
LDR R1,[R0] @将R0为首地址的四字节数据读取到R1中
ORR R1,R1,#(0x1<<10)
STR R1,[R0]
mov pc,lr
led2_on:
LDR R0,=0x50007014
LDR R1,[R0]
ORR R1,R1,#(0x1<<10)
STR R1,[R0]
mov pc,lr
led3_on:
LDR R0,=0x50006014
LDR R1,[R0]
ORR R1,R1,#(0x1<<8)
STR R1,[R0]
mov pc,lr
delay:
LDR R3,=0x5000000
rm:
cmp R3,#0
subne R3,R3,#1
bne rm
mov pc,lr
led1_close:
LDR R0,=0x50006014
LDR R1,[R0]
BIC R1,R1,#(0x1<<10)
STR R1,[R0]
mov pc,lr
led2_close:
LDR R0,=0x50007014
LDR R1,[R0]
BIC R1,R1,#(0x1<<10)
STR R1,[R0]
mov pc,lr
led3_close:
LDR R0,=0x50006014
LDR R1,[R0]
BIC R1,R1,#(0x1<<8)
STR R1,[R0]
mov pc,lr
.end