基本概念:
1.GPIO--通用IO口,通過芯片針腳來控制或讀取外設(shè)的數(shù)據(jù)。
2.GPIO口的使用原理,通過設(shè)置GPXXCON, GPXXDAT, GPXXPUL等寄存器來設(shè)置GPIO口的狀態(tài)。
原理圖:
跟硬件相關(guān)的部分,一定要閱讀原理圖,然后通過查找SoC的用戶手冊來查找相應(yīng)的寄存器設(shè)置即可。
底板電路圖:
核心板電路圖:
可知在OK6410上4個LED燈是通過GPM這一組的GPIO口控制的,分別是GPM0-GPM3四組。
然后打開S3C6410X User's Manual,查找GPM相關(guān)的寄存器:
通過上面內(nèi)容找到:
GPMCON 地址 0x7F008820
GPMDAT 地址 0x7F008824
由于LED連接著GPM0-GPM3,所以通過上面的內(nèi)容可以知道,GPMCON設(shè)置的值應(yīng)該為0x00001111,意思是將GPM0-GPM3設(shè)置為輸出,這樣通過設(shè)置GPMDAT[5:0]來控制響應(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,通過tftp下載到開發(fā)板中:
然后就可以看到OK6410板上的四個LED燈開始一起閃爍。
總結(jié):
1.GPIO口的使用其實是SoC外設(shè)控制中最簡單的,只要抓住GPIO的幾個寄存器,將他們的值設(shè)置正確,就可以完成相應(yīng)的控制功能。
2.一定要學會查看SoC的User's Manual的方法,這樣當SoC換成其他品牌時,可以以不變應(yīng)萬變。
3.使用ld來鏈接.o文件時,一般會指定-Ttext選項,表示該代碼會在內(nèi)存的哪個地址加載,通過查看User's Manual,你可以決定這個地址的范圍,如下圖,0x50000000-0x6FFFFFFF地址區(qū)間映射到DRAM上,所以絕大部分的資料中,S3C6410中的內(nèi)存地址都是0x5xxxxxxx類似的地址。也有一些0xcxxxxxxx類似的地址,這是打開SoC中的MMU后進行物理地址和虛擬地址映射后的結(jié)果,如果打開了MMU,就可以使用0xcxxxxxxx這樣的地址,否則無法使用。
-
led燈
+關(guān)注
關(guān)注
22文章
1592瀏覽量
107768 -
嵌入式技術(shù)
+關(guān)注
關(guān)注
10文章
360瀏覽量
35521 -
GPIO
+關(guān)注
關(guān)注
16文章
1189瀏覽量
51847
發(fā)布評論請先 登錄
相關(guān)推薦
評論