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
原文地址:https://blog.csdn.net/FS223107/article/details/137650320
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!