2023.12.21:烧录三个led灯

复制代码
.text 
.global _start
_start: 
/*---------------------------------LD1------------------------------------------------*/
        @设置GEIOE时钟使能  RCC_MP_AHB4ENSETR[4]->1   0x50000A28
        LDR R0,=0X50000A28     @指定寄存器的地址
        LDR R1,[R0]    @将寄存器数值取出来放在R1中
        ORR R1,R1,#(0X1<<4)     @讲第4为设置为1
        STR R1,[R0]    @ 将修改之后的值写回去

        @设置PE10为输出    GPIOE_MODER[21:20]->01    0x50006000
        LDR R0,=0X50006000                 @指定寄存器地址
        LDR R1,[R0]                                   @将寄存器数值取出来放在r1中
        BIC R1,R1,#(0X3<<20)               @将[21:20]位设置为01
        ORR R1,R1,#(0X1<<20)            
        STR R1,[R0]                            @将修改后的值写回去

        @设置PE10为推挽输出  GPIOE_OTYPER[10]->0   0x50006004
          LDR R0,=0X50006004     @指定寄存器的地址
        LDR R1,[R0]    @将寄存器数值取出来放在R1中
        BIC R1,R1,#(0X1<<10)     @讲第10位设置为1
        STR R1,[R0]     @将修改之后的值写回去
        
        @设置PE10为低速输出  GPIOE_OSPEEDR[21:20] ->00   0x50006008
        LDR R0,=0X50006008          @指定寄存器的地址
        LDR R1,[R0]                                  @将寄存器数值取出来放在R1中
        BIC R1,R1,#(0X3<<20)                   @将[21:20]位设置为01
        STR R1,[R0]                                 @将修改后的值写回去

        @设置PE10输出时无上拉下拉电阻  GPIOE_PUPDR[21:20] ->00   0x5000600C
         LDR R0,=0X5000600C              @指定寄存器的地址
        LDR R1,[R0]                                 @将寄存器数值取出来放在R1中
        BIC R1,R1,#(0X3<<20)              @将[21:20]位设置为01
        STR R1,[R0]                                 @将修改后的值写回去
/*-----------------------------------------------LD2-------------------------------------------------------*/

          @设置GEIOE时钟使能  RCC_MP_AHB4ENSETR[4]->1   0x50000A28
        LDR R0,=0X50000A28     @指定寄存器的地址
        LDR R2,[R0]    @将寄存器数值取出来放在R1中
        ORR R2,R2,#(0X1<<5)     @讲第4为设置为1
        STR R2,[R0]    @ 将修改之后的值写回去

        @设置PF10为输出    GPIOF_MODER[21:20]->01    0x50007000
        LDR R5,=0X50007000  
        LDR R2,[R5]
        BIC R2,R2,#(0X3<<20)
        ORR R2,R2,#(0X1<<20)
        STR R2,[R5]

        @设置PF10为推挽输出  GPIOF_OTYPER[10]->0   0x50007004
          LDR R5,=0X50007004     @指定寄存器的地址
        LDR R2,[R5]    @将寄存器数值取出来放在R1中
        BIC R2,R2,#(0X1<<10)     @讲第10位设置为1
        STR R2,[R5]     @将修改之后的值写回去
        
        @设置PF10为低速输出  GPIOF_OSPEEDR[21:20] ->00   0x50007008
        LDR R5,=0X50007008 
        LDR R2,[R5]
        BIC R2,R2,#(0X3<<20)
        STR R2,[R5]

        @设置PF10输出时无上拉下拉电阻  GPIOE_PUPDR[21:20] ->00   0x5000700C
         LDR R5,=0X5000700C  
        LDR R2,[R5]
        BIC R2,R2,#(0X3<<20)
        STR R2,[R5]
