arm:day4

1. 实现三盏灯的点亮

.text 
.global _start

_start: 
	@ led1初始化函数
    LED_INIT:
        @ 1 通过RCC_AHB4_ENSETR寄存器,设置GPIOE F组控制器使能 0x50000A28[5:4]=1
		ldr r0,=0X50000A28
		ldr r1,[r0]
		orr r1,r1,#(0X3<<4)
		str r1,[r0]

		@ 2.1 通过GPIOE_MODER寄存器,设置PE10引脚为输出模式 0x50006000[21:20]=01
		ldr r0,=0X50006000
		ldr r1,[r0]
		bic r1,r1,#(0X3<<20)
		orr r1,r1,#(0X1<<20)
		str r1,[r0]
        @ 2.2 通过GPIOE_MODER寄存器,设置PF10引脚为输出模式 0x50007000[21:20]=01
		ldr r0,=0X50007000
		ldr r1,[r0]
		bic r1,r1,#(0X3<<20)
		orr r1,r1,#(0X1<<20)
		str r1,[r0]
        @ 2.3 通过GPIOE_MODER寄存器,设置PE8引脚为输出模式 0x50006000[17:16]=01
		ldr r0,=0X50006000
		ldr r1,[r0]
		bic r1,r1,#(0X3<<16)
		orr r1,r1,#(0X1<<16)
		str r1,[r0]

        @ 3.1 通过GPIOE_OTYPER寄存器,设置PE10引脚为推挽输出模式 0x50006004[10]=0
		ldr r0,=0X50006004
		ldr r1,[r0]
		bic r1,r1,#(0X1<<10)
		str r1,[r0]
        @ 3.2 通过GPIOE_OTYPER寄存器,设置PF10引脚为推挽输出模式 0x50006004[10]=0
		ldr r0,=0X50007004
		ldr r1,[r0]
		bic r1,r1,#(0X1<<10)
		str r1,[r0]
        @ 3.3 通过GPIOE_OTYPER寄存器,设置PE8引脚为推挽输出模式 0x50006004[8]=0
		ldr r0,=0X50006004
		ldr r1,[r0]
		bic r1,r1,#(0X1<<8)
		str r1,[r0]

        @ 4.1 通过GPIOE_OSPEEDR寄存器,设置PE10引脚为低速输出 0x50006008[21:20]=00
		ldr r0,=0X50006008
		ldr r1,[r0]
		bic r1,r1,#(0X3<<20)
		str r1,[r0]
        @ 4.2 通过GPIOE_OSPEEDR寄存器,设置PE10引脚为低速输出 0x50007008[21:20]=00
		ldr r0,=0X50007008
		ldr r1,[r0]
		bic r1,r1,#(0X3<<20)
		str r1,[r0]
        @ 4.3 通过GPIOE_OSPEEDR寄存器,设置PE10引脚为低速输出 0x50006008[17:16]=00
		ldr r0,=0X50006008
		ldr r1,[r0]
		bic r1,r1,#(0X3<<16)
		str r1,[r0]

        @ 5.1 通过GPIOE_PUPDR寄存器,设置PE10引脚禁止上下拉电阻 0x5000600c[21:20]=00
		ldr r0,=0X5000600C
		ldr r1,[r0]
		bic r1,r1,#(0X3<<20)
		str r1,[r0]
        @ 5.2 通过GPIOE_PUPDR寄存器,设置PE10引脚禁止上下拉电阻 0x5000700c[21:20]=00
		ldr r0,=0X5000700C
		ldr r1,[r0]
		bic r1,r1,#(0X3<<20)
		str r1,[r0]
        @ 5.3 通过GPIOE_PUPDR寄存器,设置PE10引脚禁止上下拉电阻 0x5000600c[17:16]=00
		ldr r0,=0X5000600C
		ldr r1,[r0]
		bic r1,r1,#(0X3<<16)
		str r1,[r0]


	/**********流水灯**********/

	ldr r0,=0x50006014
	ldr r2,=0x50007014 

	loop:
		@ 1亮23灭	
		ldr r1,[r0]
		orr r1,r1,#(0X1<<10)
		str r1,[r0]
		ldr r1,[r2]
		bic r1,r1,#(0X1<<10)
		str r1,[r2]
		ldr r1,[r0]
		bic r1,r1,#(0X1<<8)
		str r1,[r0]
		bl delay_1s

		@ 2亮13灭 
		ldr r1,[r0]
		bic r1,r1,#(0X1<<10)
		str r1,[r0]
		ldr r1,[r2]
		orr r1,r1,#(0X1<<10)
		str r1,[r2]
		ldr r1,[r0]
		bic r1,r1,#(0X1<<8)
		str r1,[r0]
		bl delay_1s

		@ 3亮12灭
		ldr r1,[r0]
		bic r1,r1,#(0X1<<10)
		str r1,[r0]
		ldr r1,[r2]
		bic r1,r1,#(0X1<<10)
		str r1,[r2]
		ldr r1,[r0]
		orr r1,r1,#(0X1<<8)
		str r1,[r0]
		bl delay_1s

	
	b loop @ 跳转到loop,实现循环


	@ 大概1s的延时函数
	delay_1s:
		mov r3,#0x10000000
		mm:
			cmp r3, #0
			subne r3, r3, #1
			bne mm
			mov pc, lr
.end

arm:day4_第1张图片

 

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