S3C2440之裸板GPIO操作
阿新 • • 發佈:2019-01-03
環境:
開發板:JZ2440
系統:Ubuntu 14.04
交叉編譯器:arm-linux-gcc 3.4.5
這一節我們實現的是操作GPIO點亮LED
其實操作GPIO很簡單,分為以下幾個步驟
1.引腳設定為輸入/輸出
2.配置引腳輸出0/1
對於學過微控制器的同學都知道 要想控制硬體 不是一上來就是寫程式碼 而是先檢視原理圖和手冊的基礎上才能完成程式碼的編寫
我使用的開發板是JZ2440 通過瀏覽硬體原理圖可知
開發板的GPIO是接到GPF4 GPF5 GPF6三個引腳 並且接入電路圖為
學過電路或者類比電路的同學都知道 二極體的單方向導通性 如不理解就學好電路吧
看原理圖可知當nLED1 = 0(低電平)時 二極體導通,LED點亮
所以我們點亮LED的方法就是
1.設定GPF4為輸出引腳
2.輸出0(低電平)
知道如上資訊還不夠 我們知道了怎樣操作引腳才能電路led 但是怎麼操作呢?
學過微控制器的同學都知道要用GPIO暫存器操作 所以翻閱2440手冊可以得到
從手冊上得知操作GPFCON和GPFDAT就可以實現我們的目的
1.操作GPFCON[9:8] = 01
2.操作GPFDAT[4] = 0
根據以上的資訊 我們就能學出一個GPIO的操作程式
彙編實現如下
@******************************************************************************
@ File:led_on.S
@ 功能:LED點燈程式,點亮LED1
@***** *************************************************************************
.text
.global _start
_start:
LDR R0,=0x56000050 @ R0設為GPFCON暫存器。此暫存器
@ 用於選擇埠B各引腳的功能:
@ 是輸出、是輸入、還是其他
MOV R1,#0x00000100
STR R1,[R0] @ 設定GPF4為輸出口, 位[9:8]=0b01
LDR R0,=0x56000054 @ R0設為GPBDAT暫存器。此暫存器
@ 用於讀/寫埠B各引腳的資料
MOV R1,#0x00000000 @ 此值改為0x00000010,
@ 可讓LED1熄滅
STR R1,[R0] @ GPF4輸出0,LED1點亮
MAIN_LOOP:
B MAIN_LOOP
c語言程式碼實現如下
#define GPFCON (*(volatile unsigned long *)0x56000050)
#define GPFDAT (*(volatile unsigned long *)0x56000054)
int main()
{
GPFCON = 0x00000500; // 設定GPF4為輸出口, 位[9:8]=0b01
GPFDAT = 0x00000000; // GPF4輸出0,LED1點亮
return 0;
}
通過兩個步驟就能實現對GPIO的控制 當然對GPIO的操作不止這些 但是已經實現了這些 其他還會難嗎?無非就是看手冊操作暫存器的事嗎?一切都不會遠