1.汇编源代码
.text
.global _start
_start:
@设置GPIOF寄存器的时钟使能
LDR R0,=0X50000A28
LDR R1,[R0]
ORR R1,R1,#(0x1<<5)
STR R1,[R0]
@设置GPIOE寄存器的时钟使能
LDR R0,=0X50000A28
LDR R1,[R0] @从r0为起始地址的4字节数据取出放在R1
ORR R1,R1,#(0x1<<4) @第4位设置为1
STR R1,[R0] @写回
@设置PE10管脚为输出模式 GPIOE_MODER[21:20]->01 0x50006000
LDR R0,=0x50006000
LDR R1,[R0]
BIC R1,R1,#(0x3<<20)@[21L20]清0
ORR R1,R1,#(0X1<<20) @设置
STR R1,[R0]
@设置PF10管脚为输出模式
LDR R0,=0x50007000
LDR R1,[R0]
BIC R1,R1,#(0x3<<20)
ORR R1,R1,#(0x1<<20)
STR R1,[R0]
@设置PE8管脚为输出模式
LDR R0,=0x50006000
LDR R1,[R0]
BIC R1,R1,#(0x3<<16) @[17:16]清0
ORR R1,R1,#(0X1<<16) @设置1
STR R1,[R0]
@设置PE10管脚为推挽输出 GPIOE_OTYPER[10]->0 0X50006004
LDR R0,=0X50006004
LDR R1,[R0]
BIC R1,R1,#(0X1<<10)
STR R1,[R0]
@设置PF10管脚为推挽输出
LDR R0,=0X50007004
LDR R1,[R0]
BIC R1,R1,#(0X1<<10)
STR R1,[R0]
@设置PE8管脚为推挽输出 GPIOE_OTYPER[10]->0 0X50006004
LDR R0,=0X50006004
LDR R1,[R0]
BIC R1,R1,#(0X1<<8)
STR R1,[R0]
@设置PE10管脚为低速输出 GPIOE_OSPEEDR[21:20]->00 0X50006008
LDR R0,=0x50006008
LDR R1,[R0]
BIC R1,R1,#(0x3<<20)@[21L20]清0
STR R1,[R0]
@设置PF10管脚为低速输出
LDR R0,=0x50007008
LDR R1,[R0]
BIC R1,R1,#(0x3<<20)@[21L20]清0
STR R1,[R0]
@设置PE8管脚为低速输出 GPIOE_OSPEEDR[21:20]->00 0X50006008
LDR R0,=0x50006008
LDR R1,[R0]
BIC R1,R1,#(0x3<<16) @[17:16]清0
STR R1,[R0]
@设置PE10管脚输出时没有上拉下拉电阻 GPIOE_PUPDR[21:20]->00 0X5000600C
LDR R0,=0x5000600c
LDR R1,[R0]
BIC R1,R1,#(0x3<<20)@[21L20]清0
STR R1,[R0]
@设置PE8管脚输出时没有上拉下拉电阻 GPIOE_PUPDR[21:20]->00 0X5000600C
LDR R0,=0x5000600c
LDR R1,[R0]
BIC R1,R1,#(0x3<<16)@[17:16]清0
STR R1,[R0]
@设置PF10管脚输出时没有上拉下拉电阻
LDR R0,=0x5000700c
LDR R1,[R0]
BIC R1,R1,#(0x3<<20)@[21L20]清0
STR R1,[R0]
@ 6.PE10输出高低电平 GPIOE_ODR[10]->1(高电平) 0(低电平) 0X50006014
@LED1亮灭交替
loop:
@led1亮
LDR R0,=0X50006014
LDR R1,[R0]
ORR R1,R1,#(0x1<<10)
STR R1,[R0]
BL delay
@led2灭
LDR R0,=0X50006014
LDR R1,[R0]
BIC R1,R1,#(0x1<<10)
STR R1,[R0]
BL delay
@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
@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 loop
@封装延时函数
delay:
LDR R4,=0X10000000
mm:
cmp r4,#0
subne r4,r4,#1
bne mm
mov pc,lr @程序返回
.end
2.实验现象文章来源:https://www.toymoban.com/news/detail-729950.html
文章来源地址https://www.toymoban.com/news/detail-729950.html
到了这里,关于ARM:使用汇编完成三个灯流水亮灭的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!