ARM流水灯

.text

.global _start

_start:

@LED1闪烁

@1.RCC时钟使能GPIOE RCC_MP_AHB4ENSETR4->1

LDR R0,=0x50000a28

LDR R1,R0

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

STR R1,R0

@2.设置PE10为输出模式 GPIOE_MODER21:20->01

@先清零

LDR R0,=0x50006000

LDR R1,R0

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

@再置位

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

STR R1,R0

@3.设置PE10为推挽输出 GPIO_OTYPER10->0

LDR R0,=0x50006004

LDR R1,R0

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

STR R1,R0

@4.设置PE10为低速输出 GPIOE_OSPEEDR21:20->00

LDR R0,=0x50006008

LDR R1,R0

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

STR R1,R0

@5.设置PE10输出无上拉下拉 GPIO_PUPDR21:20->00

LDR R0,=0x5000600c

LDR R1,R0

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

STR R1,R0

@LED2闪烁

@1.RCC时钟使能GPIOF RCC_MP_AHB4ENSETR5->1

LDR R0,=0x50000a28

LDR R1,R0

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

STR R1,R0

@2.设置PF10为输出模式 GPIOF_MODER21:20->01

@先清零

LDR R0,=0x50007000

LDR R1,R0

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

@再置位

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

STR R1,R0

@3.设置PF10为推挽输出 GPIO_OTYPER10->0

LDR R0,=0x50007004

LDR R1,R0

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

STR R1,R0

@4.设置PF10为低速输出 GPIOF_OSPEEDR21:20->00

LDR R0,=0x50007008

LDR R1,R0

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

STR R1,R0

@5.设置PF10输出无上拉下拉 GPIO_PUPDR21:20->00

LDR R0,=0x5000700c

LDR R1,R0

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

STR R1,R0

@LED3闪烁

@1.RCC时钟使能GPIOE RCC_MP_AHB4ENSETR4->1

LDR R0,=0x50000a28

LDR R1,R0

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

STR R1,R0

@2.设置PE8为输出模式 GPIOE_MODER17:16->01

@先清零

LDR R0,=0x50006000

LDR R1,R0

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

@再置位

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

STR R1,R0

@3.设置PE8为推挽输出 GPIO_OTYPER8->0

LDR R0,=0x50006004

LDR R1,R0

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

STR R1,R0

@4.设置PE8为低速输出 GPIOE_OSPEEDR17:16->00

LDR R0,=0x50006008

LDR R1,R0

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

STR R1,R0

@5.设置PE8输出无上拉下拉 GPIO_PUPDR17: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

相关推荐
AndyHeee6 天前
【SVC、PendSV(系统异常) 与 外设 IRQ 、NVIC笔记】
arm开发
暮云星影7 天前
瑞芯微rk3588利用Rockchip NPU运行大语言模型(LLM)
arm开发·人工智能·语言模型·自然语言处理
techdashen7 天前
绕过系统 ICMP:用 rawsock、Npcap 和 WMI 找到默认网卡
开发语言·arm开发·rust
振南的单片机世界7 天前
ARM中断比51快在哪?硬件压栈+NVIC集中管理
arm开发·stm32·单片机·嵌入式硬件
墨绿色的摆渡人7 天前
论文笔记(一百三十七)Learning Dual-Arm Push and Grasp Synergy in Dense Clutter
arm开发·论文阅读
暮云星影7 天前
全志linux开发屏幕适配(一)屏幕参数设置说明
linux·arm开发
m0_547486667 天前
《ARM Cortex-M4嵌入式应用技术——基于STM32F407、STM32CubeMX与Proteus》全套PPT课件
arm开发·stm32·proteus
Lanceli_van7 天前
SQLite 3.45.2(sqlite-autoconf-3450200)ARM 交叉编译完整步骤
arm开发·sqlite
暮云星影7 天前
全志linux开发屏幕适配(二)`HDMI`驱动适配说明
linux·arm开发·驱动开发
暮云星影7 天前
瑞芯微rk3566开发FIT Secure Boot
linux·arm开发·驱动开发·安全