ARM 点灯

复制代码
.text 
.global _start
_start: 
   @led1
  @设置GPIOE时钟使能  RCC_MP_AHB4ENSETR[4]->1   0X50000A28
    LDR R0,=0X50000A28  @指定寄存器地址
    LDR R1,[R0]  @将寄存器数值取出来放在R1中
    ORR R1,R1,#(0x1<<4)  @将第4位设置为1
    STR R1,[R0] @将修改后的值写回去

    @设置PE10为输出  GPIOE_MODER[21:20]->01   0X50006000
    LDR R0,=0X50006000  @指定寄存器地址
    LDR R1,[R0]  @将寄存器数值取出来放在R1中
    BIC R1,R1,#(0x3<<20)  @将第[21:20]位设置为01
    ORR R1,R1,#(0x1<<20)
    STR R1,[R0] @将修改后的值写回去

    @设置PE10为推挽输出 GPIOE_OTYPER[10]->0  0X50006004
    LDR R0,=0X50006004  @指定寄存器地址
    LDR R1,[R0]  @将寄存器数值取出来放在R1中
    BIC R1,R1,#(0x1<<10)  @将第[10]位设置为0
    STR R1,[R0] @将修改后的值写回去

    @设置PE10为低速输出 GPIOE_OSPEEDR[21:20]->00  0x50006008
     LDR R0,=0X50006008  @指定寄存器地址
    LDR R1,[R0]  @将寄存器数值取出来放在R1中
    BIC R1,R1,#(0x3<<20)  @将第[21:20]位设置为01
    STR R1,[R0] @将修改后的值写回去

    @设置PE10输出时无上拉下拉电阻  GPIOE_PUPDR[21:20]->00  0X5000600C
    LDR R0,=0X5000600C  @指定寄存器地址
    LDR R1,[R0]  @将寄存器数值取出来放在R1中
    BIC R1,R1,#(0x3<<20)  @将第[21:20]位设置为01
    STR R1,[R0] @将修改后的值写回去

      @led2
  @设置GPIOE时钟使能  RCC_MP_AHB4ENSETR[5]->1   0X50000A28
    LDR R0,=0X50000A28  @指定寄存器地址
    LDR R1,[R0]  @将寄存器数值取出来放在R1中
    ORR R1,R1,#(0x1<<5)  @将第5位设置为1
    STR R1,[R0] @将修改后的值写回去

    @设置PF10为输出  GPIOE_MODER[21:20]->01   0X50007000
    LDR R0,=0X50007000  @指定寄存器地址
    LDR R1,[R0]  @将寄存器数值取出来放在R1中
    BIC R1,R1,#(0x3<<20)  @将第[21:20]位设置为01
    ORR R1,R1,#(0x1<<20)
    STR R1,[R0] @将修改后的值写回去

    @设置PF10为推挽输出 GPIOE_OTYPER[10]->0  0X50007004
    LDR R0,=0X50007004  @指定寄存器地址
    LDR R1,[R0]  @将寄存器数值取出来放在R1中
    BIC R1,R1,#(0x1<<10)  @将第[10]位设置为0
    STR R1,[R0] @将修改后的值写回去

    @设置PF10为低速输出 GPIOE_OSPEEDR[21:20]->00  0x50007008
     LDR R0,=0X50007008  @指定寄存器地址
    LDR R1,[R0]  @将寄存器数值取出来放在R1中
    BIC R1,R1,#(0x3<<20)  @将第[21:20]位设置为01
    STR R1,[R0] @将修改后的值写回去

    @设置PF10输出时无上拉下拉电阻  GPIOE_PUPDR[21:20]->00  0X5000700C
    LDR R0,=0X5000700C  @指定寄存器地址
    LDR R1,[R0]  @将寄存器数值取出来放在R1中
    BIC R1,R1,#(0x3<<20)  @将第[21:20]位设置为01
    STR R1,[R0] @将修改后的值写回去  @led1

    @LED3
  @设置GPIOE时钟使能  RCC_MP_AHB4ENSETR[4]->1   0X50000A28
    LDR R0,=0X50000A28  @指定寄存器地址
    LDR R1,[R0]  @将寄存器数值取出来放在R1中
    ORR R1,R1,#(0x1<<4)  @将第4位设置为1
    STR R1,[R0] @将修改后的值写回去

    @设置PE8为输出  GPIOE_MODER[17:16]->01   0X50006000
    LDR R0,=0X50006000  @指定寄存器地址
    LDR R1,[R0]  @将寄存器数值取出来放在R1中
    BIC R1,R1,#(0x3<<16)  @将第[17:16]位设置为01
    ORR R1,R1,#(0x1<<16)
    STR R1,[R0] @将修改后的值写回去

    @设置PE8为推挽输出 GPIOE_OTYPER[10]->0  0X50006004
    LDR R0,=0X50006004  @指定寄存器地址
    LDR R1,[R0]  @将寄存器数值取出来放在R1中
    BIC R1,R1,#(0x1<<8)  @将第[8]位设置为0
    STR R1,[R0] @将修改后的值写回去

    @设置PE8为低速输出 GPIOE_OSPEEDR[21:20]->00  0x50006008
     LDR R0,=0X50006008  @指定寄存器地址
    LDR R1,[R0]  @将寄存器数值取出来放在R1中
    BIC R1,R1,#(0x3<<20)  @将第[21:20]位设置为01
    STR R1,[R0] @将修改后的值写回去

    @设置PG10输出时无上拉下拉电阻  GPIOE_PUPDR[16:17]->00  0X5000600C
    LDR R0,=0X5000600C  @指定寄存器地址
    LDR R1,[R0]  @将寄存器数值取出来放在R1中
    BIC R1,R1,#(0x3<<16)  @将第[17:16]位设置为01
    STR R1,[R0] @将修改后的值写回去


