嵌入式GPIO接口及操作(一)


  GPIO意思就是通用輸入輸出,一些引腳可以通過他們輸出高低電平,或者通過它們讀入引腳的狀態。
對GPIO的操作是對所有硬件的操作最基本的技能。
一、通過寄存器來操作GPIO引腳,一個引腳可以用於輸入、輸出或者其他的特殊功能,那么一定有寄存器來配置這些功能,
對於輸入,就是讀取引腳的狀態,一定可以從寄存器在中讀取到引腳的狀態;對於輸出,也有相應的寄存器,向寄存器中
寫入數據使引腳輸出高低電平;其他特殊功能,有另外的寄存器來控制它。
對於S3C2440來說,同樣的道理,也會有上面所說的寄存器,GPxCON用於配置引腳的功能的(輸入、輸出或其他功能),
GPxDAT用於讀/寫引腳數據;另外GPxUP用於是否使用內部上拉電阻。
1、GPxCON寄存器-配置寄存器
對於S3C2440,除了GPACON特殊外(寄存器每一位對應一個引腳),其它都是寄存器的沒2位控制一根引腳:00表示輸入,
01表示輸出、10表示特殊、11保留不用。
2、GPxDAT寄存器
用於讀/寫引腳:當引腳被設為輸入時,從GPxDAT寄存器讀取引腳的狀態;當引腳被設為輸出時,將數據寫入GPxDAT寄存器
相應的引腳會輸出相應的該低電平。
3、GPxUP寄存器
某位為1時,相應引腳無內部上拉電阻;某位為0時,相應引腳使用上拉電阻。

上拉電阻、下拉電阻的作用:GPIO為第三態時(相當於無外接芯片),引腳的電平狀態有上拉電阻、下拉電阻確定。

二、在開發板上實現LED亮滅及按鍵控制LED
目標:通過讀寫GPIO寄存器來驅動LED、獲取按鍵狀態。
第一個例子使用匯編編寫一個簡單的驅動LED的程序,點亮LED首先看原理圖是怎么接的,拿到原理圖手冊

可以看到led被點亮開發板gpio需要低電平,找到對應的開發板gpio。一目了然GPF4為0時LED1亮,1時滅,但是一個GPIO管腳可以是輸出也可以是輸入,所以,要配置GPIO的功能。

點亮led:
1、配置gpio的功能為輸出,2、設置gpio輸出高\低
配置輸出功能,在數據手冊上可以看到一個寄存器GPFCON,GPF4對應的位【9:8】做出相應的配置,管腳的復用
設置寄存器在數據手冊上可以看到一個寄存器GPFDAT,【7:0】,當是輸出功能時一位對應功能寄存器的一個引腳。這樣4位就對應GPF4了。
GPFCON地址0x56000050  GPFDAT地址0x56000054
下面是匯編寫的點亮一個LED程序:

led_on.S

.global _start  
_start:  
            LDR R0,= 0x56000050  @R0為GPFCON寄存器,此寄存器用於選擇引腳的功能  
            MOV R1,#0x00000100     
            STR R1,[R0] @將數值寫進寄存器里也就是配置了引腳的相應的功能  
            LDR R0,= 0x56000054 @R0為GPFDAT寄存器,此寄存器用於設置相應管腳的值,高低電平  
            MOV R1,#0x00000000   @設置相應管腳輸出0電平,可讓LED1燈亮  
            STR R1,[R0] @將數值寫進寄存器里也就是設置了引腳的相應的輸出電平  
MAIN_LOOP:  
                    B    MAIN_LOOP     @循環

下面是相應的Makefile

led_on.bin : led_on.S  
    arm-linux-gcc -g -c -o led_on.o led_on.S  
    arm-linux-ld -Ttext 0x0000000  -g led_on.o -o led_on.elf  
    arm-linux-objcopy -O binary -S led_on.elf led_on.bin  
clean:  
    rm -f led_on.bin led_on.elf *.o

將生成的bin文件燒到開發板即可點亮LED。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM