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
相关推荐
交叉编译之王 hahaha14 小时前
OpenHarmony 5.1.0 Release目录结构详细解析(3级目录)
arm开发·华为·harmonyos
{⌐■_■}2 天前
【go】binary包,大小端理解,read,write使用,自实现TCP封包拆包案例
arm开发·tcp/ip·golang
亿道电子Emdoor3 天前
【ARM】MDK如何将变量存储到指定内存地址
arm开发·stm32·单片机
nuoyigui98893 天前
keil 解决 Error: CreateProcess failed, Command: ‘XXX\ARM\ARMCC\bin\fromelf.exe
arm开发
charlie1145141913 天前
基于Qt6 + MuPDF在 Arm IMX6ULL运行的PDF浏览器——MuPDF Adapter文档
arm开发·qt·学习·pdf·教程·设计·qt6
MaoXian_n3 天前
[IMX] 03.时钟树 - Clock Tree
arm开发·驱动开发·单片机·嵌入式硬件
2401_859049084 天前
MSPM0--Timer(一口一口喂版)
arm开发·单片机·mcu·算法
田园诗人之园4 天前
ARM A64 LDR指令
arm开发·arm a64 ldr指令
CloudPilotAI5 天前
“海外滴滴”Uber的Arm迁移实录:重构大规模基础设施
arm开发·架构·arm
szxinmai主板定制专家5 天前
基于TI AM6442+FPGA解决方案,支持6网口,4路CAN,8个串口
arm开发·人工智能·fpga开发