flash:
   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 flash

led1_on:
     @设置PE10输出高电平  GPIOE_ODR[10]->1   0x50006014
    LDR R0,=0X50006014  @指定寄存器地址
    LDR R1,[R0]  @将寄存器数值取出来放在R1中
    ORR R1,R1,#(0x1<<10)  @将第[10]位设置为1
    STR R1,[R0] @将修改后的值写回去
    mov pc,lr

led1_off:
     @设置PE10输出高电平  GPIOE_ODR[10]->0   0x50006014
    LDR R0,=0X50006014  @指定寄存器地址
    LDR R1,[R0]  @将寄存器数值取出来放在R1中
    BIC R1,R1,#(0x1<<10)  @将第[10]位设置为0
    STR R1,[R0] @将修改后的值写回去
    mov pc,lr

led2_on:
     @设置PF10输出高电平  GPIOE_ODR[10]->1   0x50007014
    LDR R0,=0X50007014  @指定寄存器地址
    LDR R1,[R0]  @将寄存器数值取出来放在R1中
    ORR R1,R1,#(0x1<<10)  @将第[10]位设置为1
    STR R1,[R0] @将修改后的值写回去
    mov pc,lr

led2_off:
     @设置PF10输出高电平  GPIOE_ODR[10]->0   0x50007014
    LDR R0,=0X50007014  @指定寄存器地址
    LDR R1,[R0]  @将寄存器数值取出来放在R1中
    BIC R1,R1,#(0x1<<10)  @将第[10]位设置为0
    STR R1,[R0] @将修改后的值写回去
    mov pc,lr

led3_on:
     @设置PG10输出高电平  GPIOE_ODR[10]->1   0x50006014
    LDR R0,=0X50006014  @指定寄存器地址
    LDR R1,[R0]  @将寄存器数值取出来放在R1中
    ORR R1,R1,#(0x1<<8)  @将第[8]位设置为1
    STR R1,[R0] @将修改后的值写回去
    mov pc,lr

led3_off:
     @设置PG10输出高电平  GPIOE_ODR[10]->0   0x50006014
    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
相关推荐
somi71 天前
ARM-05-Platform + DTS + GPIO子系统 + 中断 + 等待队列 + 错误处理
linux·运维·arm开发
互联科技报1 天前
好用稳定的5G网络仿真软件如何选?— 深度对比与选型指南
网络·arm开发·5g
web守墓人1 天前
【linux】Mubuntu发布,将完整的ubuntu arm装进手机应用中
linux·arm开发·ubuntu
EnglishJun2 天前
ARM嵌入式学习(十九)--- 字符设备驱动的注册与调用流程
arm开发·学习
ai产品老杨2 天前
异构计算时代的安防底座:基于 Docker 的 X86/ARM 双模部署与 NPU 资源池化实战
arm开发·docker·容器
somi72 天前
ARM-驱动-06-中断底半部 + ioctl + 原子操作与锁
arm开发·单片机·嵌入式硬件
好家伙VCC2 天前
**TEE在嵌入式安全中的应用实践:基于ARM TrustZone的加密存储方案设计与实现*
java·arm开发·python·struts·安全
进击的小头2 天前
第9篇:嵌入式芯片指令集架构(ISA)详解:ARM_RISC-V等主流ISA全对比
arm开发·单片机·架构·risc-v
Yeats_Liao2 天前
混合部署架构:CPU+GPU协同推理的任务调度策略
服务器·arm开发·人工智能·架构·边缘计算
somi72 天前
ARM-驱动-06-DHT11
linux·arm开发·自用