任务:将拓展板上的3个led灯交替闪烁
.text
.global _start
_start:
@将RCC_MP_AHB4ENSETR寄存器第[4]设置为1,使能GPIOE外设时钟
LDR R0,=0x50000a28 @指定操作的寄存器地址
LDR R1,[R0] @将寄存器数据取出来保存到R1中
ORR R1,R1,#(0x1<<4) @将第4位设置为1
STR R1,[R0] @将修改后的数值写回
@1.GPIOE_MODER[21:20]设置为01,PE10管脚为输出模式,[17:16]设置为01,PE8管脚为输出模式
LDR R0,=0x50006000 @指定操作的寄存器地址
LDR R1,[R0] @将寄存器数据取出来保存到R1中
BIC R1,R1,#(0x3<<16) @将第[17:16]位设置为0
BIC R1,R1,#(0x3<<20) @将第[21:20]位设置0
ORR R1,R1,#(0X1<<16) @将第16位设置为1
ORR R1,R1,#(0x1<<20) @将第20位设置为1
STR R1,[R0] @将修改后的数值写回
@2.GPIOE_OTYPER[10]设置为0,PE10推挽输出.[8]设置为0,PE8推挽输出
LDR R0,=0x50006004 @指定操作的寄存器地址
LDR R1,[R0] @将寄存器数据取出来保存到R1中
BIC R1,R1,#(0X1<<8) @将第[8]位设置为0
BIC R1,R1,#(0x1<<10) @将第[10]位设置0
STR R1,[R0] @将修改后的数值写回
@3.GPIOE_OSPEEDR[21:20]设置为00,PE10低速输出、[17:16]PE8低速输出
LDR R0,=0x50006008 @指定操作的寄存器地址
LDR R1,[R0] @将寄存器数据取出来保存到R1中
BIC R1,R1,#(0X3<<16) @将第[17:16]位设置0
BIC R1,R1,#(0x3<<20) @将第[21:20]位设置0
STR R1,[R0] @将修改后的数值写回
@4.GPIOE_PUPDR[21:20]设置为00,PE10输出无上拉下拉电阻,[17:16]设置为00,PE8输出无上拉下拉电阻
LDR R0,=0x5000600C @指定操作的寄存器地址
LDR R1,[R0] @将寄存器数据取出来保存到R1中
BIC R1,R1,#(0X3<<16) @将第[17:16]位设置为0
BIC R1,R1,#(0x3<<20) @将第[21:20]位设置0
STR R1,[R0] @将修改后的数值写回
@5.GPIOE_ODR[10]设置为1,PE10输出高电平;设置为0,PE10输出低电平,设置[8]为1,PE8输出高电平
LDR R0,=0x50006014 @指定操作的寄存器地址
LDR R1,[R0] @将寄存器数据取出来保存到R1中
ORR R1,R1,#(0X1<<8) @将第[8]位设置为1
ORR R1,R1,#(0x1<<10) @将第[10]位设置1
STR R1,[R0] @将修改后的数值写回
@将RCC_MP_AHB4ENSETR寄存器第[5]设置为1,使能GPIOE外设时钟
LDR R0,=0x50000a28 @指定操作的寄存器地址
LDR R1,[R0] @将寄存器数据取出来保存到R1中
ORR R1,R1,#(0x1<<5) @将第4位设置为1
STR R1,[R0] @将修改后的数值写回
@1.GPIOF_MODER[21:20]设置为01,PF10管脚为输出模式
LDR R0,=0x50007000 @指定操作的寄存器地址
LDR R1,[R0] @将寄存器数据取出来保存到R1中
BIC R1,R1,#(0x3<<20) @将第[21:20]位设置0
ORR R1,R1,#(0x1<<20) @将第20位设置为1
STR R1,[R0] @将修改后的数值写回
@2.GPIOF_OTYPER[10]设置为0,PF10推挽输出
LDR R0,=0x50007004 @指定操作的寄存器地址
LDR R1,[R0] @将寄存器数据取出来保存到R1中
BIC R1,R1,#(0x1<<10) @将第[10]位设置0
STR R1,[R0] @将修改后的数值写回
@3.GPIOF_OSPEEDR[21:20]设置为00,PF10低速输出、
LDR R0,=0x50007008 @指定操作的寄存器地址
LDR R1,[R0] @将寄存器数据取出来保存到R1中
BIC R1,R1,#(0x3<<20) @将第[21:20]位设置0
STR R1,[R0] @将修改后的数值写回
@4.GPIOF_PUPDR[21:20]设置为00,PF10输出无上拉下拉电阻
LDR R0,=0x5000700C @指定操作的寄存器地址
LDR R1,[R0] @将寄存器数据取出来保存到R1中
BIC R1,R1,#(0x3<<20) @将第[21:20]位设置0
STR R1,[R0] @将修改后的数值写回
@5.GPIOF_ODR[10]设置为1,PF10输出高电平;设置为0,PF10输出低电平
LDR R0,=0x50007014 @指定操作的寄存器地址
LDR R1,[R0] @将寄存器数据取出来保存到R1中
ORR R1,R1,#(0x1<<10) @将第[10]位设置1
STR R1,[R0] @将修改后的数值写回
loop:
BL led1_on
bl Delay
bl led1_off
bl Delay
BL led2_on
bl Delay
bl led2_off
bl Delay
BL led3_on
bl Delay
bl led3_off
bl Delay
b loop
b loop
led1_on:
@5.GPIOE_ODR[10]设置为1,PE10输出高电平
LDR R0,=0x50006014 @指定操作的寄存器地址
LDR R1,[R0] @将寄存器数据取出来保存到R1中
ORR R1,R1,#(0x1<<10) @将第[10]位设置1
STR R1,[R0] @将修改后的数值写回
mov pc,lr @程序返回
led1_off:
@5.GPIOE_ODR[10]设置为0,PE10输出低电平
LDR R0,=0x50006014 @指定操作的寄存器地址
LDR R1,[R0] @将寄存器数据取出来保存到R1中
BIC R1,R1,#(0x1<<10) @将第[10]位设置0
STR R1,[R0] @将修改后的数值写回
mov pc,lr @程序返回
led2_on:
@5.GPIOF_ODR[10]设置为1,PF10输出高电平
LDR R0,=0x50007014 @指定操作的寄存器地址
LDR R1,[R0] @将寄存器数据取出来保存到R1中
ORR R1,R1,#(0x1<<10) @将第[10]位设置1
STR R1,[R0] @将修改后的数值写回
mov pc,lr @程序返回
led2_off:
@5.GPIOF_ODR[10]设置为0,PF10输出低电平
LDR R0,=0x50007014 @指定操作的寄存器地址
LDR R1,[R0] @将寄存器数据取出来保存到R1中
BIC R1,R1,#(0x1<<10) @将第[10]位设置0
STR R1,[R0] @将修改后的数值写回
mov pc,lr @程序返回
led3_on:
@5.GPIOE_ODR[8]设置为1,PE8输出高电平
LDR R0,=0x50006014 @指定操作的寄存器地址
LDR R1,[R0] @将寄存器数据取出来保存到R1中
ORR R1,R1,#(0x1<<8) @将第[10]位设置1
STR R1,[R0] @将修改后的数值写回
mov pc,lr @程序返回
led3_off:
@5.GPIOE_ODR[8]设置为0,PE8输出低电平
LDR R0,=0x50006014 @指定操作的寄存器地址
LDR R1,[R0] @将寄存器数据取出来保存到R1中
BIC R1,R1,#(0x1<<8) @将第[10]位设置1
STR R1,[R0] @将修改后的数值写回
mov pc,lr @程序返回
@延时程序
Delay:
LDR r3,=0X10000000
MM:
CMP R3,#0
subne r3,r3,#1
bne MM
MOV PC,LR
.end