ARM day4 代码

.text

.global _start

_start:

@设置PE10输出:

@使能GPIOE的外设时钟 RCC_MP_AHB4ENSETR的第4设置为1即可使能GPIOE时钟

LDR R0,=0X50000A28 @指定寄存器地址

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

ORR R1,R1,#(0x1<<4) @将第4位设置为1

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

@设置PE10为输出 将GPIOE_MODER21:20设置为01,就能够让PE10为输出工作模式

LDR R0,=0X50006000 @指定寄存器地址

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

BIC R1,R1,#(0x3<<20) @将第21:20清0

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

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

@设置PE10为推完输出 将GPIOE_OTYPER寄存器10设置为0,就能够让PE10以推挽输出模式进行工作

LDR R0,=0X50006004 @指定寄存器地址

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

BIC R1,R1,#(0x1<<10) @将第10清0

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

@设置PE10为低速输出

LDR R0,=0X50006008 @指定寄存器地址

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

BIC R1,R1,#(0x3<<20) @将第21:20清0

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

@设置无上拉下拉电阻

LDR R0,=0X5000600C @指定寄存器地址

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

BIC R1,R1,#(0x3<<20) @将第21:20清0

@将第21:20设置为01

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

@设置PE8为输出 将GPIOE_MODER21:20设置为01,就能够让PE10为输出工作模式

LDR R0,=0X50006000 @指定寄存器地址

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

BIC R1,R1,#(0x3<<16) @将第21:16清0

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

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

@设置PE8为推完输出 将GPIOE_OTYPER寄存器10设置为0,就能够让PE10以推挽输出模式进行工作

LDR R0,=0X50006004 @指定寄存器地址

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

BIC R1,R1,#(0x1<<8) @将第8清0

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

@设置PE8为低速输出

LDR R0,=0X50006008 @指定寄存器地址

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

BIC R1,R1,#(0x3<<16) @将第21:16清0

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

@设置无上拉下拉电阻

LDR R0,=0X5000600C @指定寄存器地址

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

BIC R1,R1,#(0x3<<16) @将第21:16清0

@将第21:16设置为01

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

@设置PF10为输出 将GPIOE_MODER21:20设置为01,就能够让PE10为输出工作模式

LDR R0,=0X50007000 @指定寄存器地址

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

BIC R1,R1,#(0x3<<20) @将第21:20清0

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

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

@设置PF10为推完输出 将GPIOE_OTYPER寄存器10设置为0,就能够让PE10以推挽输出模式进行工作

LDR R0,=0X50007004 @指定寄存器地址

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

BIC R1,R1,#(0x1<<10) @将第10清0

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

@设置PF10为低速输出

LDR R0,=0X50007008 @指定寄存器地址

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

BIC R1,R1,#(0x3<<20) @将第21:20清0

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

@设置无上拉下拉电阻

LDR R0,=0X5000700C @指定寄存器地址

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

BIC R1,R1,#(0x3<<20) @将第21:20清0

@将第21:20设置为01

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

loop:

@设置LED1亮

BL LED1_ON

BL DELAY

BL LED1_OFF

BL LED2_ON

BL DELAY

BL LED2_OFF

BL LED3_ON

BL DELAY

BL LED3_OFF

BL DELAY

b loop

LED1_ON:

LDR R0,=0X50006014 @指定寄存器地址

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

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

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

MOV PC,LR

LED1_OFF:

LDR R0,=0X50006014 @指定寄存器地址

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

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

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

MOV PC,LR

LED2_ON:

LDR R0,=0X50007014 @指定寄存器地址

LDR R1,R0 @将寄存器原来的数值读取出来,保存到R2中,R2:PF10

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

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

MOV PC,LR

LED2_OFF:

LDR R0,=0X50007014 @指定寄存器地址

LDR R1,R0 @将寄存器原来的数值读取出来,保存到R2中

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

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

MOV PC,LR

LED3_ON:

LDR R0,=0X50006014 @指定寄存器地址

LDR R1,R0 @将寄存器原来的数值读取出来,保存到R3中,R3:PE8

ORR R1,R1,#(0x1<<8) @将第10设置为1

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

MOV PC,LR

LED3_OFF:

LDR R0,=0X50006014 @指定寄存器地址

LDR R1,R0 @将寄存器原来的数值读取出来,保存到R3中

BIC R1,R1,#(0x1<<8) @将第10设置为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

相关推荐
北京迅为17 分钟前
【迅为开发板专属工具③】告别万用表串口助手|BoardLab一站式硬件测试平台
单片机·嵌入式硬件
HRTOS1 小时前
HRTOS应用示例:事件机制与高优先级任务抢占详解
单片机·51单片机
大漠飞鹰66662 小时前
【Uart串口-GD32无标题】
stm32·单片机·嵌入式硬件
西峰u2 小时前
Java Socket网络编程|TCP与UDP深度梳理
单片机·嵌入式硬件
至为芯2 小时前
PY32F002B至为芯集成32位ARM内核的低成本MCU单片机
单片机·集成电路·芯片
亮工硬件2 小时前
1-8 简易串口通讯协议(UART + 自定义帧协议)
笔记·stm32·单片机·嵌入式硬件·学习
三佛科技-187366133973 小时前
小家电/玩具MCU选型指南,国产低成本MCU替代之选
单片机·嵌入式硬件
花 满 楼3 小时前
TPWM — PWM 测量模式(TIM PWM Measurement Mode)
单片机·嵌入式硬件·fpga开发
周洲083013 小时前
STM32 最简工程搭建|标准库/HAL库规范化模板,零冗余可直接落地
stm32·单片机·嵌入式硬件
ACP广源盛1392462567314 小时前
M6/M5 Pro Mac mini 端侧 AI 落地@ACP#YLB3116 中端多盘存储扩展在 AI 服务中的机会与应用场景
大数据·网络·数据库·人工智能·嵌入式硬件·macos