ARM day3

思维导图:

编程实现3个LED灯亮灭

bash 复制代码
.text 
.global _start	@声明全局变量
_start: 		@汇编程序入口
	@使能GPIOE的外设时钟  RCC_MP_AHB4ENSETR的第[4]设置为1即可使能GPIOE时钟
	LDR R0,=0X50000A28   @指定寄存器地址
	LDR R1,[R0]  @将寄存器原来的数值读取出来,保存到R1中
	ORR R1,R1,#(0x1<<4)   @将第4位设置为1
	STR R1,[R0]  @将修改后的数值写回
	@使能GPIOE的外设时钟  RCC_MP_AHB4ENSETR的第[5]设置为1即可使能GPIOF时钟
	LDR R0,=0X50000A28   @指定寄存器地址
	LDR R1,[R0]  @将寄存器原来的数值读取出来,保存到R1中
	ORR R1,R1,#(0x1<<5)   @将第5位设置为1
	STR R1,[R0]  @将修改后的数值写回
 
	@设置PE10,PE8为输出  将GPIOE_MODER[21:20]设置为01,就能够让PE10为输出工作模式
	LDR R0,=0X50006000   @指定寄存器地址
	LDR R1,[R0]  @将寄存器原来的数值读取出来,保存到R1中
	BIC R1,R1,#(0x3<<20)   @将第21:20清0
	BIC R1,R1,#(0x3<<16)    @将第17:16清0  
	ORR R1,R1,#(0x1<<20)   @将第21:20设置为01
	ORR R1,R1,#(0x1<<16)   @将第17:16设置为01
	STR R1,[R0]  @将修改后的数值写回
	@设置PF10为输出  将GPIOE_MODER[21: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]  @将修改后的数值写回
 
	@设置PE10,PE8为推完输出  将GPIOE_OTYPER寄存器[10]设置为0,就能够让PE10以推挽输出模式进行工作
	LDR R0,=0X50006004   @指定寄存器地址
	LDR R1,[R0]  @将寄存器原来的数值读取出来,保存到R1中
	BIC R1,R1,#(0x1<<10)   @将第10清0
	BIC R1,R1,#(0x1<<8)   @将第8清0
	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]  @将修改后的数值写回
 
	@设置PE10,PE8为低速输出
	LDR R0,=0X50006008   @指定寄存器地址
	LDR R1,[R0]  @将寄存器原来的数值读取出来,保存到R1中
	BIC R1,R1,#(0x3<<20)   @将第21:20清0
	BIC R1,R1,#(0x3<<16)   @将第17:16清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,=0X5000600C   @指定寄存器地址
	LDR R1,[R0]  @将寄存器原来的数值读取出来,保存到R1中
	BIC R1,R1,#(0x3<<20)   @将第21:20清0
	BIC R1,R1,#(0x3<<16)   @将第17:16清0
	STR R1,[R0]  @将修改后的数值写回
	@设置无上拉下拉电阻 
	LDR R0,=0X5000700C   @指定寄存器地址
	LDR R1,[R0]  @将寄存器原来的数值读取出来,保存到R1中
	BIC R1,R1,#(0x3<<20)   @将第21:20清0
	STR R1,[R0]  @将修改后的数值写回
 
loop:
    BL LED1_ON		@设置LED1亮
    BL LED2_OFF
    BL LED3_OFF
    BL DELAY
	
    BL LED1_OFF
    BL LED2_ON		@设置LED2亮
    BL LED3_OFF
    BL DELAY
	
    BL LED1_OFF
    BL LED2_OFF
    BL LED3_ON		@设置LED3亮
    BL DELAY
    b loop
 
LED1_ON:
    LDR R0,=0X50006014   @指定寄存器地址 pe10 50006000
    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   @指定寄存器地址 pf10 50007000
    LDR R1,[R0]  @将寄存器原来的数值读取出来,保存到R1中
    ORR R1,R1,#(0x1<<10)   @将第10设置为1
    STR R1,[R0]  @将修改后的数值写回 
    MOV PC,LR
 
LED2_OFF:
    LDR R0,=0X50007014   @指定寄存器地址
    LDR R1,[R0]  @将寄存器原来的数值读取出来,保存到R1中
    BIC R1,R1,#(0x1<<10)   @将第10设置为0
    STR R1,[R0]  @将修改后的数值写回 
    MOV PC,LR

LED3_ON:
    LDR R0,=0X50006014   @指定寄存器地址 pe8 5000
    LDR R1,[R0]  @将寄存器原来的数值读取出来,保存到R1中
    ORR R1,R1,#(0x1<<8)   @将第8设置为1
    STR R1,[R0]  @将修改后的数值写回 
    MOV PC,LR

LED3_OFF:
    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
相关推荐
hsjiasb35 分钟前
FreeRTOS学习(二十六)——动态内存管理heap_1到heap_5
stm32·单片机·学习·学习笔记·freertos
周洲08305 小时前
STM32 GPIO 外部中断深度解析:边沿触发 / 电平触发、NVIC 优先级配置、中断嵌套实战
stm32·单片机·嵌入式硬件
LCG元5 小时前
STM32F103 CAN 总线通信实战:标准库双机通信与过滤器配置精讲
stm32·单片机·嵌入式硬件
zlinear数据采集卡6 小时前
D223的PWM电机控制:6路独立脉冲+加减速算法深度解析
arm开发·stm32·嵌入式硬件·算法·fpga开发·架构
Kuakewei8887 小时前
平芯微42V热拔插OVP过压保护芯片:PW1600
嵌入式硬件
ACP广源盛139246256737 小时前
WAIC2026 国产超节点算力浪潮下@ACP#IX9104 在算力矩阵中的定位与落地场景
大数据·数据库·人工智能·嵌入式硬件·线性代数·矩阵
z20348315207 小时前
STM32单片机控制无源蜂鸣器播放《晴天》
stm32·单片机·嵌入式硬件
奔跑的架构师9 小时前
[A-49]ARMv9/v8-PSCI接口规范与工作流程简介
android·linux·arm开发·arm
国科安芯9 小时前
详解ADC 规则组外部触发:CH2、CH3 与 TRGO2
运维·网络·单片机·嵌入式硬件·mcu·系统架构
ACP广源盛139246256739 小时前
WAIC2026 国产算力浪潮@ACP#YLB3118 在算力矩阵中的存储定位与落地场景
大数据·人工智能·分布式·单片机·嵌入式硬件