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
相关推荐
代码游侠2 小时前
ARM开发——阶段问题综述(二)
运维·arm开发·笔记·单片机·嵌入式硬件·学习
DLGXY2 小时前
STM32——旋转编码器计次(七)
stm32·单片机·嵌入式硬件
羽获飞2 小时前
从零开始学嵌入式之STM32——3.使用寄存器点亮一盏LED灯
单片机·嵌入式硬件
浩子智控3 小时前
商业航天计算机抗辐射设计
单片机·嵌入式硬件
独处东汉7 小时前
freertos开发空气检测仪之输入子系统结构体设计
数据结构·人工智能·stm32·单片机·嵌入式硬件·算法
czy87874757 小时前
机智云 MCU OTA可以对MCU程序进行无线远程升级。
单片机·嵌入式硬件
A9better9 小时前
嵌入式开发学习日志52——二值与计数信号量
单片机·嵌入式硬件·学习
日更嵌入式的打工仔11 小时前
(实用向)中断服务程序(ISR)的优化方向
笔记·单片机
想放学的刺客11 小时前
单片机嵌入式试题(第25)嵌入式系统可靠性设计与外设驱动异常处理
stm32·单片机·嵌入式硬件·mcu·物联网
淘晶驰AK11 小时前
大学如何自学嵌入式开发?
单片机·嵌入式硬件