一、编写汇编程序,实现控制外设三个LED灯闪烁
代码:
.text
.global _start
_start: @要使三个灯闪烁 需要设置三个灯的管脚输出高电平@对应到STM32MP157AAA的PE10、PF10、PE8@使能GPIOE、GPIOF的外设时钟 它们对应的总线均为AHB4@GPIOE在[4]位 GPIOF在[5]位LDR r0,=0x50000A28 @保存RCC寄存器基地址LDR r1,[R0] @将寄存器数据读取出来保存到r1ORR R1,R1,#(0x1<<4) @[5,4]设置为1ORR R1,R1,#(0x1<<5) @[5,4]设置为1str r1,[r0] @将修改后的值写回原寄存器@设置PE10 PE8为输出模式 ldr r0,=0x50006000 @指定PGIOE_MODER基地址ldr r1,[r0]bic r1,r1,#(0x3<<20) @先置零 后设置1BIC R1,R1,#(0x3<<16) @先置零 后设置1orr r1,r1,#(0x1<<20) @GPIOE_MODEER第[21,20]位要设置为01ORR R1,R1,#(0X1<<16)str r1,[r0] @管脚设置为输出模式@设置PF10为输出ldr r0,=0x50007000 @指定PGIOF_MODER基地址ldr r1,[r0]bic r1,r1,#(0x3<<20) @先置零 后设置1orr r1,r1,#(0x1<<20) @GPIOF_MODEER第[21,20]位要设置为01str r1,[r0] @管脚为输出模式 @设置PE10 PE8为推挽输出ldr r0,=0x50006004 @指定基地址ldr r1,[r0]bic r1,r1,#(0x1<<10) @[10]设置0bic r1,r1,#(0x1<<8) @[8]设置0str r1,[r0]@设置PF10为推挽输出ldr r0,=0x50007004 @指定基地址ldr r1,[r0]bic r1,r1,#(0x1<<10) @[10]设置0str r1,[r0]@设置PE10 PE8低速输出ldr r0,=0x50006008 @指定基地址ldr r1,[r0]bic r1,r1,#(0x3<<20) @[21:20]设置0bic r1,r1,#(0x3<<16) @[17:16]设置0str r1,[r0]@设置PF10低速输出ldr r0,=0x50007008 @指定基地址ldr r1,[r0]bic r1,r1,#(0x3<<20) @[21:20]设置0str r1,[r0] @设置PE10 PE8无上拉下拉电阻ldr r0,=0x5000600c @指定基地址ldr r1,[r0]bic r1,r1,#(0x3<<20) @[21:20]设置0bic r1,r1,#(0x3<<16) @[17:16]设置0 str r1,[r0]@设置PF10无上拉下拉电阻ldr r0,=0x5000700C @指定基地址ldr r1,[r0]bic r1,r1,#(0x3<<20) @[21:20]设置0str r1,[r0] LOOP: @不让程序结束BL LED1_ONBL DELAYbl LED1_OFFbl DELAYB LOOPLED1_ON:@点灯PE10 PE8ldr r0,=0x50006014 ldr r1,[r0]orr r1,r1,#(0x1<<10)ORR R1,R1,#(0X1<<8)str r1,[r0]@点灯PF10LDR R0,=0X50007014LDR R1,[R0]ORR R1,R1,#(0X1<<10)str r1,[r0]mov pc,lrLED1_OFF:@灭灯LDR R0,=0X50006014ldr r1,[r0]BIC r1,r1,#(0x1<<10)BIC R1,R1,#(0X1<<8)str r1,[r0]LDR R0,=0X50007014LDR R1,[R0]BIC R1,R1,#(0X1<<10)STR R1,[R0]mov pc,lrDELAY: @延时函数LDR R3,=0X10000000
MM:CMP R3,#0SUBNE R3,R3,#1Bne MMMOV PC,LR.end