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_on
    BL led1_on
    bl delay
    BL led1_off
    BL led2_on
    bl delay
    BL led2_off
    BL led3_on
    bl delay
    BL led3_off
    BL power_on
    bl delay
    BL power_off
    BL wind_off
    b loop


@LED1亮
led1_on:
    LDR R0,=0x50006014
    LDR R1,[R0]
    ORR R1,R1,#(0x1<<10)
    STR R1,[R0] 
    mov pc,lr
@LED1灭
led1_off:
    LDR R0,=0x50006014
    LDR R1,[R0]
    BIC R1,R1,#(0x1<<10)
    STR R1,[R0] 
    mov pc,lr

    @LED2亮
led2_on:
    LDR R0,=0x50007014
    LDR R1,[R0]
    ORR R1,R1,#(0x1<<10)
    STR R1,[R0] 
    mov pc,lr
@LED2灭
led2_off:
    LDR R0,=0x50007014
    LDR R1,[R0]
    BIC R1,R1,#(0x1<<10)
    STR R1,[R0] 
    mov pc,lr

@LED3亮
led3_on:
    LDR R0,=0x50006014
    LDR R1,[R0]
    ORR R1,R1,#(0x1<<8)
    STR R1,[R0]
    mov pc,lr
@LED3灭
led3_off:
    LDR R0,=0x50006014
    LDR R1,[R0]
    BIC R1,R1,#(0x1<<8)
    STR R1,[R0] 
    mov pc,lr

    @POWER
power_on:
    LDR R0,=0x50007014
    LDR R1,[R0]
    ORR R1,R1,#(0x1<<6)
    STR R1,[R0] 
    mov pc,lr

power_off:
    LDR R0,=0x50007014
    LDR R1,[R0]
    BIC R1,R1,#(0x1<<6)
    STR R1,[R0] 
    mov pc,lr

    @WIND
wind_on:
    LDR R0,=0x50006014
    LDR R1,[R0]
    ORR R1,R1,#(0x1<<9)
    STR R1,[R0] 
    mov pc,lr
@LED1灭
wind_off:
    LDR R0,=0x50006014
    LDR R1,[R0]
    BIC R1,R1,#(0x1<<9)
    STR R1,[R0] 
    mov pc,lr

@封装汇编的延时函数
delay:
    LDR R1,=0X10000000
mm:
    cmp R1,#0
    SUBNE R1,R1,#1
    BNE mm
    mov pc,lr




.end

现象:

xianxiang

你可能感兴趣的:(arm开发)