GPIO输出实验,控制LED灯
1.实验工具:FSMP1A开发板
核心板:
拓展板:
2.实验要求:编写汇编程序,实现三盏灯流水
程序代码:
.text
.global _start
_start:
@将RCC_MP_AHB4ENSET寄存器第4位设置为1,使能GPIO外设时钟 地址:0X50000A28
LDR R0,=0X50000A28
LDR R1,[R0]
ORR R1,R1,#(0X1<<4)
STR R1,[R0]
@LED1
@1.将PE10设置为输出模式 GPIOE_MODER[21:20]->01 0x50006000
LDR R0,=0X50006000
LDR R1,[R0]
BIC R1,R1,#(0X3<<20)
ORR R1,R1,#(0X1<<20)
STR R1,[R0]
@2.将PE10设置为推挽输出 GPIOE_OTYPER[10]->0 0x50006004
LDR R0,=0X50006004
LDR R1,[R0]
BIC R1,R1,#(0X1<<10)
STR R1,[R0]
@3.将PE10设置为低速输出 GPIOE_OSPEEDR[21:20]->00 0x50006008
LDR R0,=0X50006008
LDR R1,[R0]
BIC R1,R1,#(0X3<<20)
STR R1,[R0]
@4.将PE10设置为无上拉下拉GPIOE_PUPDR[21:20]->00 0x5000600c
LDR R0,=0X5000600C
LDR R1,[R0]
BIC R1,R1,#(0X3<<20)
STR R1,[R0]
@LED3
@1.将PE8设置为输出模式 GPIOE_MODER[17:16]->01 0x50006000
LDR R0,=0X50006000
LDR R1,[R0]
BIC R1,R1,#(0X3<<16)
ORR R1,R1,#(0X1<<16)
STR R1,[R0]
@2.将PE8设置为推挽输出 GPIOE_OTYPER[8]->0 0x50006004
LDR R0,=0X50006004
LDR R1,[R0]
BIC R1,R1,#(0X1<<8)
STR R1,[R0]
@3.将PE8设置为低速输出 GPIOE_OSPEEDR[17:16]->00 0x50006008
LDR R0,=0X50006008
LDR R1,[R0]
BIC R1,R1,#(0X3<<16)
STR R1,[R0]
@4.将PE8设置为无上拉下拉GPIOE_PUPDR[17:16]->00 0x5000600c
LDR R0,=0X5000600C
LDR R1,[R0]
BIC R1,R1,#(0X3<<16)
STR R1,[R0]
@LED2
@将RCC_MP_AHB4ENSET寄存器第5位设置为1,使能GPIO外设时钟 地址:0X50000A28
LDR R0,=0X50000A28
LDR R1,[R0]
ORR R1,R1,#(0X1<<5)
STR R1,[R0]
@1.将PF10设置为输出模式 GPIOE_MODER[21:20]->01 0x50007000
LDR R0,=0X50007000
LDR R1,[R0]
BIC R1,R1,#(0X3<<20)
ORR R1,R1,#(0X1<<20)
STR R1,[R0]
@2.将PF10设置为推挽输出 GPIOE_OTYPER[10]->0 0x50007004
LDR R0,=0X50007004
LDR R1,[R0]
BIC R1,R1,#(0X1<<10)
STR R1,[R0]
@3.将PF10设置为低速输出 GPIOE_OSPEEDR[21:20]->00 0x50007008
LDR R0,=0X50007008
LDR R1,[R0]
BIC R1,R1,#(0X3<<20)
STR R1,[R0]
@4.将PF10设置为无上拉下拉GPIOE_PUPDR[21:20]->00 0x5000700c
LDR R0,=0X5000700C
LDR R1,[R0]
BIC R1,R1,#(0X3<<20)
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
@将PE10输出高电平 GPIOE_ODR[10]->1 0x50006014
@LED1开
LED1_ON:
LDR R0,=0X50006014
LDR R1,[R0]
ORR R1,R1,#(0X1<<10)
STR R1,[R0]
MOV PC,LR
@LED1关
LED1_OFF:
LDR R0,=0X50006014
LDR R1,[R0]
BIC R1,R1,#(0X1<<10)
STR R1,[R0]
MOV PC,LR
@LED2开
LED2_ON:
LDR R0,=0X50007014
LDR R1,[R0]
ORR R1,R1,#(0X1<<10)
STR R1,[R0]
MOV PC,LR
@LED2关
LED2_OFF:
LDR R0,=0X50007014
LDR R1,[R0]
BIC R1,R1,#(0X1<<10)
STR R1,[R0]
MOV PC,LR
@LED3开
LED3_ON:
LDR R0,=0X50006014
LDR R1,[R0]
ORR R1,R1,#(0X1<<8)
STR R1,[R0]
MOV PC,LR
@LED3关
LED3_OFF:
LDR R0,=0X50006014
LDR R1,[R0]
BIC R1,R1,#(0X1<<8)
STR R1,[R0]
MOV PC,LR
@延时标签
DELAY:
MOV R3,#0X10000000
MM:
CMP R3,#0
SUBNE R3,R3,#1
BNE MM
MOV PC,LR
.end