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
相关推荐
点灯小铭3 分钟前
基于STM32单片机智能RFID刷卡汽车位锁桩设计
stm32·单片机·汽车·毕业设计·课程设计
bai5459361 小时前
STM32 软件I2C读写MPU6050
stm32·单片机·嵌入式硬件
逼子格3 小时前
AT89C52单片机介绍
单片机·嵌入式硬件·51单片机·硬件工程师·硬件工程师真题·at89c52·器件手册
Wallace Zhang10 小时前
STM32 - Embedded IDE - GCC - 显著减少固件的体积
stm32·单片机·嵌入式硬件
fengfuyao98520 小时前
STM32如何定位HardFault错误,一种实用方法
stm32·单片机·嵌入式硬件
爱学习的颖颖21 小时前
EXTI外部中断的执行逻辑|以对射式红外传感器计次为例
单片机·嵌入式硬件·exti中断
AI精钢1 天前
H20芯片与中国的科技自立:一场隐形的博弈
人工智能·科技·stm32·单片机·物联网
etcix1 天前
implement copy file content to clipboard on Windows
windows·stm32·单片机
谱写秋天1 天前
在STM32F103上进行FreeRTOS移植和配置(STM32CubeIDE)
c语言·stm32·单片机·freertos
globbo1 天前
【嵌入式STM32】I2C总结
单片机·嵌入式硬件