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