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
相关推荐
国科安芯8 小时前
立方星与微纳卫星综合电子微型化趋势下的抗辐射MCU选型综述
人工智能·单片机·嵌入式硬件·mcu·risc-v·抗辐射
xunyan62348 小时前
3-1 独立按键控制LED亮灭(SDCC + Notepad++ + STC-ISP/普中ISP)
单片机·嵌入式硬件·接口隔离原则
WD137298015578 小时前
WD5030L,为充电桩、工业设备、5G 基站、车载系统、消费电子提供电源,7-30V 的宽压输入
stm32·单片机·嵌入式硬件·5g·车载系统·51单片机
创界工坊工作室10 小时前
30-基于STM32的小麦烘干塔温度控制系统设计
stm32·单片机·嵌入式硬件·proteus
Zwawa11 小时前
先把轮子转稳,才不会烧心:编码器速度环 PID 怎么接回 PWM
c语言·单片机·嵌入式
smartpi_ai12 小时前
51 单片机写好了,大模型语音怎么接?17T 全驱动的现成方案、双板串口分工的边界与画板前的三项硬件确认
单片机·嵌入式硬件·学习
我先去打把游戏先12 小时前
NimBLE是什么-ESP32蓝牙协议栈详解
单片机·嵌入式硬件·ubuntu
Gongsion13 小时前
30V输入耐压|1.5μA超低静态电流|200mA输出,CSM52系列:线性稳压器LDO,12V母线转3.3V/5V传感器、MCU弱电支路可靠稳压方案
单片机·嵌入式硬件·车载系统·无人机·智能家居
芯岭技术17 小时前
XL2400T收发芯片,2.4G无线荧光棒控光解决方案,+PA距离可达700M
单片机·嵌入式硬件·物联网
艾芯微科技17 小时前
ETA1637S2G|钰泰同步升压 LED 背光驱动 SOT23-6,0.1% 超低占空比 PWM 调光
网络·单片机·嵌入式硬件·集成测试·51单片机