循环亮灯

.text

.global _start

_start:

bl LED1_INIT

bl LED1_ON

bl delay_1s

bl LED1_OFF

bl LED2_INIT

bl LED2_ON

bl delay_1s

bl LED2_OFF

bl LED3_INIT

bl LED3_ON

bl delay_1s

bl LED3_OFF

bl _start

/**********LED1点灯PE10**************/

LED1_INIT:

@1.通过RCC_HB4_ENSETR寄存器设置GPIOE组时钟使能

ldr r0,=0x50000A28

ldr r1,[r0]

orr r1,r1,#(0x1 << 4)

str r1,[r0]

@2.通过GPIOE_MODER寄存器设置PE10引脚为输出模式

ldr r0,=0x50006000

ldr r1,[r0]

and r1,r1,#(~(0x3 << 20))

orr r1,r1,#(0x1 << 20)

str r1,[r0]

@3.通过GPIOE_OTYPER寄存器设置PE10引脚为推挽输出模式

ldr r0,=0x50006004

ldr r1,[r0]

and r1,r1,#(~(0x1 << 10))

str r1,[r0]

@4.通过GPIOE_OSPEEDR寄存器设置PE10引脚为低速输出模式

ldr r0,=0x50006008

ldr r1,[r0]

and r1,r1,#(~(0x3 << 20))

str r1,[r0]

@5.通过GPIOE_PUPDR寄存器设置PE10引脚为禁止上下拉电阻

ldr r0,=0x5000600c

ldr r1,[r0]

and r1,r1,#(~(0x3 << 20))

str r1,[r0]

mov pc, lr

LED1_ON:

@1.通过GPIOE_ODR寄存器设置PE10引脚输出高电平

ldr r0,=0x50006014

ldr r1,[r0]

orr r1,r1,#(0x1 << 10)

str r1,[r0]

mov pc, lr

LED1_OFF:

@1.通过GPIOE_ODR寄存器设置PE10引脚输出低电平

ldr r0,=0x50006014

ldr r1,[r0]

and r1,r1,#(~(0x1 << 10))

str r1,[r0]

mov pc, lr

/**********LED2点灯PF10**************/

LED2_INIT:

@1.通过RCC_HB4_ENSETR寄存器设置GPIOF组时钟使能

ldr r0,=0x50000A28

ldr r1,[r0]

orr r1,r1,#(0x1 << 5)

str r1,[r0]

@2.通过GPIOE_MODER寄存器设置PF10引脚为输出模式

ldr r0,=0x50007000

ldr r1,[r0]

and r1,r1,#(~(0x3 << 20))

orr r1,r1,#(0x1 << 20)

str r1,[r0]

@3.通过GPIOE_OTYPER寄存器设置PF10引脚为推挽输出模式

ldr r0,=0x50007004

ldr r1,[r0]

and r1,r1,#(~(0x1 << 10))

str r1,[r0]

@4.通过GPIOE_OSPEEDR寄存器设置PF10引脚为中速输出模式

ldr r0,=0x50007008

ldr r1,[r0]

and r1,r1,#(~(0x3 << 20))

orr r1,r1,#(0x1 << 20)

str r1,[r0]

@5.通过GPIOE_PUPDR寄存器设置PF10引脚为禁止上下拉电阻

ldr r0,=0x5000700c

ldr r1,[r0]

and r1,r1,#(~(0x3 << 20))

str r1,[r0]

mov pc, lr

LED2_ON:

@1.通过GPIOE_ODR寄存器设置PF10引脚输出高电平

ldr r0,=0x50007014

ldr r1,[r0]

orr r1,r1,#(0x1 << 10)

str r1,[r0]

mov pc, lr

LED2_OFF:

@1.通过GPIOE_ODR寄存器设置PF10引脚输出低电平

ldr r0,=0x50007014

ldr r1,[r0]

and r1,r1,#(~(0x1 << 10))

str r1,[r0]

mov pc, lr

/**********LED3点灯PE8**************/

LED3_INIT:

@1.通过RCC_HB4_ENSETR寄存器设置GPIOE组时钟使能,LED1设置过

ldr r0,=0x50000A28

ldr r1,[r0]

orr r1,r1,#(0x1 << 4)

str r1,[r0]

@2.通过GPIOE_MODER寄存器设置PE8引脚为输出模式

ldr r0,=0x50006000

ldr r1,[r0]

and r1,r1,#(~(0x3 << 16))

orr r1,r1,#(0x1 << 16)

str r1,[r0]

@3.通过GPIOE_OTYPER寄存器设置PE8引脚为推挽输出模式

ldr r0,=0x50006004

ldr r1,[r0]

and r1,r1,#(~(0x1 << 8))

str r1,[r0]

@4.通过GPIOE_OSPEEDR寄存器设置PE8引脚为高速输出模式

ldr r0,=0x50006008

ldr r1,[r0]

orr r1,r1,#(0x3 << 16)

str r1,[r0]

@5.通过GPIOE_PUPDR寄存器设置PE8引脚为禁止上下拉电阻

ldr r0,=0x5000600c

ldr r1,[r0]

and r1,r1,#(~(0x3 << 16))

str r1,[r0]

mov pc, lr

LED3_ON:

@1.通过GPIOE_ODR寄存器设置PE8引脚输出高电平

ldr r0,=0x50006014

ldr r1,[r0]

orr r1,r1,#(0x1 << 8)

str r1,[r0]

mov pc, lr

LED3_OFF:

@1.通过GPIOE_ODR寄存器设置PE8引脚输出低电平

ldr r0,=0x50006014

ldr r1,[r0]

and r1,r1,#(~(0x1 << 8))

str r1,[r0]

mov pc, lr

@ 大概1s的延时函数

delay_1s:

mov r3, #0x10000000

mm:

cmp r3, #0

subne r3, r3, #1

bne mm

mov pc, lr

.end