本文主要是介绍STM32MP157汇编流水灯,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
.text
.global _start
_start: /* 使能GPIOE、GPIOF寄存器 RCC_MP_AHB4ENSETR * 基地址: 0x50000000 + 偏移地址: 0xA28 = 0x50000A28* RCC_MP_AHB4ENSETR[4]->1 RCC_MP_AHB4ENSETR[5]->1*/ LDR R0,=0x50000A28LDR R1,[R0]ORR R1,R1,#(0x1<<4)STR R1,[R0]LDR R0,=0x50000A28LDR R1,[R0]ORR R1,R1,#(0x1<<5)STR R1,[R0]/* 设置PE10,PE8,PF10引脚为输出模式* GPIOF基地址: 0x50007000 + 偏移地址: 0x00 = 0x50007000* GPIOE基地址: 0x50006000 + 偏移地址: 0x00 = 0x50006000* PE10: GPIOE_MODER[21:20]->01* PF10: GPIOF_MODER[21:20]->01* PE8: GPIOE_MODER[17:16]->01*/LDR R0, =0x50007000LDR R1,[R0]BIC R1,R1,#(0x3<<20)ORR R1,R1,#(0x1<<20)STR R1,[R0]LDR R0, =0x50006000LDR R1,[R0]BIC R1,R1,#(0x3<<20)ORR R1,R1,#(0x1<<20)STR R1,[R0]LDR R0, =0x50006000LDR R1,[R0]BIC R1,R1,#(0x3<<16)ORR R1,R1,#(0x1<<16)STR R1,[R0]/* 设置PE10,PE8,PF10引脚为推挽输出* GPIOF基地址: 0x50007000 + 偏移地址: 0x04 = 0x50007004* GPIOE基地址: 0x50006000 + 偏移地址: 0x04 = 0x50006004* GPIOE_OTYPER[10]->0* GPIOF_OTYPER[10]->0* GPIOE_OTYPER[8]->0*/LDR R0,=0x50007004LDR R1,[R0]BIC R1,R1,#(0x1<<10)STR R1,[R0]LDR R0,=0x50006004LDR R1,[R0]BIC R1,R1,#(0x1<<10)STR R1,[R0]LDR R0,=0x50006004LDR R1,[R0]BIC R1,R1,#(0x1<<8)STR R1,[R0]/* 设置PE10,PE8,PF10引脚为低速输出* GPIOF基地址: 0x50007000 + 偏移地址: 0x08 = 0x50007008* GPIOE基地址: 0x50006000 + 偏移地址: 0x08 = 0x50006008* GPIOE_OSPEEDR[21:20]->00* GPIOF_OSPEEDR[21:20]->00* GPIOE_OSPEEDR[17:16]->00*/LDR R0,=0x50007008LDR R1,[R0]BIC R1,R1,#(0x3<<20)STR R1,[R0]LDR R0,=0x50006008LDR R1,[R0]BIC R1,R1,#(0x3<<20)STR R1,[R0]LDR R0,=0x50006008LDR R1,[R0]BIC R1,R1,#(0x3<<16)STR R1,[R0]/* 设置PE10,PE8,PF10引脚没有上下拉电阻* GPIOF基地址: 0x50007000 + 偏移地址: 0x0C = 0x5000700C* GPIOE基地址: 0x50006000 + 偏移地址: 0x0C = 0x5000600C* GPIOE_PUPDR[21:20]->00* GPIOF_PUPDR[21:20]->00* GPIOE_PUPDR[17:16]->00*/LDR R0,=0x5000700CLDR R1,[R0]BIC R1,R1,#(0x3<<20)STR R1,[R0] LDR R0,=0x5000600CLDR R1,[R0]BIC R1,R1,#(0x3<<20)STR R1,[R0]LDR R0,=0x5000600CLDR R1,[R0]BIC R1,R1,#(0x3<<16)STR R1,[R0]/* 设置PE10,PE8,PF10实现流水灯* GPIOF基地址: 0x50007000 + 偏移地址: 0x14 = 0x50007014* GPIOE基地址: 0x50006000 + 偏移地址: 0x14 = 0x50006014* GPIOE_ODR[10]->1* GPIOF_ODR[10]->1* GPIOE_ODR[8]->1*/
loop:LDR R0,=0X50006014LDR R1,[R0]ORR R1,R1,#(0x1<<10)STR R1,[R0]BL delayLDR R0,=0X50006014LDR R1,[R0]BIC R1,R1,#(0x1<<10)STR R1,[R0]BL delayLDR R0,=0X50007014LDR R1,[R0]ORR R1,R1,#(0x1<<10)STR R1,[R0]BL delayLDR R0,=0X50007014LDR R1,[R0]BIC R1,R1,#(0x1<<10)STR R1,[R0]BL delayLDR R0,=0X50006014LDR R1,[R0]ORR R1,R1,#(0x1<<8)STR R1,[R0]BL delayLDR R0,=0X50006014LDR R1,[R0]BIC R1,R1,#(0x1<<8)STR R1,[R0]BL delayb loop/* 延时函数 */delay:LDR R4,=0X1000000
mm:CMP R4,#0SUBNE R4,R4,#1BNE mmMOV PC,LR.end
这篇关于STM32MP157汇编流水灯的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!