day58:ARMday5,GPIO流水灯实验

汇编指令:

复制代码
.text 
.global _start
_start: 
@1.设置GPIOE GPIOF寄存器的时钟使能 RCC_MP_AHB4ENSETR[5:4]->1 	0x50000a28
LDR R0,=0x50000a28
LDR R1,[R0]
ORR R1,R1,#(0x3<<4)
STR R1,[R0]

@2.设置PE10、PF10、PE8管脚为输出模式,GPIOE_MODER[21:20]->01 	0x50006000
LDR R0,=0x50006000
LDR R1,[R0]
BIC R1,R1,#(0x3<<20)
ORR R1,R1,#(0x1<<20)
BIC R1,R1,#(0x3<<16)
ORR R1,R1,#(0x1<<16)
STR R1,[R0]

LDR R0,=0x50007000
LDR R1,[R0]
BIC R1,R1,#(0x3<<20)
ORR R1,R1,#(0x1<<20)
STR R1,[R0]

@3.设置PE10、PF10、PE8管脚为推挽输出,GPIOE_OTYPER[10]->0 	0x50006004
LDR R0,=0x50006004
LDR R1,[R0]
BIC R1,R1,#(0x1<<10)
BIC R1,R1,#(0x1<<8)
STR R1,[R0]

LDR R0,=0x50007004
LDR R1,[R0]
BIC R1,R1,#(0x1<<10)
STR R1,[R0]

@4.设置PE10、PF10、PE8管脚为低速输出,GPIO_OSPEEDR[21:20]->00 	0x50006008
LDR R0,=0x50006008
LDR R1,[R0]
BIC R1,R1,#(0x3<<20)
BIC R1,R1,#(0x3<<16)
STR R1,[R0]

LDR R0,=0x50007008
LDR R1,[R0]
BIC R1,R1,#(0x3<<20)
STR R1,[R0]

@5.设置PE10、PF10、PE8管脚为不设置上拉下拉模式,GPIOE_PUPDR[21:20]->00 	0x5000600c
LDR R0,=0x5000600c
LDR R1,[R0]
BIC R1,R1,#(0x3<<20)
BIC R1,R1,#(0x3<<16)
STR R1,[R0]

LDR R0,=0x5000700c
LDR R1,[R0]
BIC R1,R1,#(0x3<<20)
STR R1,[R0]

@6.设置PE10、PF10、PE8管脚为高低电平,GPIOE_ODR[10]->1/0 	0x50006014
									@GPIOF_ODR[10]->1/0 	0x50007014
									@GPIOE_ODR[8]->1/0 		0x50006014
loop:
	@LD1亮
	LDR R0,=0x50006014
	LDR R1,[R0]
	ORR R1,R1,#(0x1<<10)
	STR R1,[R0]
	BL delay

	@LD1灭
	LDR R0,=0x50006014
	LDR R1,[R0]
	BIC R1,R1,#(0x1<<10)
	STR R1,[R0]

	@LD2亮
	LDR R0,=0x50007014
	LDR R1,[R0]
	ORR R1,R1,#(0x1<<10)
	STR R1,[R0]
	BL delay

	@LD2灭
	LDR R0,=0x50007014
	LDR R1,[R0]
	BIC R1,R1,#(0x1<<10)
	STR R1,[R0]

	@LD3亮
	LDR R0,=0x50006014
	LDR R1,[R0]
	ORR R1,R1,#(0x1<<8)
	STR R1,[R0]
	BL delay

	@LD3灭
	LDR R0,=0x50006014
	LDR R1,[R0]
	BIC R1,R1,#(0x1<<8)
	STR R1,[R0]
	b loop

delay:
	LDR R4,=0x10000000
mm:
	cmp r4,#0
	subne r4,r4,#1
	bne mm
	mov pc,lr @程序返回

.end

实验现象:

相关推荐
大聪明-PLUS19 小时前
6 个 Docker 高级功能
linux·嵌入式·arm·smarc
普中科技1 天前
【普中STM32F1xx开发攻略--标准库版】-- 第 9 章 STM32 固件库介绍
stm32·单片机·嵌入式硬件·arm·普中科技·固件库
大聪明-PLUS3 天前
Linux 中的 DNS 工作原理(二):各级 DNS 缓存
linux·嵌入式·arm·smarc
来块小鱼饼干(≧^.^≦)5 天前
教你如何使用VSCode的EIDE插件开发STM32(包括任何ARM内核芯片)最详细教程
ide·vscode·stm32·arm·keil
大聪明-PLUS6 天前
Linux 中的 DNS 工作原理(一):从 getaddrinfo 到 resolv.conf
linux·嵌入式·arm·smarc
rechol9 天前
汇编与底层编程笔记
汇编·arm开发·笔记
CHANG_THE_WORLD10 天前
switch语句在汇编层面的几种优化方式 ,为什么能进行优化
汇编·算法·switch·汇编分析·switch case·switch case 汇编·switch case 语句
SundayBear10 天前
嵌入式进阶:C语言内联汇编
c语言·开发语言·汇编
大聪明-PLUS11 天前
从头开始为 ARM 创建 Ubuntu 映像
linux·嵌入式·arm·smarc
ting_zh11 天前
Cortex-M 中断机制基础
arm