【arm实验1】GPIO实验-LED灯的流水亮灭

c 复制代码
linux@linux:~/study/01-asm$ cat asm-led.S 
.text 
.global _start
_start: 
@1.设置GPIOE寄存器的时钟使能  RCC_MP_AHB4ENSETR[4]->1     0x50000a28
LDR R0,=0X50000A28
LDR R1,[R0]  @从r0为起始地址的4字节数据取出放在R1
ORR R1,R1,#(0x1<<4)  @第4位设置为1
ORR R1,R1,#(0x1<<5)  @第4位设置为1
STR R1,[R0]  @写回

@2.设置PE10管脚为输出模式  GPIOE_MODER[21:20]->01   0x50006000
LDR R0,=0x50006000
LDR R1,[R0]
BIC R1,R1,#(0x3<<20)@[21L20]清0
ORR R1,R1,#(0X1<<20) @设置
STR R1,[R0] 
@2.设置PF10管脚为输出模式  GPIOE_MODER[21:20]->01   0x50007000
ldr r0,=0x50007000
ldr r1,[r0]
bic r1,r1,#(0x3<<20)
orr r1,r1,#(0x1<<20)
str r1,[r0]
@2.设置PF10管脚为输出模式  GPIOE_MODER[21:20]->01   0x50006000
LDR R0,=0x50006000
LDR R1,[R0]
BIC R1,R1,#(0x3<<16)@[21L20]清0
ORR R1,R1,#(0X1<<16) @设置
STR R1,[R0]


@3.设置PE10管脚为推挽输出  GPIOE_OTYPER[10]->0   0X50006004
LDR R0,=0X50006004
LDR R1,[R0]
BIC R1,R1,#(0X1<<10)
STR R1,[R0] 
@设置PF10
LDR R0,=0X50007004
LDR R1,[R0]
BIC R1,R1,#(0X1<<10)
STR R1,[R0] 
@设置PE8
LDR R0,=0X50006004
LDR R1,[R0]
BIC R1,R1,#(0X1<<8)
STR R1,[R0] 

@4.设置PE10管脚为低速输出   GPIOE_OSPEEDR[21:20]->00  0X50006008
LDR R0,=0x50006008
LDR R1,[R0]
BIC R1,R1,#(0x3<<20)@[21L20]清0
STR R1,[R0] 
@设置PF10
LDR R0,=0x50007008
LDR R1,[R0]
BIC R1,R1,#(0x3<<20)@[21L20]清0
STR R1,[R0]
@设置PE8
LDR R0,=0x50006008
LDR R1,[R0]
BIC R1,R1,#(0x3<<16)@[21L20]清0
STR R1,[R0]

@5.设置PE10管脚输出时没有上拉下拉电阻  GPIOE_PUPDR[21:20]->00  0X5000600C
LDR R0,=0x5000600c
LDR R1,[R0]
BIC R1,R1,#(0x3<<20)@[21L20]清0
STR R1,[R0] 
@设置PF10
LDR R0,=0x5000700c
LDR R1,[R0]
BIC R1,R1,#(0x3<<20)@[21L20]清0
STR R1,[R0]
@设置PE8
LDR R0,=0x5000600c
LDR R1,[R0]
BIC R1,R1,#(0x3<<16)@[21L20]清0
STR R1,[R0]

@  6.PE10输出高低电平      GPIOE_ODR[10]->1(高电平)  0(低电平)    0X50006014
@LED1,LED2,LED3连续亮灭交替
loop:
    @亮
    LDR R0,=0X50006014
    LDR R1,[R0]
    ORR R1,R1,#(0x1<<10)
    STR R1,[R0]
    BL delay
    @灭
    LDR R0,=0X50006014
    LDR R1,[R0]
    BIC R1,R1,#(0x1<<10)
    STR R1,[R0]
    BL delay

    @亮
	LDR R0,=0X50007014
    LDR R1,[R0]
    ORR R1,R1,#(0x1<<10)
    STR R1,[R0]
    BL delay

    @灭
    LDR R0,=0X50007014
    LDR R1,[R0]
    BIC R1,R1,#(0x1<<10)
    STR R1,[R0]
    BL delay

    @亮
    LDR R0,=0X50006014
    LDR R1,[R0]
    ORR R1,R1,#(0x1<<8)
    STR R1,[R0]
    BL delay
    @灭
    LDR R0,=0X50006014
    LDR R1,[R0]
    BIC R1,R1,#(0x1<<8)
    STR R1,[R0]
    BL delay

    b loop



@封装延时函数

delay:
    LDR R4,=0X10000000
mm:
    cmp r4,#0
    subne r4,r4,#1
    bne mm
    mov pc,lr  @程序返回


.end 


相关推荐
冰茶丿2 小时前
嵌入式安全第一关:Secure Boot是怎么保护你的设备的?
嵌入式硬件·安全
卖萌的斜阳2 小时前
W55MH32L-EVB 上手测评:硬件 TCP/IP 加持的以太网单片机,MicroPython 零门槛开发
单片机·网络协议·tcp/ip
Kuakewei8883 小时前
4056充电芯片:28V高耐压+电池反接保护+热调节功能
嵌入式硬件
三品吉他手会点灯3 小时前
嵌入式机器学习 - 学习笔记1.1.1 - 什么是机器学习?
c语言·人工智能·笔记·嵌入式硬件·学习·机器学习
woohuwan3 小时前
CST 匝数比和采样电阻怎么算?
单片机·嵌入式硬件
王光环5 小时前
STM32H750串口一直进IRQ问题解决
stm32·单片机·嵌入式硬件
2401_854151556 小时前
STM32 选项字节与读写保护(RDP)
stm32·单片机·嵌入式硬件
piaoyiren7 小时前
STC8 单片机蜂鸣器播放音乐
单片机·嵌入式硬件
阿拉斯攀登7 小时前
无人售货柜MQTT客户端工业级配置:心跳、遗嘱、重连、QoS适配实战
嵌入式硬件·mqtt·安卓·零售·无人售货柜·无人售货机
KaifuZeng8 小时前
通信与接口协议面试问题汇总三
单片机·嵌入式硬件·面试·通信与接口协议