基本概念:
1.GPIO--通用IO口,通過(guò)芯片針腳來(lái)控制或讀取外設(shè)的數(shù)據(jù)。
2.GPIO口的使用原理,通過(guò)設(shè)置GPXXCON, GPXXDAT, GPXXPUL等寄存器來(lái)設(shè)置GPIO口的狀態(tài)。
原理圖:
跟硬件相關(guān)的部分,一定要閱讀原理圖,然后通過(guò)查找SoC的用戶手冊(cè)來(lái)查找相應(yīng)的寄存器設(shè)置即可。
底板電路圖:
核心板電路圖:
可知在OK6410上4個(gè)LED燈是通過(guò)GPM這一組的GPIO口控制的,分別是GPM0-GPM3四組。
然后打開(kāi)S3C6410X User's Manual,查找GPM相關(guān)的寄存器:
通過(guò)上面內(nèi)容找到:
GPMCON 地址 0x7F008820
GPMDAT 地址 0x7F008824
由于LED連接著GPM0-GPM3,所以通過(guò)上面的內(nèi)容可以知道,GPMCON設(shè)置的值應(yīng)該為0x00001111,意思是將GPM0-GPM3設(shè)置為輸出,這樣通過(guò)設(shè)置GPMDAT[5:0]來(lái)控制響應(yīng)針腳的高低電平,使LED亮或滅。
代碼:(以下代碼參考了友善之臂Tiny6410的匯編代碼,并非原創(chuàng))
匯編代碼:
start.S
Makefile:
1 led.bin: start.o
2 arm-linux-ld -Ttext 0x50008000 -o led.elf $^ 3 arm-linux-objcopy -O binary led.elf led.bin 4 arm-linux-objdump -D led.elf > led_elf.dis 5 %.o : %.S 6 arm-linux-gcc -o $@ $< -c 7 8 %.o : %.c 9 arm-linux-gcc -o $@ $< -c 10 11 clean: 12 rm *.o *.elf *.bin *.dis -rf
然后make,可以得到led.bin,通過(guò)tftp下載到開(kāi)發(fā)板中:
然后就可以看到OK6410板上的四個(gè)LED燈開(kāi)始一起閃爍。
總結(jié):
1.GPIO口的使用其實(shí)是SoC外設(shè)控制中最簡(jiǎn)單的,只要抓住GPIO的幾個(gè)寄存器,將他們的值設(shè)置正確,就可以完成相應(yīng)的控制功能。
2.一定要學(xué)會(huì)查看SoC的User's Manual的方法,這樣當(dāng)SoC換成其他品牌時(shí),可以以不變應(yīng)萬(wàn)變。
3.使用ld來(lái)鏈接.o文件時(shí),一般會(huì)指定-Ttext選項(xiàng),表示該代碼會(huì)在內(nèi)存的哪個(gè)地址加載,通過(guò)查看User's Manual,你可以決定這個(gè)地址的范圍,如下圖,0x50000000-0x6FFFFFFF地址區(qū)間映射到DRAM上,所以絕大部分的資料中,S3C6410中的內(nèi)存地址都是0x5xxxxxxx類似的地址。也有一些0xcxxxxxxx類似的地址,這是打開(kāi)SoC中的MMU后進(jìn)行物理地址和虛擬地址映射后的結(jié)果,如果打開(kāi)了MMU,就可以使用0xcxxxxxxx這樣的地址,否則無(wú)法使用。
-
led燈
+關(guān)注
關(guān)注
22文章
1596瀏覽量
109729 -
嵌入式技術(shù)
+關(guān)注
關(guān)注
10文章
365瀏覽量
41158 -
GPIO
+關(guān)注
關(guān)注
16文章
1280瀏覽量
54072
發(fā)布評(píng)論請(qǐng)先 登錄
嵌入式開(kāi)發(fā)就業(yè)還有前景嗎?
飛凌嵌入式2025嵌入式及邊緣AI技術(shù)論壇圓滿結(jié)束

如何成為一名嵌入式軟件工程師?
飛凌嵌入式「2025嵌入式及邊緣AI技術(shù)論壇」議程公布

嵌入式教育科普|GPIO接口全面解析

如何成為嵌入式開(kāi)發(fā)工程師?
GPIO在嵌入式系統(tǒng)中的作用
為什么嵌入式驅(qū)動(dòng)開(kāi)發(fā)工程師可以拿高薪?
飛凌嵌入式獲批建設(shè)「河北省嵌入式計(jì)算機(jī)控制系統(tǒng)技術(shù)創(chuàng)新中心」

評(píng)論