ARM 作业1

流水灯



.text 
.global _start
_start: 

@设置GPIOE的外设时钟  RCC_MPAHB4ENSETR的第[4]位设置为1即可
LDR R0,=0x50000A28      @指定寄存器地址
LDR R1,[R0]             @将寄存器原来的数值读取出来,保存到R1中
ORR R1,R1,#(0x1<<4)     @将第4位设置为1
STR R1,[R0]             @将修改后的数值写回

@设置GPIOF的外设时钟  RCC_MPAHB4ENSETR的第[5]位设置为1即可
LDR R0,=0x50000A28      @指定寄存器地址
LDR R1,[R0]             @将寄存器原来的数值读取出来,保存到R1中
ORR R1,R1,#(0x1<<5)     @将第5位设置为1
STR R1,[R0]             @将修改后的数值写回

@设置PE10为输出  将GPIOE_MODER[21:20]设置为01,就能让PE10为输出工作模式
LDR R0,=0x50006000      @指定寄存器地址
LDR R1,[R0]             @将寄存器原来的数值读取出来,保存到R1中
BIC R1,R1,#(0x3<<20)    @将第21:20位清零
ORR R1,R1,#(0x1<<20)    @将第21:20位设置为01
STR R1,[R0]             @将修改后的数值写回

@设置PF10为输出  将GPIOE_MODER[21:20]设置为01,就能让PE10为输出工作模式
LDR R0,=0x50007000      @指定寄存器地址
LDR R1,[R0]             @将寄存器原来的数值读取出来,保存到R1中
BIC R1,R1,#(0x3<<20)    @将第21:20位清零
ORR R1,R1,#(0x1<<20)    @将第21:20位设置为01
STR R1,[R0]             @将修改后的数值写回

@设置PE8为输出  将GPIOE_MODER[17:16]设置为01,就能让PE8为输出工作模式
LDR R0,=0x50006000      @指定寄存器地址
LDR R1,[R0]             @将寄存器原来的数值读取出来,保存到R1中
BIC R1,R1,#(0x3<<16)    @将第[17:16]位清零
ORR R1,R1,#(0x1<<16)    @将第[17:16]位设置为01
STR R1,[R0]             @将修改后的数值写回

@设置PE10为推挽输出  将GPIOE_OTYPER寄存器[10]设置为0,就能让PE10为推挽输出工作模式
LDR R0,=0x50006004      @指定寄存器地址
LDR R1,[R0]             @将寄存器原来的数值读取出来,保存到R1中
BIC R1,R1,#(0x1<<10)    @将第10位清零
STR R1,[R0]             @将修改后的数值写回

@设置PF10为推挽输出  将GPIOE_OTYPER寄存器[10]设置为0,就能让PE10为推挽输出工作模式
LDR R0,=0x50007004      @指定寄存器地址
LDR R1,[R0]             @将寄存器原来的数值读取出来,保存到R1中
BIC R1,R1,#(0x1<<10)    @将第10位清零
STR R1,[R0]             @将修改后的数值写回

@设置PE8为推挽输出  将GPIOE_OTYPER寄存器[8]设置为0,就能让PE8为推挽输出工作模式
LDR R0,=0x50006004      @指定寄存器地址
LDR R1,[R0]             @将寄存器原来的数值读取出来,保存到R1中
BIC R1,R1,#(0x1<<8)     @将第8位清零
STR R1,[R0]             @将修改后的数值写回

@设置PE10为低速输出  将GPIOE_OSPEEDR寄存器[21:20]设置为00,就能让PE10为低速输出工作模式
LDR R0,=0x50006008      @指定寄存器地址
LDR R1,[R0]             @将寄存器原来的数值读取出来,保存到R1中
BIC R1,R1,#(0x3<<20)    @将第[21:20]位清零
STR R1,[R0]             @将修改后的数值写回

@设置PF10为低速输出  将GPIOE_OSPEEDR寄存器[21:20]设置为00,就能让PE10为低速输出工作模式
LDR R0,=0x50007008      @指定寄存器地址
LDR R1,[R0]             @将寄存器原来的数值读取出来,保存到R1中
BIC R1,R1,#(0x3<<20)    @将第[21:20]位清零
STR R1,[R0]             @将修改后的数值写回

