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

效果图

思维导图

相关推荐
矿渣渣4 小时前
RM Cortex-A7 架构中“SEV”汇编指令解析
汇编·架构
CYRUS STUDIO1 天前
Unidbg Trace 反 OLLVM 控制流平坦化(fla)
android·汇编·算法·网络安全·逆向·ollvm
淬渊阁1 天前
汇编学习之《运算和逻辑指令》
汇编·学习
长安——归故李2 天前
51单片机彩灯控制与数码管结合
汇编·单片机·嵌入式硬件·青少年编程·c#·51单片机·硬件工程
淬渊阁2 天前
汇编学习之《扩展指令指针寄存器》
汇编·学习
淬渊阁2 天前
汇编学习之《push , pop指令》
汇编·学习
leluckys3 天前
逆向-ARM64汇编二
汇编
小麦嵌入式3 天前
Linux驱动开发实战(九):Linux内核pinctrl_map详解与优势分析
linux·c语言·汇编·驱动开发·stm32·嵌入式硬件·硬件工程
淬渊阁3 天前
汇编学习之《指针寄存器&大小端学习》
汇编·学习
淬渊阁3 天前
汇编学习之《段寄存器》
汇编·学习