ARM:使用汇编完成三个灯流水亮灭

1.汇编源代码

复制代码
.text 
.global _start
_start: 
	
	@设置GPIOF寄存器的时钟使能
	LDR R0,=0X50000A28
	LDR R1,[R0]
	ORR R1,R1,#(0x1<<5)
	STR R1,[R0]
 
	@设置GPIOE寄存器的时钟使能
	LDR R0,=0X50000A28
	LDR R1,[R0]  @从r0为起始地址的4字节数据取出放在R1
	ORR R1,R1,#(0x1<<4)  @第4位设置为1
	STR R1,[R0]  @写回
 
	@设置PE10管脚为输出模式  GPIOE_MODER[21:20]->01   0x50006000
	LDR R0,=0x50006000
	LDR R1,[R0]
	BIC R1,R1,#(0x3<<20)@[21L20]清0
	ORR R1,R1,#(0X1<<20) @设置
	STR R1,[R0] 
 
	@设置PF10管脚为输出模式
	LDR R0,=0x50007000
	LDR R1,[R0]
	BIC R1,R1,#(0x3<<20)
	ORR R1,R1,#(0x1<<20)
	STR R1,[R0]
 
	@设置PE8管脚为输出模式
	LDR R0,=0x50006000
	LDR R1,[R0]
	BIC R1,R1,#(0x3<<16) @[17:16]清0
	ORR R1,R1,#(0X1<<16) @设置1
	STR R1,[R0] 
 
 
	@设置PE10管脚为推挽输出  GPIOE_OTYPER[10]->0   0X50006004
	LDR R0,=0X50006004
	LDR R1,[R0]
	BIC R1,R1,#(0X1<<10)
	STR R1,[R0]
	
	@设置PF10管脚为推挽输出
	LDR R0,=0X50007004
	LDR R1,[R0]
	BIC R1,R1,#(0X1<<10)
	STR R1,[R0]
	
	@设置PE8管脚为推挽输出  GPIOE_OTYPER[10]->0   0X50006004
	LDR R0,=0X50006004
	LDR R1,[R0]
	BIC R1,R1,#(0X1<<8)
	STR R1,[R0]
 
 
	@设置PE10管脚为低速输出   GPIOE_OSPEEDR[21:20]->00  0X50006008
	LDR R0,=0x50006008
	LDR R1,[R0]
	BIC R1,R1,#(0x3<<20)@[21L20]清0
	STR R1,[R0]
	
	@设置PF10管脚为低速输出
	LDR R0,=0x50007008
	LDR R1,[R0]
	BIC R1,R1,#(0x3<<20)@[21L20]清0
	STR R1,[R0]
 
	@设置PE8管脚为低速输出   GPIOE_OSPEEDR[21:20]->00  0X50006008
	LDR R0,=0x50006008
	LDR R1,[R0]
	BIC R1,R1,#(0x3<<16) @[17:16]清0
	STR R1,[R0]
 
	@设置PE10管脚输出时没有上拉下拉电阻  GPIOE_PUPDR[21:20]->00  0X5000600C
	LDR R0,=0x5000600c
	LDR R1,[R0]
	BIC R1,R1,#(0x3<<20)@[21L20]清0
	STR R1,[R0]
	
	@设置PE8管脚输出时没有上拉下拉电阻  GPIOE_PUPDR[21:20]->00  0X5000600C
	LDR R0,=0x5000600c
	LDR R1,[R0]
	BIC R1,R1,#(0x3<<16)@[17:16]清0
	STR R1,[R0] 
	
	@设置PF10管脚输出时没有上拉下拉电阻
	LDR R0,=0x5000700c
	LDR R1,[R0]
	BIC R1,R1,#(0x3<<20)@[21L20]清0
	STR R1,[R0]
 
	@  6.PE10输出高低电平      GPIOE_ODR[10]->1(高电平)  0(低电平)    0X50006014
	@LED1亮灭交替
loop:
	@led1亮
	LDR R0,=0X50006014
	LDR R1,[R0]
	ORR R1,R1,#(0x1<<10)
	STR R1,[R0]
	BL delay
	
	@led2灭
	LDR R0,=0X50006014
	LDR R1,[R0]
	BIC R1,R1,#(0x1<<10)
	STR R1,[R0]
	BL delay
 
	@led2亮
	LDR R0,=0X50007014
	LDR R1,[R0]
	ORR R1,R1,#(0x1<<10)
	STR R1,[R0]
	BL delay
	
	@led2灭
	LDR R0,=0X50007014
	LDR R1,[R0]
	BIC R1,R1,#(0x1<<10)
	STR R1,[R0]
	BL delay
	
	@led3亮
	LDR R0,=0X50006014
	LDR R1,[R0]
	ORR R1,R1,#(0x1<<8)
	STR R1,[R0]
	BL delay
	
	@led3灭
	LDR R0,=0X50006014
	LDR R1,[R0]
	BIC R1,R1,#(0x1<<8)
	STR R1,[R0]
	BL delay
 
	b loop
 
 
	@封装延时函数
 
delay:
	LDR R4,=0X10000000
mm:
	cmp r4,#0
	subne r4,r4,#1
	bne mm
	mov pc,lr  @程序返回	
 
.end

2.实验现象

相关推荐
jianqiang.xue17 小时前
3倍向量算力:Arm给最小MCU装上本地AI
arm开发·人工智能·单片机
蜀黍@猿18 小时前
ARM 汇编入门(十二):MMU、页表与虚拟内存全解析
汇编·arm开发·stm32·mcu
蜀黍@猿2 天前
ARM 汇编入门(十):标量浮点与 VFP 指令全解析
汇编·arm开发·stm32·mcu
Good白10194 天前
嵌入式:1.嵌入式入门|初识嵌入式、处理器、ARM与STM32
arm开发·stm32·嵌入式硬件
물の韜4 天前
ZYNQ/FMQL系列Linux之I2C开发实战
linux·arm开发·嵌入式硬件·设备树·iic·zynq
女神下凡5 天前
芯参谋(95):嵌入式文件系统_开发指南
linux·服务器·arm开发·驱动开发·设计规范
女神下凡10 天前
芯参谋(85):Linux_PPI_NAND_驱动开发指南
linux·运维·arm开发·驱动开发·单片机·嵌入式硬件·设计规范
NamoAmitabha12810 天前
ARM Cortex-A9 核心架构(演化后的“缝合怪”)--deepseek
arm开发·zynq--ps
AllData公司负责人10 天前
AllData 可定义数据中台完成信创适配|银河麒麟 + 海光X86 CPU / 华为鲲鹏ARM CPU+ OceanBase / 人大金仓国产化环境部署落地
大数据·arm开发·数据库·人工智能·oceanbase·kingbase