@设置PE8为低速输出  将GPIOE_OSPEEDR寄存器[17:16]设置为00,就能让PE8为低速输出工作模式
LDR R0,=0x50006008      @指定寄存器地址
LDR R1,[R0]             @将寄存器原来的数值读取出来,保存到R1中
BIC R1,R1,#(0x3<<16)    @将第[17:16]位清零
STR R1,[R0]             @将修改后的数值写回

@设置无上拉下拉电阻  将GPIOE_PUPDR寄存器[21:20]设置为00,就能让PE10无上拉下拉电阻
LDR R0,=0x5000600c      @指定寄存器地址
LDR R1,[R0]             @将寄存器原来的数值读取出来,保存到R1中
BIC R1,R1,#(0x3<<20)    @将第10位清零
STR R1,[R0]             @将修改后的数值写回

@设置无上拉下拉电阻  将GPIOE_PUPDR寄存器[21:20]设置为00,就能让PE10无上拉下拉电阻
LDR R0,=0x5000700c      @指定寄存器地址
LDR R1,[R0]             @将寄存器原来的数值读取出来,保存到R1中
BIC R1,R1,#(0x3<<20)    @将第10位清零
STR R1,[R0]             @将修改后的数值写回

@设置无上拉下拉电阻  将GPIOE_PUPDR寄存器[17:16]设置为00,就能让PE8无上拉下拉电阻
LDR R0,=0x5000600c      @指定寄存器地址
LDR R1,[R0]             @将寄存器原来的数值读取出来,保存到R1中
BIC R1,R1,#(0x3<<16)    @将第[17:16]位清零
STR R1,[R0]             @将修改后的数值写回


loop:
bl led1_on
bl delay
bl led1_off
bl led2_on
bl delay
bl led2_off
bl led3_on
bl delay
bl led3_off

   
b loop

delay:
@延时函数
LDR R3,=0x10000000

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

led1_on:
@点亮灯  将GPIOE_ODR寄存器[10]设置为1,就能点亮灯
LDR R0,=0x50006014      @指定寄存器地址
LDR R1,[R0]             @将寄存器原来的数值读取出来,保存到R1中
ORR R1,R1,#(0x1<<10)    @将第10位设置为1
STR R1,[R0]             @将修改后的数值写回
mov pc,lr

led1_off:
@关闭灯  将GPIOE_ODR寄存器[10]设置为0,就能点亮灯
LDR R0,=0x50006014      @指定寄存器地址
LDR R1,[R0]             @将寄存器原来的数值读取出来,保存到R1中
BIC R1,R1,#(0x1<<10)    @将第10位设置为0
STR R1,[R0]             @将修改后的数值写回 
mov pc,lr

led2_on:
@点亮灯  将GPIOE_ODR寄存器[10]设置为1,就能点亮灯
LDR R0,=0x50007014      @指定寄存器地址
LDR R1,[R0]             @将寄存器原来的数值读取出来,保存到R1中
ORR R1,R1,#(0x1<<10)    @将第10位设置为1
STR R1,[R0]             @将修改后的数值写回
mov pc,lr

led2_off:
@关闭灯  将GPIOE_ODR寄存器[10]设置为0,就能点亮灯
LDR R0,=0x50007014      @指定寄存器地址
LDR R1,[R0]             @将寄存器原来的数值读取出来,保存到R1中
BIC R1,R1,#(0x1<<10)    @将第10位设置为0
STR R1,[R0]             @将修改后的数值写回 
mov pc,lr

led3_on:
@点亮灯  将GPIOE_ODR寄存器[8]设置为1,就能点亮灯
LDR R0,=0x50006014      @指定寄存器地址
LDR R1,[R0]             @将寄存器原来的数值读取出来,保存到R1中
ORR R1,R1,#(0x1<<8)    @将第8位设置为1
STR R1,[R0]             @将修改后的数值写回
mov pc,lr

led3_off:
@关闭灯  将GPIOE_ODR寄存器[8]设置为0,就能点亮灯
LDR R0,=0x50006014      @指定寄存器地址
LDR R1,[R0]             @将寄存器原来的数值读取出来,保存到R1中
BIC R1,R1,#(0x1<<8)    @将第8位设置为0
STR R1,[R0]             @将修改后的数值写回
mov pc,lr

.end

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值