汇编流水灯
.text
.global _start
_start:
@设置GPIOE寄存器的时钟使能 RCC_MP_AHB4ENSETR[4]->1 0X50000a28
LDR R0,=0X50000a28
LDR R1,[R0] @从r0寄存器为起始地址的4字节数据取出来,放到r1
ORR R1,R1,#(0x1<<4) @第四位设置为1
ORR R1,R1,#(0x1<<5) @第五为设置为1
STR R1,[R0] @把R1的值写回R0
@设置PE10和PE8管脚为输出模式 GPIOE_MODER[21:20]->01
LDR R0,=0X50006000
LDR R1,[R0]
BIC R1,R1,#(0X3<<20)
ORR R1,R1,#(0X1<<20)
BIC R1,R1,#(0x3<<16)
ORR R1,R1,#(0x1<<16)
STR R1,[R0]
@设置PF10管脚为输出模式 GPIOE_MODER[21:20]->01
LDR R0,=0X50007000
LDR R1,[R0]
BIC R1,R1,#(0X3<<20)
ORR R1,R1,#(0X1<<20)
STR R1,[R0]
@设置PE10和PE8管脚为推挽输出 GPIOE_OTYPER[10]->0
LDR R0,=0X50006004
LDR R1,[R0]
BIC R1,R1,#(0X1<<10)
BIC R1,R1,#(0X1<<8)
STR R1,[R0]
@设置PF10管脚为推挽输出 GPIOE_OTYPER[10]->0
LDR R0,=0X50007004
LDR R1,[R0]
BIC R1,R1,#(0X1<<10)
STR R1,[R0]
@设置PE10和PE8管脚为低速输出 GPIOE_OSPEEDR[21:20]->00
LDR R0,=0X50006008
LDR R1,[R0]
BIC R1,R1,#(0X3<<20)
BIC R1,R1,#(0x3<<16)
STR R1,[R0]
@设置PF10管脚为低速输出 GPIOE_OSPEEDR[21:20]->00
LDR R0,=0X50007008
LDR R1,[R0]
BIC R1,R1,#(0X3<<20)
STR R1,[R0]
@设置PE10和PE8管脚输出时没有上拉下拉电阻 GPIOE_PUPDR[21:20]->00 0x5000600c
LDR R0,=0X5000600C
LDR R1,[R0]
BIC R1,R1,#(0X3<<20)
BIC R1,R1,#(0X3<<16)
STR R1,[R0]
@设置PF10管脚输出时没有上拉下拉电阻 GPIOE_PUPDR[21:20]->00 0x5000600c
LDR R0,=0X5000600C
LDR R1,[R0]
BIC R1,R1,#(0X3<<20)
BIC R1,r1,#(0x3<<16)
STR R1,[R0]
@设置PE10管脚输出高低电平 GPIOE_ODR[10]->1(高电平) 0(低电平) 0x50006014
@LED1亮灭交替
loop1:
LDR R0,=0X50006014
LDR R1,[R0]
ORR R1,R1,#(0X1<<10)
STR R1,[R0]
BL delay
@灭
LDR R0,=0X50006014
LDR R1,[R0]
BIC R1,R1,#(0X1<<10)
STR R1,[R0]
BL delay
b loop2
loop2:
@led2亮
LDR R0,=0X50007014
LDR R1,[R0]
ORR R1,R1,#(0X1<<10)
STR R1,[R0]
BL delay
@led2灭
LDR r0,=0X50007014
LDR r1,[r0]
BIC R1,R1,#(0x1<<10)
STR R1,[R0]
BL delay
b loop3
loop3:
@LED3亮
LDR R0,=0X50006014
LDR R1,[R0]
ORR R1,R1,#(0X1<<8)
STR R1,[R0]
BL delay
@LED3灭
LDR R0,=0X50006014
LDR R1,[R0]
BIC R1,R1,#(0X1<<8)
STR R1,[R0]
BL delay
b loop1
@封装延时函数
delay:
LDR R4,=0X10000000
mm:
cmp r4,#0
subne r4,r4,#1
bne mm
mov pc,lr @程序返回
.end