本文主要是介绍arm裸机测试led灯亮灭、风扇、马达等,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
汇编代码:
.text
.global _start
_start:
@RCC使能GPIOE RCC_MP_AHB4ENSETR[4]->1
LDR R0,=0X50000A28
LDR R1,[R0]
ORR R1,R1,#(0X3<<4)
ORR R1,R1,#0X10@PB
STR R1,[R0]
@设置PE10/8为输出模式 GPIOE_MODER[20:21]->01
LDR R0,=0X50006000
LDR R1,[R0]
@10
BIC R1,R1,#(0X3<<20)
ORR R1,R1,#(0X1<<20)
@8
BIC R1,R1,#(0X3<<16)
ORR R1,R1,#(0X1<<16)
@9
BIC R1,R1,#(0X3<<18)
ORR R1,R1,#(0X1<<18)
STR R1,[R0]
@设置PF10为输出模式 GPIOE_MODER[20:21]->01
LDR R0,=0X50007000
LDR R1,[R0]
@10
BIC R1,R1,#(0X3<<20)
ORR R1,R1,#(0X1<<20)
@6
BIC R1,R1,#(0X3<<12)
ORR R1,R1,#(0X1<<12)
STR R1,[R0]
@设置PE10为推挽输出 GPIOE_OTYPER[10]->0
LDR R0,=0X50006004
LDR R1,[R0]
@10
BIC R1,R1,#(0X1<<10)
@8
BIC R1,R1,#(0X1<<8)
@9
BIC R1,R1,#(0X1<<9)
STR R1,[R0]
@设置PF10为推挽输出 GPIOE_OTYPER[10]->0
LDR R0,=0X50007004
LDR R1,[R0]
@10
BIC R1,R1,#(0X1<<10)
@6
BIC R1,R1,#(0X1<<6)
STR R1,[R0]
@设置PE10为低速输出 GPIOE_OSPEEDR[20:21]->00
LDR R0,=0X50006008
LDR R1,[R0]
@10
BIC R1,R1,#(0X1<<20)
@8
BIC R1,R1,#(0X1<<16)
@9
BIC R1,R1,#(0X1<<18)
STR R1,[R0]
@设置PF10为低速输出 GPIOE_OSPEEDR[20:21]->00
LDR R0,=0X50007008
LDR R1,[R0]
@10
BIC R1,R1,#(0X3<<20)
@6
BIC R1,R1,#(0X1<<12)
STR R1,[R0]
@设置PE10为输出无上下拉 GPIOE_PUPDR[20:21]->00
LDR R0,=0X5000600C
LDR R1,[R0]
@10
BIC R1,R1,#(0X1<<20)
@8
BIC R1,R1,#(0X1<<16)
@9
BIC R1,R1,#(0X1<<18)
STR R1,[R0]
@设置PF10为输出无上下拉 GPIOE_PUPDR[20:21]->00
LDR R0,=0X5000700C
LDR R1,[R0]
@10
BIC R1,R1,#(0X3<<20)
@6
BIC R1,R1,#(0X1<<12)
STR R1,[R0]@闪烁loop:BL wind_onBL led1_onbl delayBL led1_offBL led2_onbl delayBL led2_offBL led3_onbl delayBL led3_offBL power_onbl delayBL power_offBL wind_offb loop@LED1亮
led1_on:LDR R0,=0x50006014LDR R1,[R0]ORR R1,R1,#(0x1<<10)STR R1,[R0] mov pc,lr
@LED1灭
led1_off:LDR R0,=0x50006014LDR R1,[R0]BIC R1,R1,#(0x1<<10)STR R1,[R0] mov pc,lr@LED2亮
led2_on:LDR R0,=0x50007014LDR R1,[R0]ORR R1,R1,#(0x1<<10)STR R1,[R0] mov pc,lr
@LED2灭
led2_off:LDR R0,=0x50007014LDR R1,[R0]BIC R1,R1,#(0x1<<10)STR R1,[R0] mov pc,lr@LED3亮
led3_on:LDR R0,=0x50006014LDR R1,[R0]ORR R1,R1,#(0x1<<8)STR R1,[R0]mov pc,lr
@LED3灭
led3_off:LDR R0,=0x50006014LDR R1,[R0]BIC R1,R1,#(0x1<<8)STR R1,[R0] mov pc,lr@POWER
power_on:LDR R0,=0x50007014LDR R1,[R0]ORR R1,R1,#(0x1<<6)STR R1,[R0] mov pc,lrpower_off:LDR R0,=0x50007014LDR R1,[R0]BIC R1,R1,#(0x1<<6)STR R1,[R0] mov pc,lr@WIND
wind_on:LDR R0,=0x50006014LDR R1,[R0]ORR R1,R1,#(0x1<<9)STR R1,[R0] mov pc,lr
@LED1灭
wind_off:LDR R0,=0x50006014LDR R1,[R0]BIC R1,R1,#(0x1<<9)STR R1,[R0] mov pc,lr@封装汇编的延时函数
delay:LDR R1,=0X10000000
mm:cmp R1,#0SUBNE R1,R1,#1BNE mmmov pc,lr.end
现象:
xianxiang
这篇关于arm裸机测试led灯亮灭、风扇、马达等的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!