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
相关推荐
鲨辣椒100863 小时前
51单片机初相识
单片机·嵌入式硬件·51单片机
独处东汉3 小时前
freertos开发空气检测仪之完结_Air_check_App 工程概览与使用说明
stm32·单片机·嵌入式硬件·freertos
电子工程师成长日记-C516 小时前
51单片机低频信号发生器
单片机·嵌入式硬件·51单片机
望酹江月6 小时前
HNU-RFID与传感器原理实验
c语言·单片机
GodKK老神灭6 小时前
FOC中PLL的点乘法
单片机
逐步前行7 小时前
STM32_DMA_寄存器操作
stm32·单片机·嵌入式硬件
Hello World . .8 小时前
51单片机基础外设:中断、定时器/计数器(PWM控制蜂鸣器、电机)
单片机·嵌入式硬件·51单片机
WangLanguager9 小时前
foc最终要求的是相电压,还是线电压
单片机
LCG元9 小时前
基于STM32CubeMX的HAL库串口通信与DMA传输深度优化
stm32·单片机·嵌入式硬件
嵌入小生00710 小时前
硬件 --- GPIO/中断/定时器/蜂鸣器
单片机·嵌入式硬件·定时器·pwm·gpio·蜂鸣器·中断