通过汇编语言完成LED1-3循环点亮练习
.text
.global _start
_start:
/**********LED1点灯**************/
/*初始化RCC*/
RCC_INIT:
LDR R0,=0X50000A28
LDR R1,[R0]
ORR R1,R1,#(0X1<<4)
ORR R2,R1,#(0x1<<5)
STR R1,[R0]
STR R2,[R0]
LED1_INIT:
@设置输出模式
LDR R0,=0X50006000
LDR R1,[R0]
BIC R1,R1,#(0X3<<20) @清零
ORR R1,R1,#(0X1<<20) @设置
STR R1,[R0]
@设置为推挽输出
LDR R0,=0X50006004
LDR R1,[R0]
BIC R1,R1,#(0X1<<10) @先清零
STR R1,[R0]
@设置速度为低速
LDR R0,=0X50006008
LDR R1,[R0]
BIC R1,R1,#(0X3<<20) @先清零
STR R1,[R0]
@不设置上拉下拉电阻
LDR R0,=0X5000600C
LDR R1,[R0]
BIC R1,R1,#(0X3<<20) @先清零
STR R1,[R0]
LED2_INIT:
@设置输出模式
LDR R0,=0X50007000
LDR R1,[R0]
BIC R1,R1,#(0X3<<20) @清零
ORR R1,R1,#(0X1<<20) @设置
STR R1,[R0]
@设置为推挽输出
LDR R0,=0X50007004
LDR R1,[R0]
BIC R1,R1,#(0X1<<10) @先清零
STR R1,[R0]
@设置速度为低速
LDR R0,=0X50007008
LDR R1,[R0]
BIC R1,R1,#(0X3<<20) @先清零
STR R1,[R0]
@不设置上拉下拉电阻
LDR R0,=0X5000700C
LDR R1,[R0]
BIC R1,R1,#(0X3<<20) @先清零
STR R1,[R0]
LED3_INIT:
@设置输出模式
LDR R0,=0X50006000
LDR R1,[R0]
BIC R1,R1,#(0X3<<16) @清零
ORR R1,R1,#(0X1<<16) @设置
STR R1,[R0]
@设置为推挽输出
LDR R0,=0X50006004
LDR R1,[R0]
BIC R1,R1,#(0X1<<8) @先清零
STR R1,[R0]
@设置速度为低速
LDR R0,=0X50006008
LDR R1,[R0]
BIC R1,R1,#(0X3<<16) @先清零
STR R1,[R0]
@不设置上拉下拉电阻
LDR R0,=0X5000600C
LDR R1,[R0]
BIC R1,R1,#(0X3<<16) @先清零
STR R1,[R0]
loop:
BL LED1_ON
BL delay_1s
BL LED1_OFF
BL delay_1s
BL LED2_ON
BL delay_1s
BL LED2_OFF
BL delay_1s
BL LED3_ON
BL delay_1s
BL LED3_OFF
BL delay_1s
b loop
LED1_ON:
LDR R0,=0X50006014
LDR R1,[R0]
ORR R1,R1,#(0X1<<10) @设置
STR R1,[R0]
MOV PC,LR
LED1_OFF:
LDR R0,=0X50006014
LDR R1,[R0]
BIC 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
LED2_OFF:
LDR R0,=0X50007014
LDR R1,[R0]
BIC R1,R1,#(0X1<<10) @清零
STR R1,[R0]
LED3_ON:
LDR R0,=0X50006014
LDR R1,[R0]
ORR R1,R1,#(0X1<<8) @设置
STR R1,[R0]
MOV PC,LR
LED3_OFF:
LDR R0,=0X50006014
LDR R1,[R0]
BIC R1,R1,#(0X1<<8) @清零
STR R1,[R0]
@ 大概1s的延时函数
delay_1s:
mov r3, #0x10000000
mm:
cmp r3, #0
subne r3, r3, #1
bne mm
mov pc, lr
.end
效果展示:
思维导图