天天看點

JZ2440裸機學習之從led學gpioJZ2440學習之gpio

JZ2440學習之gpio

第一步:開發環境配置

  1. 先安裝linux作業系統。

    在windows系統上安裝linux子系統,或者在linux系統上安裝windows虛拟機。(作者使用windowsOS,安裝的ubuntu子系統,燒寫工具用oflash工具)

  2. 搭建交叉編譯環境。 安裝arm-linux-gcc, 或者其他的編譯工具。
  3. 連接配接Opne JTAG線到開發闆和電腦。
  4. 就可以進行裸機程式燒寫。

第二步:檢視原理圖

  1. 檢視原理圖,看led接線原理。
    JZ2440裸機學習之從led學gpioJZ2440學習之gpio
    因為Led一端為3.3v高電平,所有要點亮Led需要2440這邊的管腳為低電平時,Led才會點亮。
    JZ2440裸機學習之從led學gpioJZ2440學習之gpio
    由圖顯示,led1與GPF4相連。是以要點亮led必須讓GPF4處于低電平。
  2. 讓GPF4處于低電平
  • 配置GPF4功能。 輸入:輸出:其他
  • 設定GPF4電平。 高:低
  1. 從使用者手冊中查找GPF4設定功能和電平。
    JZ2440裸機學習之從led學gpioJZ2440學習之gpio
    由圖可以看出GPF4控制寄存器位址為:0x56000050, 它的第【8:9】位用來設定該引腳功能,8:9位為01時為輸出功能。
    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

JZ2440裸機學習之從led學gpioJZ2440學習之gpio

幾個指令解釋一下:

LDR{條件}   目的寄存器     <存儲器位址>

作用:将 存儲器位址 所指位址處連續的4個位元組(1個字)的資料傳送到目的寄存器中。
           
MOV{條件}{S}  目的寄存器,源操作數

MOV指令可完成從另一個寄存器、被移位的寄存器或立即數指派到目的寄存器。
其中S選項為指令的操作結果是否操作CPSR中的條件标志位,
當沒有S選項時指令不更新CPSR中的條件标志位結果。
           
STR{條件}  源寄存器,<存儲器位址>

STR指令用亍從源寄存器中将一個32位的字資料傳送到存儲器中。該指令在程式設計中比較常
用,丏尋址方式靈活多樣,使用方式可參考指令LDR。
           
b

引起處理器轉移到“子程式名”處開始執行,不能傳回,隻能跳轉。