一、自己編寫代碼實(shí)現(xiàn)三盞燈點(diǎn)亮
?源碼:
.text
.global _start
_start: @進(jìn)行一次初始化
bl RCC_INIT
bl LED1_INIT
bl LED2_INIT
bl LED3_INIT
b loop
loop: @循環(huán)開關(guān)燈
bl LED1_ON
bl delay_1s
bl LED1_OFF
bl delay_1s
bl LED2_ON
bl delay_1s
bl LED2_OFF
bl delay_1s
bl LED3_ON
bl delay_1s
bl LED3_OFF
bl delay_1s
bl LED1_ON
bl LED2_ON
bl LED3_ON
bl delay_1s
bl LED1_OFF
bl LED2_OFF
bl LED3_OFF
bl delay_1s
b loop
RCC_INIT:
@使能對(duì)應(yīng)控制器,通過RCC_MP_AHB4ENSETR寄存器進(jìn)行設(shè)置
@引腳為E第[4]位 置1,引腳為F寄存器第[5]位 置1
ldr r0,=0x50000A28
ldr r1,[r0]
orr r1,r1,#(0x3<<4) @將P引腳與F引腳的寄存器一起使能
str r1,[r0]
mov pc,lr
@LED1的所有初始化工作
LED1_INIT:
@1.通過GPIOx_MODER寄存器將PE10引腳設(shè)置為輸出模式,并將[21:20]位 置01
ldr r0,=0x50006000
ldr r1,[r0]
bic r1,r1,#(0x3<<20)
orr r1,r1,#(0x1<<20)
str r1,[r0]
@2.通過GPIOx_OTYPER寄存器將PE10引腳設(shè)置為推挽輸出模式,并將第[10]位 置0
ldr r0,=0x50006004
ldr r1,[r0]
bic r1,r1,#(0x1<<10)
str r1,[r0]
@3.通過GPIOx_OSPEEDR寄存器將PE10引腳設(shè)置為低速輸出模式,并將第[21:20]位 置00
ldr r0,=0x50006008
ldr r1,[r0]
bic r1,r1,#(0x3<<20)
str r1,[r0]
@4.通過GPIOx_PUPDR寄存器將PE10引腳設(shè)置為禁止上下拉電阻模式,并將第[21:20]位 置00
ldr r0,=0x5000600C
ldr r1,[r0]
bic r1,r1,#(0x3<<20)
str r1,[r0]
mov pc,lr
@LED2的所有初始化工作
LED2_INIT:
@1.通過GPIOx_MODER寄存器將PF10引腳設(shè)置為輸出模式,并將[21:20]位 置01
ldr r0,=0x50007000
ldr r1,[r0]
bic r1,r1,#(0x3<<20)
orr r1,r1,#(0x1<<20)
str r1,[r0]
@2.通過GPIOx_OTYPER寄存器將PF10引腳設(shè)置為推挽輸出模式,并將第[10]位 置0
ldr r0,=0x50007004
ldr r1,[r0]
bic r1,r1,#(0x1<<10)
str r1,[r0]
@3.通過GPIOx_OSPEEDR寄存器將PF10引腳設(shè)置為低速輸出模式,并將第[21:20]位 置00
ldr r0,=0x50007008
ldr r1,[r0]
bic r1,r1,#(0x3<<20)
str r1,[r0]
@4.通過GPIOx_PUPDR寄存器將PF10引腳設(shè)置為禁止上下拉電阻模式,并將第[21:20]位 置00
ldr r0,=0x5000700C
ldr r1,[r0]
bic r1,r1,#(0x3<<20)
str r1,[r0]
mov pc,lr
@LED3的所有初始化工作
LED3_INIT:
@1.通過GPIOx_MODER寄存器將PE8引腳設(shè)置為輸出模式,并將[17:16]位 置01
ldr r0,=0x50006000
ldr r1,[r0]
bic r1,r1,#(0x3<<16)
orr r1,r1,#(0x1<<16)
str r1,[r0]
@2.通過GPIOx_OTYPER寄存器將PE8引腳設(shè)置為推挽輸出模式,并將第[8]位 置0
ldr r0,=0x50006004
ldr r1,[r0]
bic r1,r1,#(0x1<<8)
str r1,[r0]
@3.通過GPIOx_OSPEEDR寄存器將PE8引腳設(shè)置為低速輸出模式,并將第[17:16]位 置00
ldr r0,=0x50006008
ldr r1,[r0]
bic r1,r1,#(0x3<<16)
str r1,[r0]
@4.通過GPIOx_PUPDR寄存器將PE8引腳設(shè)置為禁止上下拉電阻模式,并將第[17:16]位 置00
ldr r0,=0x5000600C
ldr r1,[r0]
bic r1,r1,#(0x3<<16)
str r1,[r0]
mov pc,lr
@點(diǎn)亮LED1燈
LED1_ON:
@.通過GPIOx_ODR寄存器將PE10引腳設(shè)置為輸出高電平模式,并將第[10]位 置1
ldr r0,=0x50006014
ldr r1,[r0]
orr r1,r1,#(0x1<<10)
str r1,[r0]
mov pc,lr
@熄滅LED1燈
LED1_OFF:
@.通過GPIOx_ODR寄存器將PE10引腳設(shè)置為輸出低電平模式,并將第[10]位 置0
ldr r0,=0x50006014
ldr r1,[r0]
bic r1,r1,#(0x1<<10)
str r1,[r0]
mov pc,lr
@點(diǎn)亮LED2燈
LED2_ON:
@.通過GPIOx_ODR寄存器將PF10引腳設(shè)置為輸出高電平模式,并將第[10]位 置1
ldr r0,=0x50007014
ldr r1,[r0]
orr r1,r1,#(0x1<<10)
str r1,[r0]
mov pc,lr
@熄滅LED2燈
LED2_OFF:
@.通過GPIOx_ODR寄存器將PF10引腳設(shè)置為輸出低電平模式,并將第[10]位 置0
ldr r0,=0x50007014
ldr r1,[r0]
bic r1,r1,#(0x1<<10)
str r1,[r0]
mov pc,lr
@點(diǎn)亮LED3燈
LED3_ON:
@.通過GPIOx_ODR寄存器將PE8引腳設(shè)置為輸出高電平模式,并將第[8]位 置1
ldr r0,=0x50006014
ldr r1,[r0]
orr r1,r1,#(0x1<<8)
str r1,[r0]
mov pc,lr
@熄滅LED3燈
LED3_OFF:
@.通過GPIOx_ODR寄存器將PE8引腳設(shè)置為輸出低電平模式,并將第[8]位 置0
ldr r0,=0x50006014
ldr r1,[r0]
bic r1,r1,#(0x1<<8)
str r1,[r0]
mov pc,lr
@ 大概1s的延時(shí)函數(shù)
delay_1s:
mov r3, #0x10000000
mm:
cmp r3, #0
subne r3, r3, #1
bne mm
mov pc, lr
.end
二、在C語言中Ox5000A28如何表示一塊地址空間
int *ptr = (int *)0x5000A28
? ? ? ? 在上述代碼中,int *ptr定義了一個(gè)指向整數(shù)類型的指針ptr,(int *)將地址0x5000A28強(qiáng)制轉(zhuǎn)換為整數(shù)類型的指針,后續(xù)可以通過*ptr訪問與修改該地址空間中的值。
三、思維導(dǎo)圖
文章來源:http://www.zghlxwxcb.cn/news/detail-660409.html
?文章來源地址http://www.zghlxwxcb.cn/news/detail-660409.html
到了這里,關(guān)于嵌入式:ARM Day4的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!