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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值