ARM Day4

汇编实现三个灯的闪烁

.text

.global _start

_start:

@使能GPIOE的外设时钟

LDR R0,=0x50000A28 @指定基地址

LDR R1,R0 @将寄存器数据读取出来保存到R1中

ORR R1,R1, #(0x3<<4) @4设置为1

STR R1,R0 @将修改之后的值写回去

@设置PE10为输出

LDR R0,=0x50006000 @指定基地址

LDR R1,R0 @将寄存器数据读取出来保存到R1中

BIC R1,R1,#(0x3<<20) @21:20设置为00

ORR R1,R1,#(0x1<<20) @21:20设置为01

STR R1,R0 @将修改之后的值写回去

@设置PF10为输出

LDR R0,=0x50007000 @指定基地址

LDR R1,R0 @将寄存器数据读取出来保存到R1中

BIC R1,R1,#(0x3<<20) @21:20设置为00

ORR R1,R1,#(0x1<<20) @21:20设置为01

STR R1,R0 @将修改之后的值写回去

@设置PE8为输出

LDR R0,=0x50006000 @指定基地址

LDR R1,R0 @将寄存器数据读取出来保存到R1中

BIC R1,R1,#(0x3<<16) @17:16设置为00

ORR R1,R1,#(0x1<<16) @17:16设置为01

STR R1,R0 @将修改之后的值写回去

@设置PE10为推挽输出

LDR R0,=0x50006004 @指定基地址

LDR R1,R0 @将寄存器数据读取出来保存到R1中

BIC R1,R1,#(0x1<<10) @10设置为0

STR R1,R0 @将修改之后的值写回去

@设置PF10为推挽输出

LDR R0,=0x50007004 @指定基地址

LDR R1,R0 @将寄存器数据读取出来保存到R1中

BIC R1,R1,#(0x1<<10) @10设置为0

STR R1,R0 @将修改之后的值写回去

@设置PE8为推挽输出

LDR R0,=0x50006004 @指定基地址

LDR R1,R0 @将寄存器数据读取出来保存到R1中

BIC R1,R1,#(0x1<<8) @8设置为0

STR R1,R0 @将修改之后的值写回去

@设置PE10低速输出

LDR R0,=0x50006008 @指定基地址

LDR R1,R0 @将寄存器数据读取出来保存到R1中

BIC R1,R1,#(0x3<<20) @21:20设置为0

STR R1,R0 @将修改之后的值写回去

@设置PF10低速输出

LDR R0,=0x50007008 @指定基地址

LDR R1,R0 @将寄存器数据读取出来保存到R1中

BIC R1,R1,#(0x3<<20) @21:20设置为0

STR R1,R0 @将修改之后的值写回去

@设置PE8低速输出

LDR R0,=0x50006008 @指定基地址

LDR R1,R0 @将寄存器数据读取出来保存到R1中

BIC R1,R1,#(0x3<<16) @17:16设置为0

STR R1,R0 @将修改之后的值写回去

@设置PE10无上拉下拉电阻

LDR R0,=0x5000600C @指定基地址

LDR R1,R0 @将寄存器数据读取出来保存到R1中

BIC R1,R1,#(0x3<<20) @21:20设置为0

STR R1,R0 @将修改之后的值写回去

@设置PF10无上拉下拉电阻

LDR R0,=0x5000700C @指定基地址

LDR R1,R0 @将寄存器数据读取出来保存到R1中

BIC R1,R1,#(0x3<<20) @21:20设置为0

STR R1,R0 @将修改之后的值写回去

@设置PE8无上拉下拉电阻

LDR R0,=0x5000600C @指定基地址

LDR R1,R0 @将寄存器数据读取出来保存到R1中

BIC R1,R1,#(0x3<<16) @17:16设置为0

STR R1,R0 @将修改之后的值写回去

LOOP: @B不让程序结束

bl LED1_ON

