ARM流水灯

.text

.global _start

_start:

@LED1闪烁

@1.RCC时钟使能GPIOE RCC_MP_AHB4ENSETR[4]->1

LDR R0,=0x50000a28

LDR R1,[R0]

ORR R1,R1,#(0x1<<4)

STR R1,[R0]

@2.设置PE10为输出模式 GPIOE_MODER[21:20]->01

@先清零

LDR R0,=0x50006000

LDR R1,[R0]

BIC R1,R1,#(0x3<<20)

@再置位

ORR R1,R1,#(0x1<<20)

STR R1,[R0]

@3.设置PE10为推挽输出 GPIO_OTYPER[10]->0

LDR R0,=0x50006004

LDR R1,[R0]

BIC R1,R1,#(0x1<<10)

STR R1,[R0]

@4.设置PE10为低速输出 GPIOE_OSPEEDR[21:20]->00

LDR R0,=0x50006008

LDR R1,[R0]

BIC R1,R1,#(0x3<<20)

STR R1,[R0]

@5.设置PE10输出无上拉下拉 GPIO_PUPDR[21:20]->00

LDR R0,=0x5000600c

LDR R1,[R0]

BIC R1,R1,#(0x3<<20)

STR R1,[R0]

@LED2闪烁

@1.RCC时钟使能GPIOF RCC_MP_AHB4ENSETR[5]->1

LDR R0,=0x50000a28

LDR R1,[R0]

ORR R1,R1,#(0x1<<5)

STR R1,[R0]

@2.设置PF10为输出模式 GPIOF_MODER[21:20]->01

@先清零

LDR R0,=0x50007000

LDR R1,[R0]

BIC R1,R1,#(0x3<<20)

@再置位

ORR R1,R1,#(0x1<<20)

STR R1,[R0]

@3.设置PF10为推挽输出 GPIO_OTYPER[10]->0

LDR R0,=0x50007004

LDR R1,[R0]

BIC R1,R1,#(0x1<<10)

STR R1,[R0]

@4.设置PF10为低速输出 GPIOF_OSPEEDR[21:20]->00

LDR R0,=0x50007008

LDR R1,[R0]

BIC R1,R1,#(0x3<<20)

STR R1,[R0]

@5.设置PF10输出无上拉下拉 GPIO_PUPDR[21:20]->00

LDR R0,=0x5000700c

LDR R1,[R0]

BIC R1,R1,#(0x3<<20)

STR R1,[R0]

@LED3闪烁

@1.RCC时钟使能GPIOE RCC_MP_AHB4ENSETR[4]->1

LDR R0,=0x50000a28

LDR R1,[R0]

ORR R1,R1,#(0x1<<4)

STR R1,[R0]

@2.设置PE8为输出模式 GPIOE_MODER[17:16]->01

@先清零

LDR R0,=0x50006000

LDR R1,[R0]

BIC R1,R1,#(0x3<<16)

@再置位

ORR R1,R1,#(0x1<<16)

STR R1,[R0]

@3.设置PE8为推挽输出 GPIO_OTYPER[8]->0

LDR R0,=0x50006004

LDR R1,[R0]

BIC R1,R1,#(0x1<<8)

STR R1,[R0]

@4.设置PE8为低速输出 GPIOE_OSPEEDR[17:16]->00

LDR R0,=0x50006008

LDR R1,[R0]

BIC R1,R1,#(0x3<<16)

STR R1,[R0]

@5.设置PE8输出无上拉下拉 GPIO_PUPDR[17:16]->00

LDR R0,=0x5000600c

LDR R1,[R0]

BIC R1,R1,#(0x3<<16)

STR R1,[R0]

@调用亮灭函数

loop:

BL led1_on

bl delay

BL led1_off

bl delay

BL led2_on

bl delay

BL led2_off

bl delay

BL led3_on

bl delay

BL led3_off

bl delay

b loop

@LED1亮

led1_on:

LDR R0,=0x50006014

LDR R1,[R0]

ORR R1,R1,#(0x1<<10)

STR R1,[R0]

mov pc,lr

@LED1灭

led1_off:

LDR R0,=0x50006014

LDR R1,[R0]

BIC R1,R1,#(0x1<<10)

STR R1,[R0]

mov pc,lr

@LED2亮

led2_on:

LDR R0,=0x50007014

LDR R1,[R0]

ORR R1,R1,#(0x1<<10)

STR R1,[R0]

mov pc,lr

@LED2灭

led2_off:

LDR R0,=0x50007014

LDR R1,[R0]

BIC R1,R1,#(0x1<<10)

STR R1,[R0]

mov pc,lr

@LED3亮

led3_on:

LDR R0,=0x50006014

LDR R1,[R0]

ORR R1,R1,#(0x1<<8)

STR R1,[R0]

mov pc,lr

@LED3灭

led3_off:

LDR R0,=0x50006014

LDR R1,[R0]

BIC R1,R1,#(0x1<<8)

STR R1,[R0]

mov pc,lr

@封装汇编的延时函数

delay:

LDR R1,=0X10000000

mm:

cmp R1,#0

SUBNE R1,R1,#1

BNE mm

mov pc,lr

.end

相关推荐
CodingCos8 小时前
【ARM 嵌入式 编译系列 10.9.1 -- llvm-size -B 与 llvm-readelf -S 区别】
arm开发
szxinmai主板定制专家1 天前
一种基于 RK3568+AI 的国产化充电桩安全智能交互终端的设计与实现,终端支持各种复杂的交互功能和实时数据处理需求
arm开发·人工智能·嵌入式硬件·安全
szxinmai主板定制专家1 天前
基于 ZYNQ ARM+FPGA+AI YOLOV4 的电网悬垂绝缘子缺陷检测系统的研究
arm开发·人工智能·嵌入式硬件·yolo·fpga开发
全栈工程师修炼日记3 天前
ARM TrustZone技术如何守护你的隐私
arm开发·trustzone·安全世界·非安全世界
m0_631274364 天前
嵌入式八股文-ARM
arm开发
aitav04 天前
⚡ arm 32位嵌入式 Linux 系统移植 QT 程序
linux·arm开发·qt
驱动探索者4 天前
linux 学习平台 arm+x86 搭建
linux·arm开发·学习
上园村蜻蜓队长6 天前
ARM芯片架构之coresight 时间戳组件介绍
arm开发·架构
学不动CV了6 天前
C语言(FreeRTOS)中堆内存管理分析Heap_1、Heap_2、Heap_4、Heap_5详细分析与解析(二)
linux·c语言·arm开发·stm32·单片机·51单片机
GilgameshJSS9 天前
STM32H743-ARM例程13-SDIO
c语言·arm开发·stm32·嵌入式硬件·学习