JZ2440學習之gpio
第一步:開發環境配置
-
先安裝linux作業系統。
在windows系統上安裝linux子系統,或者在linux系統上安裝windows虛拟機。(作者使用windowsOS,安裝的ubuntu子系統,燒寫工具用oflash工具)
- 搭建交叉編譯環境。 安裝arm-linux-gcc, 或者其他的編譯工具。
- 連接配接Opne JTAG線到開發闆和電腦。
- 就可以進行裸機程式燒寫。
第二步:檢視原理圖
- 檢視原理圖,看led接線原理。 因為Led一端為3.3v高電平,所有要點亮Led需要2440這邊的管腳為低電平時,Led才會點亮。
JZ2440裸機學習之從led學gpioJZ2440學習之gpio 由圖顯示,led1與GPF4相連。是以要點亮led必須讓GPF4處于低電平。JZ2440裸機學習之從led學gpioJZ2440學習之gpio - 讓GPF4處于低電平
- 配置GPF4功能。 輸入:輸出:其他
- 設定GPF4電平。 高:低
- 從使用者手冊中查找GPF4設定功能和電平。 由圖可以看出GPF4控制寄存器位址為:0x56000050, 它的第【8:9】位用來設定該引腳功能,8:9位為01時為輸出功能。
JZ2440裸機學習之從led學gpioJZ2440學習之gpio JZ2440裸機學習之從led學gpioJZ2440學習之gpio 由圖中翻譯:當端口配置為輸出端口時,引腳狀态與相應位相同。
則GPF4就是第【4】位。 則: 給0x56000054的第4位置0(低電平)時,則燈亮。
第三步:編寫代碼
至此,原理已經分析完成,就剩寫代碼了。
.text
.global _start
_start:
LDR R0,=0x56000050 @ R0設為GPFCON寄存器。此寄存器
@ 用于選擇端口B各引腳的功能:
@ 是輸出、是輸入、還是其他
MOV R1,#0x00000100
STR R1,[R0] @ 設定GPF4為輸出口, 位[8:7]=01
LDR R0,=0x56000054 @ R0設為GPBDAT寄存器。此寄存器
@ 用于讀/寫端口B各引腳的資料
MOV R1,#0x00000000 @ 此值改為0x00000010,
@ 可讓LED1熄滅
STR R1,[R0] @ GPF4輸出0,LED1點亮
MAIN_LOOP:
B MAIN_LOOP
16進制0x100轉為二進制為:1 0000 0000
幾個指令解釋一下:
LDR{條件} 目的寄存器 <存儲器位址>
作用:将 存儲器位址 所指位址處連續的4個位元組(1個字)的資料傳送到目的寄存器中。
MOV{條件}{S} 目的寄存器,源操作數
MOV指令可完成從另一個寄存器、被移位的寄存器或立即數指派到目的寄存器。
其中S選項為指令的操作結果是否操作CPSR中的條件标志位,
當沒有S選項時指令不更新CPSR中的條件标志位結果。
STR{條件} 源寄存器,<存儲器位址>
STR指令用亍從源寄存器中将一個32位的字資料傳送到存儲器中。該指令在程式設計中比較常
用,丏尋址方式靈活多樣,使用方式可參考指令LDR。
b
引起處理器轉移到“子程式名”處開始執行,不能傳回,隻能跳轉。