bl LED2_ON

bl LED3_ON

bl DELAY

bl LED1_OFF

bl LED2_OFF

bl LED3_OFF

bl DELAY

B LOOP

@亮灯

LED1_ON:

@点灯 GPIO_ODR10->1

LDR R0,=0x50006014 @指定基地址

LDR R1,R0 @将寄存器数据读取出来保存到R1中

ORR R1,R1,#(0x1<<10) @10设置为0

STR R1,R0 @将修改之后的值写回去

mov PC,LR @程序返回

LED2_ON:

@点灯 GPIO_ODR10->1

LDR R0,=0x50007014 @指定基地址

LDR R1,R0 @将寄存器数据读取出来保存到R1中

ORR R1,R1,#(0x1<<10) @10设置为0

STR R1,R0 @将修改之后的值写回去

mov PC,LR @程序返回

LED3_ON:

@点灯 GPIO_ODR10->1

LDR R0,=0x50006014 @指定基地址

LDR R1,R0 @将寄存器数据读取出来保存到R1中

ORR R1,R1,#(0x1<<8) @8设置为0

STR R1,R0 @将修改之后的值写回去

mov PC,LR @程序返回

@灭灯

LED1_OFF:

@灭灯 GPIO_ODR10->0

LDR R0,=0x50006014 @指定基地址

LDR R1,R0 @将寄存器数据读取出来保存到R1中

BIC R1,R1,#(0x1<<10) @10设置为0

STR R1,R0 @将修改之后的值写回去

mov PC,LR @程序返回

LED2_OFF:

@灭灯 GPIO_ODR10->0

LDR R0,=0x50007014 @指定基地址

LDR R1,R0 @将寄存器数据读取出来保存到R1中

BIC R1,R1,#(0x1<<10) @10设置为0

STR R1,R0 @将修改之后的值写回去

mov PC,LR @程序返回

LED3_OFF:

@灭灯 GPIO_ODR10->0

LDR R0,=0x50006014 @指定基地址

LDR R1,R0 @将寄存器数据读取出来保存到R1中

BIC R1,R1,#(0x1<<8) @8设置为0

STR R1,R0 @将修改之后的值写回去

mov PC,LR @程序返回

@延时函数

DELAY:

LDR R3,=0x10000000

MM:

CMP R3,#0

SUBNE R3,R3,#1

BNE MM

MOV PC,LR @程序返回

.end

相关推荐
斑马1393 天前
ARM学习笔记(二)——ARM汇编基础
汇编·arm开发·arm
wechatbot8883 天前
【极客互动】企业微信Spring Boot 调度 SearchContact开发自动添加外部联系人网关
汇编·微信·自动化·企业微信·rpa
星栖与芯4 天前
LiteOS-M 切换汇编逐行图解(5):HalPendSV 任务切换的现场搬运(五阶段逐行)
汇编·stm32·嵌入式硬件·harmonyos
星栖与芯5 天前
LiteOS-M 切换汇编逐行图解(4):中断三件套与 HalTaskSchedule 触发
汇编·stm32·单片机·嵌入式硬件·harmonyos
xx~t5 天前
嵌入式——ARM——汇编2
linux·汇编·arm开发·嵌入式硬件·启动代码
祖力555 天前
ARM汇编LED实验
汇编·arm·imx6ull
索端阳6 天前
ARM Day02 学习总结:ARM汇编基础核心知识点梳理
汇编·学习·arm
xx~t6 天前
嵌入式——ARM——汇编1
linux·汇编·arm开发·嵌入式硬件·arm
索端阳7 天前
初识 ARM Cortex-A7,嵌入式底层入门总结
汇编·嵌入式硬件
ThornArmor8 天前
重铸1996|肉体渲染:关节的裂缝:分段模型积木拼装与未成熟的 RSP 矩阵骨骼动画形变
c语言·汇编·c++·python·硬件架构·游戏机