嵌入式:ARM Day4

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

 源码:


.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访问与修改该地址空间中的值。

三、思维导图

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值