嵌入式学习-ARM-Day4
实现三个LED灯亮灭
. text
. global _start
_start: @使能GPIOE的外设时钟 RCC_MP_AHB4ENSETR的第[ 4 ] 设置为1 即可使能GPIOE时钟
@LED1
LDR R0, = 0X50000A28 @指定寄存器地址
LDR R1, [ R0] @将寄存器原来的数值读取出来,保存到R1中
ORR R1, R1, #( 0x3 << 4 ) @将第4 位设置为1
STR R1, [ R0] @将修改后的数值写回@设置PE10为输出 将GPIOE_MODER[ 21 : 20 ] 设置为01 ,就能够让PE10为输出工作模式
@LED1
LDR R0, = 0X50006000 @指定寄存器地址
LDR R1, [ R0] @将寄存器原来的数值读取出来,保存到R1中
BIC R1, R1, #( 0x3 << 20 ) @将第21 : 20 清0
ORR R1, R1, #( 0x1 << 20 ) @将第21 : 20 设置为01
STR R1, [ R0] @将修改后的数值写回
@LED2
LDR R2, = 0X50007000
LDR R3, [ R2]
BIC R3, R3, #( 0X3 << 20 )
ORR R3, R3, #( 0X1 << 20 )
STR R3, [ R2]
@LED3
LDR R4, = 0X50006000 @指定寄存器地址
LDR R5, [ R4] @将寄存器原来的数值读取出来,保存到R1中
BIC R5, R5, #( 0x3 << 16 ) @将第16 - 17 清0
ORR R5, R5, #( 0x1 << 16 ) @将第16 - 17 设置为01
STR R5, [ R4] @将修改后的数值写回@设置PE10为推完输出 将GPIOE_OTYPER寄存器[ 10 ] 设置为0 ,就能够让PE10以推挽输出模式进行工作
@LED1
LDR R0, = 0X50006004 @指定寄存器地址
LDR R1, [ R0] @将寄存器原来的数值读取出来,保存到R1中
BIC R1, R1, #( 0x1 << 10 ) @将第10 清0
STR R1, [ R0] @将修改后的数值写回
@LED2
LDR R2, = 0X50007004 @指定寄存器地址
LDR R3, [ R2] @将寄存器原来的数值读取出来,保存到R1中
BIC R3, R3, #( 0x1 << 10 ) @将第10 清0
STR R3, [ R2] @将修改后的数值写回
@LED3
LDR R4, = 0X50006004 @指定寄存器地址
LDR R5, [ R4] @将寄存器原来的数值读取出来,保存到R1中
BIC R5, R5, #( 0x1 << 2 ) @将第10 清0
STR R5, [ R4] @将修改后的数值写回@设置PE10为低速输出
@LED1
LDR R0, = 0X50006008 @指定寄存器地址
LDR R1, [ R0] @将寄存器原来的数值读取出来,保存到R1中
BIC R1, R1, #( 0x3 << 20 ) @将第21 : 20 清0
STR R1, [ R0] @将修改后的数值写回
@LED2
LDR R2, = 0X50007008 @指定寄存器地址
LDR R3, [ R2] @将寄存器原来的数值读取出来,保存到R1中
BIC R3, R3, #( 0x3 << 20 ) @将第21 : 20 清0
STR R3, [ R2] @将修改后的数值写回
@LED3
LDR R4, = 0X50006008 @指定寄存器地址
LDR R5, [ R4] @将寄存器原来的数值读取出来,保存到R1中
BIC R5, R5, #( 0x3 << 16 ) @将第21 : 20 清0
STR R5, [ R4] @将修改后的数值写回@设置无上拉下拉电阻
@LED1
LDR R0, = 0X5000600C @指定寄存器地址
LDR R1, [ R0] @将寄存器原来的数值读取出来,保存到R1中
BIC R1, R1, #( 0x3 << 20 ) @将第21 : 20 清0
STR R1, [ R0] @将修改后的数值写回
@LED2
LDR R2, = 0X5000700C @指定寄存器地址
LDR R3, [ R2] @将寄存器原来的数值读取出来,保存到R1中
BIC R3, R3, #( 0x3 << 20 ) @将第21 : 20 清0
STR R3, [ R2] @将修改后的数值写回
@LED3
LDR R4, = 0X5000600C @指定寄存器地址
LDR R5, [ R4] @将寄存器原来的数值读取出来,保存到R1中
BIC R5, R5, #( 0x3 << 20 ) @将第21 : 20 清0
STR R5, [ R4] @将修改后的数值写回loop: BL LED3_OFFBL LED1_ONBL DELAYBL LED1_OFFBL LED2_ONBL DELAYBL LED2_OFFBL LED3_ONBL DELAYb loopLED1_ON: LDR R0, = 0X50006014 @指定寄存器地址LDR R1, [ R0] @将寄存器原来的数值读取出来,保存到R1中ORR R1, R1, #( 0x1 << 10 ) @将第10 设置为1 STR R1, [ R0] @将修改后的数值写回 MOV PC, LR
LED1_OFF: LDR R0, = 0X50006014 @指定寄存器地址LDR R1, [ R0] @将寄存器原来的数值读取出来,保存到R1中BIC R1, R1, #( 0x1 << 10 ) @将第10 设置为0 STR R1, [ R0] @将修改后的数值写回MOV PC, LRLED2_ON: LDR R0, = 0X50007014 @指定寄存器地址LDR R1, [ R0] @将寄存器原来的数值读取出来,保存到R1中ORR R1, R1, #( 0x1 << 10 ) @将第10 设置为1 STR R1, [ R0] @将修改后的数值写回 MOV PC, LRLED2_OFF: LDR R0, = 0X50007014 @指定寄存器地址LDR R1, [ R0] @将寄存器原来的数值读取出来,保存到R1中BIC R1, R1, #( 0x1 << 10 ) @将第10 设置为0 STR R1, [ R0] @将修改后的数值写回MOV PC, LRLED3_ON: LDR R0, = 0X50006014 @指定寄存器地址LDR R1, [ R0] @将寄存器原来的数值读取出来,保存到R1中ORR R1, R1, #( 0x1 << 8 ) @将第10 设置为1 STR R1, [ R0] @将修改后的数值写回 MOV PC, LRLED3_OFF: LDR R0, = 0X50006014 @指定寄存器地址LDR R1, [ R0] @将寄存器原来的数值读取出来,保存到R1中BIC R1, R1, #( 0x1 << 8 ) @将第10 设置为0 STR R1, [ R0] @将修改后的数值写回MOV PC, LRDELAY: LDR R3, = 0x10000000
MM: CMP R3, #0 SUBNE R3, R3, #1 BNE MMMOV PC, LR. end