ARM:2024/4/11

实现三个灯的闪烁

代码: 



.text 
.global _start
_start: 
    
    @使能GPIOE的外设时钟   RCC_MP_AHB4ENSETR 0x50000a28   [4]->1
    LDR R0,=0X50000A28  @指定基地址
    LDR R1,[R0]  @将寄存器数据读取出来保存到R1中
    ORR R1,R1,#(0x1<<4)   @[4]设置为1
    STR R1,[R0]  @将修改之后的值写回去

    @使能GPIOF的外设时钟   RCC_MP_AHB4ENSETR 0x50000a28   [5]->1
    LDR R0,=0X50000A28  @指定基地址
    LDR R1,[R0]  @将寄存器数据读取出来保存到R1中
    ORR R1,R1,#(0x1<<5)   @[5]设置为1
    STR R1,[R0]  @将修改之后的值写回去


@LED1

    @设置PE10为输出   GPIOE_MODER [21:20]->01   0X50006000
    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]  @将修改之后的值写回去

    @设置PE10为推挽输出  GPIOE_OTYPER[10]->0   0X50006004
    LDR R0,=0X50006004  @指定基地址
    LDR R1,[R0]  @将寄存器数据读取出来保存到R1中
    BIC R1,R1,#(0x1<<10)   @[10]设置为0
    STR R1,[R0]  @将修改之后的值写回去

    @设置PE10低速输出  GPIOE_OSPEEDR[21:20]->00  0X50006008
    LDR R0,=0X50006008  @指定基地址
    LDR R1,[R0]  @将寄存器数据读取出来保存到R1中
    BIC R1,R1,#(0x3<<20)   @[21:20]设置为0
    STR R1,[R0]  @将修改之后的值写回去

    @设置PE10无上拉下拉电阻 GPIOx_PUPDR
    LDR R0,=0X5000600C  @指定基地址
    LDR R1,[R0]  @将寄存器数据读取出来保存到R1中
    BIC R1,R1,#(0x3<<20)   @[21:20]设置为0
    STR R1,[R0]  @将修改之后的值写回去




@LED2

    @设置PF10为输出   GPIOE_MODER [21:20]->01   0X50007000
    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]  @将修改之后的值写回去

    @设置PF10为推挽输出  GPIOE_OTYPER[10]->0   0X50007004
    LDR R0,=0X50007004  @指定基地址
    LDR R1,[R0]  @将寄存器数据读取出来保存到R1中
    BIC R1,R1,#(0x1<<10)   @[10]设置为0
    STR R1,[R0]  @将修改之后的值写回去

    @设置PF10低速输出  GPIOE_OSPEEDR[21:20]->00  0X50007008
    LDR R0,=0X50007008  @指定基地址
    LDR R1,[R0]  @将寄存器数据读取出来保存到R1中
    BIC R1,R1,#(0x3<<20)   @[21:20]设置为0
    STR R1,[R0]  @将修改之后的值写回去

    @设置PF10无上拉下拉电阻 GPIOx_PUPDR
    LDR R0,=0X5000700C  @指定基地址
    LDR R1,[R0]  @将寄存器数据读取出来保存到R1中
    BIC R1,R1,#(0x3<<20)   @[21:20]设置为0
    STR R1,[R0]  @将修改之后的值写回去



@LED3

    @设置PE8为输出   GPIOE_MODER [17:16]->01   0X50006000
    LDR R0,=0X50006000  @指定基地址
    LDR R1,[R0]  @将寄存器数据读取出来保存到R1中
    BIC R1,R1,#(0x3<<16)   @[17:16]设置为00
    ORR R1,R1,#(0x1<<16)   @[17:16]设置为01
    STR R1,[R0]  @将修改之后的值写回去

    @设置PE8为推挽输出  GPIOE_OTYPER[10]->0   0X50006004
    LDR R0,=0X50006004  @指定基地址
    LDR R1,[R0]  @将寄存器数据读取出来保存到R1中
    BIC R1,R1,#(0x1<<8)   @[8]设置为0
    STR R1,[R0]  @将修改之后的值写回去

    @设置PE8低速输出  GPIOE_OSPEEDR[17:16]->00  0X50006008
    LDR R0,=0X50006008  @指定基地址
    LDR R1,[R0]  @将寄存器数据读取出来保存到R1中
    BIC R1,R1,#(0x3<<16)   @[17:16]设置为0
    STR R1,[R0]  @将修改之后的值写回去

    @设置PE8无上拉下拉电阻 GPIOx_PUPDR
    LDR R0,=0X5000600C  @指定基地址
    LDR R1,[R0]  @将寄存器数据读取出来保存到R1中
    BIC R1,R1,#(0x3<<16)   @[17:16]设置为0
    STR R1,[R0]  @将修改之后的值写回去




