嵌入式:ARM Day4

嵌入式:ARM Day4_第1张图片

一、自己编写代码实现三盏灯点亮

嵌入式:ARM Day4_第2张图片

 源码:


.text 
.global _start
_start: 			@进行一次初始化
	bl RCC_INIT
	bl LED1_INIT
	bl LED2_INIT
	bl LED3_INIT
	b loop

loop: 				@循环开关灯
	bl LED1_ON
	bl delay_1s
	bl LED1_OFF
	bl delay_1s
	bl LED2_ON
	bl delay_1s
	bl LED2_OFF
	bl delay_1s
	bl LED3_ON
	bl delay_1s
	bl LED3_OFF
	bl delay_1s
	bl LED1_ON
	bl LED2_ON
	bl LED3_ON
	bl delay_1s
	bl LED1_OFF
	bl LED2_OFF
	bl LED3_OFF
	bl delay_1s
	b loop


RCC_INIT:
	@使能对应控制器,通过RCC_MP_AHB4ENSETR寄存器进行设置
	@引脚为E第[4]位 置1,引脚为F寄存器第[5]位 置1
	ldr r0,=0x50000A28
	ldr r1,[r0]
	orr r1,r1,#(0x3<<4)   @将P引脚与F引脚的寄存器一起使能
	str r1,[r0]
	mov pc,lr

@LED1的所有初始化工作
LED1_INIT:
	@1.通过GPIOx_MODER寄存器将PE10引脚设置为输出模式,并将[21:20]位 置01
	ldr r0,=0x50006000
	ldr r1,[r0]
	bic r1,r1,#(0x3<<20)
	orr r1,r1,#(0x1<<20)
	str r1,[r0]

	@2.通过GPIOx_OTYPER寄存器将PE10引脚设置为推挽输出模式,并将第[10]位 置0
	ldr r0,=0x50006004
	ldr r1,[r0]
	bic r1,r1,#(0x1<<10)
	str r1,[r0]

	@3.通过GPIOx_OSPEEDR寄存器将PE10引脚设置为低速输出模式,并将第[21:20]位 置00
	ldr r0,=0x50006008
	ldr r1,[r0]
	bic r1,r1,#(0x3<<20)
	str r1,[r0]

	@4.通过GPIOx_PUPDR寄存器将PE10引脚设置为禁止上下拉电阻模式,并将第[21:20]位 置00
	ldr r0,=0x5000600C
	ldr r1,[r0]
	bic r1,r1,#(0x3<<20)
	str r1,[r0]
	mov pc,lr

@LED2的所有初始化工作
LED2_INIT:
	@1.通过GPIOx_MODER寄存器将PF10引脚设置为输出模式,并将[21:20]位 置01
	ldr r0,=0x50007000
	ldr r1,[r0]
	bic r1,r1,#(0x3<<20)
	orr r1,r1,#(0x1<<20)
	str r1,[r0]

	@2.通过GPIOx_OTYPER寄存器将PF10引脚设置为推挽输出模式,并将第[10]位 置0
	ldr r0,=0x50007004
	ldr r1,[r0]
	bic r1,r1,#(0x1<<10)
	str r1,[r0]

	@3.通过GPIOx_OSPEEDR寄存器将PF10引脚设置为低速输出模式,并将第[21:20]位 置00
	ldr r0,=0x50007008
	ldr r1,[r0]
	bic r1,r1,#(0x3<<20)
	str r1,[r0]

	@4.通过GPIOx_PUPDR寄存器将PF10引脚设置为禁止上下拉电阻模式,并将第[21:20]位 置00
	ldr r0,=0x5000700C
	ldr r1,[r0]
	bic r1,r1,#(0x3<<20)
	str r1,[r0]
	mov pc,lr

@LED3的所有初始化工作
LED3_INIT:
	@1.通过GPIOx_MODER寄存器将PE8引脚设置为输出模式,并将[17:16]位 置01
	ldr r0,=0x50006000
	ldr r1,[r0]
	bic r1,r1,#(0x3<<16)
	orr r1,r1,#(0x1<<16)
	str r1,[r0]

	@2.通过GPIOx_OTYPER寄存器将PE8引脚设置为推挽输出模式,并将第[8]位 置0
	ldr r0,=0x50006004
	ldr r1,[r0]
	bic r1,r1,#(0x1<<8)
	str r1,[r0]

	@3.通过GPIOx_OSPEEDR寄存器将PE8引脚设置为低速输出模式,并将第[17:16]位 置00
	ldr r0,=0x50006008
	ldr r1,[r0]
	bic r1,r1,#(0x3<<16)
	str r1,[r0]

	@4.通过GPIOx_PUPDR寄存器将PE8引脚设置为禁止上下拉电阻模式,并将第[17:16]位 置00
	ldr r0,=0x5000600C
	ldr r1,[r0]
	bic r1,r1,#(0x3<<16)
	str r1,[r0]
	mov pc,lr

@点亮LED1灯
LED1_ON:
	@.通过GPIOx_ODR寄存器将PE10引脚设置为输出高电平模式,并将第[10]位 置1 
	ldr r0,=0x50006014
	ldr r1,[r0]
	orr r1,r1,#(0x1<<10)
	str r1,[r0]
	mov pc,lr

@熄灭LED1灯
LED1_OFF:
	@.通过GPIOx_ODR寄存器将PE10引脚设置为输出低电平模式,并将第[10]位 置0 
	ldr r0,=0x50006014
	ldr r1,[r0]
	bic r1,r1,#(0x1<<10)
	str r1,[r0]
	mov pc,lr

@点亮LED2灯
LED2_ON:
	@.通过GPIOx_ODR寄存器将PF10引脚设置为输出高电平模式,并将第[10]位 置1 
	ldr r0,=0x50007014
	ldr r1,[r0]
	orr r1,r1,#(0x1<<10)
	str r1,[r0]
	mov pc,lr

@熄灭LED2灯
LED2_OFF:
	@.通过GPIOx_ODR寄存器将PF10引脚设置为输出低电平模式,并将第[10]位 置0 
	ldr r0,=0x50007014
	ldr r1,[r0]
	bic r1,r1,#(0x1<<10)
	str r1,[r0]
	mov pc,lr

@点亮LED3灯
LED3_ON:
	@.通过GPIOx_ODR寄存器将PE8引脚设置为输出高电平模式,并将第[8]位 置1 
	ldr r0,=0x50006014
	ldr r1,[r0]
	orr r1,r1,#(0x1<<8)
	str r1,[r0]
	mov pc,lr

@熄灭LED3灯
LED3_OFF:
	@.通过GPIOx_ODR寄存器将PE8引脚设置为输出低电平模式,并将第[8]位 置0 
	ldr r0,=0x50006014
	ldr r1,[r0]
	bic 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

二、在C语言中Ox5000A28如何表示一块地址空间

int *ptr = (int *)0x5000A28

        在上述代码中,int *ptr定义了一个指向整数类型的指针ptr,(int *)将地址0x5000A28强制转换为整数类型的指针,后续可以通过*ptr访问与修改该地址空间中的值。

三、思维导图

 

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