2024.4.11

汇编实现stmstm32mp157 led灯轮流亮

cpp 复制代码
.text 
.global _start
_start: 
	@使能GPIOE的外设时钟   RCC_MP_AHBENSETR 0X50000a28 [4]->1
    LDR  R0,=0X50000A28    @指定基地址
    LDR R1,[R0]        @寄存器数据读取出来保存到R1中
    ORR R1,R1,#(0X3<<4)       @[4]设置为1
    str R1,[R0]    @将修改之后的值写回去

    @设置PE10为输出 GPIOE_MODER [21:20]->01  0x500006000
    LDR R0,=0x50006000  @指定基地址
    LDR R1,[R0]             @将寄存器数据读取出来保存到R1
    BIC R1,R1,#(0X3<<20)   @[21:20]设置为00
    ORR R1,R1,#(0X1<<20)       @ [21:20]设置为01
    STR R1,[R0]         @将修改之后的值写回去

    @设置PF10为输出 GPIOE_MODER [21:20]->01  0x500006000
    LDR R0,=0x50007000  @指定基地址
    LDR R1,[R0]             @将寄存器数据读取出来保存到R1
    BIC R1,R1,#(0X3<<20)   @[21:20]设置为00
    ORR R1,R1,#(0X1<<20)       @ [21:20]设置为01
    STR R1,[R0]         @将修改之后的值写回去

  @设置PE8为输出 GPIOE_MODER [21:20]->01  0x500006000
    LDR R0,=0x50006000  @指定基地址
    LDR R1,[R0]             @将寄存器数据读取出来保存到R1
    BIC R1,R1,#(0X3<<16)   @[21:20]设置为00
    ORR R1,R1,#(0X1<<16)       @ [21:20]设置为01
    STR R1,[R0]         @将修改之后的值写回去

    
    @设置PE10为推挽输出 GPIOE_OTYPEER [10]->0  0x500006004
    LDR R0,=0x50006004  @指定基地址
    LDR R1,[R0]             @将寄存器数据读取出来保存到R1
    BIC R1,R1,#(0X1<<10)   @[10]设置为0
    STR R1,[R0]         @将修改之后的值写回去

    @设置PF10为推挽输出 GPIOE_OTYPEER [10]->0  0x500006004
    LDR R0,=0x50007004  @指定基地址
    LDR R1,[R0]             @将寄存器数据读取出来保存到R1
    BIC R1,R1,#(0X1<<10)   @[10]设置为0
    STR R1,[R0]         @将修改之后的值写回去

@设置PE8为推挽输出 GPIOE_OTYPEER [10]->0  0x500006004
    LDR R0,=0x50006004  @指定基地址
    LDR R1,[R0]             @将寄存器数据读取出来保存到R1
    BIC R1,R1,#(0X1<<8)   @[8]]设置为0
    STR R1,[R0]         @将修改之后的值写回去


    @设置PE10为低速输出 GPIOE_OSPEEDR   [21:20]->0  0x500006008
    LDR R0,=0x50006008  @指定基地址
    LDR R1,[R0]             @将寄存器数据读取出来保存到R1
    BIC R1,R1,#(0X3<<20)   @[21:20]设置为0
    STR R1,[R0]         @将修改之后的值写回去

    @设置PF10为低速输出 GPIOE_OSPEEDR   [21:20]->0  0x500006008
    LDR R0,=0x50007008  @指定基地址
    LDR R1,[R0]             @将寄存器数据读取出来保存到R1
    BIC R1,R1,#(0X3<<20)   @[21:20]设置为0
    STR R1,[R0]         @将修改之后的值写回去

    @设置PE8为低速输出 GPIOE_OSPEEDR   [21:20]->0  0x500006008
    LDR R0,=0x50006008  @指定基地址
    LDR R1,[R0]             @将寄存器数据读取出来保存到R1
    BIC R1,R1,#(0X3<<16)   @[21:20]设置为0
    STR R1,[R0]         @将修改之后的值写回去

    @设置PE10无上拉下拉电阻 GPIOE_PUPDR 
    LDR R0,=0x5000600C @指定基地址
    LDR R1,[R0]             @将寄存器数据读取出来保存到R1
    BIC R1,R1,#(0X3<<20)   @[21:20]设置为0
    STR R1,[R0]         @将修改之后的值写回去

       @设置PF10无上拉下拉电阻 GPIOE_PUPDR 
    LDR R0,=0x5000700C @指定基地址
    LDR R1,[R0]             @将寄存器数据读取出来保存到R1
    BIC R1,R1,#(0X3<<20)   @[21:20]设置为0
    STR R1,[R0]         @将修改之后的值写回去