LOOP:  @不让程序结束

@LED1
    bl LED_ON
    bl DELAY
    bl LED_OFF
    bl DELAY
    B LOOP


@亮灯
LED_ON:
@LED1
    LDR R0,=0X50006014  @指定基地址
    LDR R1,[R0]  @将寄存器数据读取出来保存到R1中
    ORR R1,R1,#(0x1<<10)   @[10]设置为1
    STR R1,[R0]  @将修改之后的值写回去
@LED2
    LDR R0,=0X50007014  @指定基地址
    LDR R1,[R0]  @将寄存器数据读取出来保存到R1中
    ORR R1,R1,#(0x1<<10)   @[10]设置为1
    STR R1,[R0]  @将修改之后的值写回去
@LED3
    LDR R0,=0X50006014  @指定基地址
    LDR R1,[R0]  @将寄存器数据读取出来保存到R1中
    ORR R1,R1,#(0x1<<8)   @[8]设置为1
    STR R1,[R0]  @将修改之后的值写回去

    MOV PC,LR  @程序返回

@灭灯
LED_OFF:
@LED1
    LDR R0,=0X50006014  @指定基地址
    LDR R1,[R0]  @将寄存器数据读取出来保存到R1中
    BIC R1,R1,#(0x1<<10)   @[10]设置为0
    STR R1,[R0]  @将修改之后的值写回去
@LED2
   LDR R0,=0X50007014  @指定基地址
    LDR R1,[R0]  @将寄存器数据读取出来保存到R1中
    BIC R1,R1,#(0x1<<10)   @[10]设置为0
    STR R1,[R0]  @将修改之后的值写回去
@LED3
    LDR R0,=0X50006014  @指定基地址
    LDR R1,[R0]  @将寄存器数据读取出来保存到R1中
    BIC R1,R1,#(0x1<<8)   @[8]设置为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

相关推荐

  1. <span style='color:red;'>ARM</span>开发

    ARM开发

    2024-04-12 11:20:02      65 阅读
  2. <span style='color:red;'>ARM</span>作业

    ARM作业

    2024-04-12 11:20:02      45 阅读
  3. ARM_01

    2024-04-12 11:20:02       41 阅读
  4. ARM学习

    2024-04-12 11:20:02       31 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-12 11:20:02       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-12 11:20:02       100 阅读
  3. 在Django里面运行非项目文件

    2024-04-12 11:20:02       82 阅读
  4. Python语言-面向对象

    2024-04-12 11:20:02       91 阅读

热门阅读

  1. 联合概率、条件概率、边缘概率、贝叶斯定理

    2024-04-12 11:20:02       40 阅读
  2. 网络协议之 STP生成树协议学习心得

    2024-04-12 11:20:02       34 阅读
  3. arhtas idea plugin 使用手册

    2024-04-12 11:20:02       146 阅读
  4. 总结ES~~~

    2024-04-12 11:20:02       136 阅读
  5. ChatGPT 写手技巧大揭秘:打造高质量论文新策略

    2024-04-12 11:20:02       43 阅读
  6. 【架构-10】DDOS(分布式拒绝服务攻击)

    2024-04-12 11:20:02       39 阅读
  7. node.js 常用命令

    2024-04-12 11:20:02       34 阅读
  8. 这特效确定不学学

    2024-04-12 11:20:02       139 阅读