/*---------------------------------------------------LD3-------------------------------------------------------*/
          @设置GEIOE时钟使能  RCC_MP_AHB4ENSETR[4]->1   0x50000A28
        LDR R0,=0X50000A28     @指定寄存器的地址
        LDR R3,[R0]    @将寄存器数值取出来放在R1中
        ORR R3,R3,#(0X1<<4)     @讲第4为设置为1
        STR R3,[R0]    @ 将修改之后的值写回去

        @设置PE8为输出    GPIOE_MODER[17:16]->01    0x50006000
        LDR R0,=0X50006000  
        LDR R3,[R0]
        BIC R3,R3,#(0X3<<16)
        ORR R3,R3,#(0X1<<16)
        STR R3,[R0]

        @设置PE8为推挽输出  GPIOE_OTYPER[8]->0   0x50006004
          LDR R0,=0X50006004     @指定寄存器的地址
        LDR R3,[R0]    @将寄存器数值取出来放在R1中
        BIC R3,R3,#(0X1<<8)     @讲第10位设置为1
        STR R3,[R0]     @将修改之后的值写回去
        
        @设置PE8为低速输出  GPIOE_OSPEEDR[17:16] ->00   0x50006008
        LDR R0,=0X50006008 
        LDR R3,[R0]
        BIC R3,R3,#(0X3<<16)
        STR R3,[R0]

        @设置PE8输出时无上拉下拉电阻  GPIOE_PUPDR[17:16] ->00   0x5000600C
         LDR R0,=0X5000600C  
        LDR R3,[R0]
        BIC R3,R3,#(0X3<<16)
        STR R3,[R0]

/*---------------------------------------------------------------------------------------------------------*/
/*
loop:
        @设置PE10输出高电平  GPIOE_ODR[10]->1    0x50006014
        LDR R0,=0X50006014
        LDR R1,[R0]
        ORR R1,R1,#(0X1<<10)
        STR R1,[R0]

        ldr r3,[r0]
        orr r3,r3,#(0x1<<8)
        str r3,[r0]

        ldr r5,=0x50007014
        ldr r2,[r5]
        orr r2,r2,#(0x1<<10)
        str r2,[r5]
      
        b loop
*/
flash:
        bl led_on
        bl delay
        bl led_off
        bl delay
        bl flash

led_on:
             @设置PE10输出高电平  GPIOE_ODR[10]->1    0x50006014
        LDR R0,=0X50006014
        LDR R1,[R0]
        ORR R1,R1,#(0X1<<10)
        STR R1,[R0]

         ldr r3,[r0]
        orr r3,r3,#(0x1<<8)
        str r3,[r0]

        ldr r5,=0x50007014
        ldr r2,[r5]
        orr r2,r2,#(0x1<<10)
        str r2,[r5]

        mov pc,lr

led_off:
             @设置PE10输出高电平  GPIOE_ODR[10]->1    0x50006014
        LDR R0,=0X50006014
        LDR R1,[R0]
        BIC R1,R1,#(0X1<<10)
        STR R1,[R0]

        ldr r3,[r0]
        bic r3,r3,#(0x1<<8)
        str r3,[r0]

        ldr r5,=0x50007014
        ldr r2,[r5]
        bic r2,r2,#(0x1<<10)
        str r2,[r5]
        mov pc,lr

delay:
        ldr r4,=0x10000000

mm:
        cmp r4,#0
        subne r4,r4,#1
        bne mm
        mov pc,lr




.end

效果图

思维导图

相关推荐
AC赳赳老秦7 小时前
公开 CSV 数据集批量处理实战:用 OpenClaw 高效完成下载、清洗与标准化分析样本生成
java·开发语言·汇编·c++·python·deepseek·openclaw
斑马1398 天前
ARM学习笔记(二)——ARM汇编基础
汇编·arm开发·arm
wechatbot8889 天前
【极客互动】企业微信Spring Boot 调度 SearchContact开发自动添加外部联系人网关
汇编·微信·自动化·企业微信·rpa
星栖与芯10 天前
LiteOS-M 切换汇编逐行图解(5):HalPendSV 任务切换的现场搬运(五阶段逐行)
汇编·stm32·嵌入式硬件·harmonyos
星栖与芯10 天前
LiteOS-M 切换汇编逐行图解(4):中断三件套与 HalTaskSchedule 触发
汇编·stm32·单片机·嵌入式硬件·harmonyos
xx~t11 天前
嵌入式——ARM——汇编2
linux·汇编·arm开发·嵌入式硬件·启动代码
祖力5511 天前
ARM汇编LED实验
汇编·arm·imx6ull
索端阳11 天前
ARM Day02 学习总结:ARM汇编基础核心知识点梳理
汇编·学习·arm
xx~t12 天前
嵌入式——ARM——汇编1
linux·汇编·arm开发·嵌入式硬件·arm
索端阳12 天前
初识 ARM Cortex-A7,嵌入式底层入门总结
汇编·嵌入式硬件