嵌入式学习-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_OFF
BL LED1_ON
BL DELAY
BL LED1_OFF
BL LED2_ON
BL DELAY
BL LED2_OFF
BL LED3_ON
BL DELAY
b loop
LED1_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, LR
LED2_ON:
LDR R0, = 0X50007014 @指定寄存器地址
LDR R1, [ R0] @将寄存器原来的数值读取出来,保存到R1中
ORR R1, R1, #( 0x1 << 10 ) @将第10 设置为1
STR R1, [ R0] @将修改后的数值写回
MOV PC, LR
LED2_OFF:
LDR R0, = 0X50007014 @指定寄存器地址
LDR R1, [ R0] @将寄存器原来的数值读取出来,保存到R1中
BIC R1, R1, #( 0x1 << 10 ) @将第10 设置为0
STR R1, [ R0] @将修改后的数值写回
MOV PC, LR
LED3_ON:
LDR R0, = 0X50006014 @指定寄存器地址
LDR R1, [ R0] @将寄存器原来的数值读取出来,保存到R1中
ORR R1, R1, #( 0x1 << 8 ) @将第10 设置为1
STR R1, [ R0] @将修改后的数值写回
MOV PC, LR
LED3_OFF:
LDR R0, = 0X50006014 @指定寄存器地址
LDR R1, [ R0] @将寄存器原来的数值读取出来,保存到R1中
BIC R1, R1, #( 0x1 << 8 ) @将第10 设置为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