@设置PE8无上拉下拉电阻 GPIOE_PUPDR 
    LDR R0,=0x5000700C @指定基地址
    LDR R1,[R0]             @将寄存器数据读取出来保存到R1
    BIC R1,R1,#(0X3<<16)   @[21:20]设置为0
    STR R1,[R0]         @将修改之后的值写回去

    LOOP:   @不让程序结束
       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 LOOP
    

LED1_ON:
    @点灯    GPIOE_ODR[10]->1      0向0006014
    LDR R0,=0x50006014    @指定基地址
    LDR R1,[R0]             @将寄存器数据读取出来保存到R1
    ORR R1,R1,#(0X1<<10)   @[10]设置为0
    STR R1,[R0]         @将修改之后的值写回去
    MOV PC,LR      @程序返回

    LED2_ON:
    @点灯    GPIOE_ODR[10]->1      0向0006014
    LDR R0,=0x50007014    @指定基地址
    LDR R1,[R0]             @将寄存器数据读取出来保存到R1
    ORR R1,R1,#(0X1<<10)   @[10]设置为0
    STR R1,[R0]         @将修改之后的值写回去
    MOV PC,LR      @程序返回

      LED3_ON:
    @点灯    GPIOE_ODR[10]->1      0向0006014
    LDR R0,=0x50006014    @指定基地址
    LDR R1,[R0]             @将寄存器数据读取出来保存到R1
    ORR R1,R1,#(0X1<<8)   @[10]设置为0
    STR R1,[R0]         @将修改之后的值写回去
    MOV PC,LR      @程序返回

LED1_OFF:
    @灭灯    GPIOE_ODR[10]->1      0向0006014
    LDR R0,=0x50006014    @指定基地址
    LDR R1,[R0]             @将寄存器数据读取出来保存到R1
    BIC R1,R1,#(0X1<<10)   @[10]设置为0
    STR R1,[R0]         @将修改之后的值写回去
    MOV PC,LR      @程序返回


LED2_OFF:
    @灭灯    GPIOE_ODR[10]->1      0向0006014
    LDR R0,=0x50007014    @指定基地址
    LDR R1,[R0]             @将寄存器数据读取出来保存到R1
    BIC R1,R1,#(0X1<<10)   @[10]设置为0
    STR R1,[R0]         @将修改之后的值写回去
    MOV PC,LR      @程序返回

LED3_OFF:
    @灭灯    GPIOE_ODR[10]->1      0向0006014
    LDR R0,=0x50006014    @指定基地址
    LDR R1,[R0]             @将寄存器数据读取出来保存到R1
    BIC R1,R1,#(0X1<<8)   @[10]设置为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
相关推荐
倔强的胡萝卜20 分钟前
基于STM32F103C8T6的温度报警器设计
stm32·单片机·嵌入式硬件
缘来是你远去是我1 小时前
ZYNQ 系列芯片中断机制详解:类型、处理过程与中断处理函数
单片机·嵌入式硬件
LCG米3 小时前
STM32 定时器主从模式输出精确脉冲数实测:TRGO 触发链拆解、多发一脉冲根因与干净停止时序落地
stm32·单片机·嵌入式硬件·嵌入式
Dev_XH3 小时前
【成品设计】基于物联网的配电箱智能防护系统设计
stm32·单片机·嵌入式硬件·物联网
Dev_XH5 小时前
【成品设计】基于单片机的工厂设备能耗监控与优化系统
stm32·单片机·嵌入式硬件·物联网
路上有只喵1 天前
认识元器件 · 单片机(MCU/MPU/SOC) · 实战篇 11
单片机·嵌入式硬件
不昀1 天前
开关电源电流互感器怎么选:匝比、采样电阻与复位的计算笔记
单片机·嵌入式硬件·电子元器件
小李不想当小白1 天前
WDG看门狗(STM32标准库学习笔记)
笔记·stm32·单片机·嵌入式硬件·学习·嵌入式
智者知已应修善业1 天前
【51单片机实现从下到上,从上到下,从中间到两边,两边到中间】2024-10-23
c语言·经验分享·笔记·单片机·嵌入式硬件·51单片机