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

效果图

思维导图

相关推荐
small_wh1te_coder2 天前
GCC深度剖析:从编译原理到嵌入式底层实战
汇编·c++·面试·嵌入式·状态模式·c
白书宇2 天前
5.从零开始写LINUX内核--从实模式到保护模式的过渡实现
linux·汇编·数据库·开源
浩浩测试一下3 天前
02高级语言逻辑结构到汇编语言之逻辑结构转换 if (...) {...} else {...} 结构
汇编·数据结构·数据库·redis·安全·网络安全·缓存
蚰蜒螟4 天前
JVM安全点轮询汇编函数解析
汇编·jvm·安全
要记得喝水8 天前
汇编中常用寄存器介绍
开发语言·汇编·windows·c#·.net
技术领导力10 天前
华为开源CANN,再次释放“昇腾转向”信号
汇编
DONG91314 天前
Python 中的可迭代、迭代器与生成器——从协议到实现再到最佳实践
开发语言·汇编·数据结构·python·算法·青少年编程·排序算法
embrace9917 天前
【C语言学习】scanf函数
c语言·开发语言·汇编·学习·青少年编程·c#·编辑器
麦兜*17 天前
【算法】十大排序算法超深度解析,从数学原理到汇编级优化,涵盖 15个核心维度
java·汇编·jvm·算法·spring cloud·ai·排序算法
会掉头发17 天前
x86_64汇编
汇编