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
相关推荐
海滩游侠3 小时前
ARM assembly: Lesson 10
arm开发
Eternal-Student4 小时前
arm-伪指令
arm开发
Eternal-Student4 小时前
everyday_question dq20240731
开发语言·arm开发·php
Tlog嵌入式1 天前
蓝桥杯【物联网】零基础到国奖之路:十六. 扩展模块之矩阵按键
arm开发·stm32·单片机·mcu·物联网·蓝桥杯·iot
Q8343158192 天前
华为 海思22AP10(SS524)H.265 编解码处理器用户指南
arm开发·人工智能·嵌入式硬件·音视频·硬件工程·h.265·视频编解码
星羽空间2 天前
win11下 keil报错Cannot load driver ‘D:\Keil_v5\ARM\Segger\JL2CM3.dll‘
arm开发·keil
日晨难再2 天前
AMBA:APB的历史(从APB1到APB5)
arm开发·arm·硬件工程·fpga·数字ic
Tlog嵌入式2 天前
蓝桥杯【物联网】零基础到国奖之路:十八. 扩展模块之光敏和AS312
arm开发·stm32·单片机·mcu·物联网·蓝桥杯·iot
汽车电子助手3 天前
【STM32开发环境搭建】-4-在STM32CubeMX中新增Keil(MDK-ARM) 5的工程目录(包含指定路径的C和H文件)
c语言·arm开发·stm32·stm32cubemx·keil
海滩游侠3 天前
ARM Assembly 6: Shift 和 Rotate
arm开发