嵌入式裸機GPIO和LED學習筆記

2021-10-08 17:15:37 字數 2794 閱讀 4532

gpio:general purpose input output 通用輸入輸出

gpio就是晶元的引腳(晶元上的引腳有些不是gpio,只有一部分是),作為gpio的這類引腳,他的功能和特點是可以被程式設計控制它的工作模式,也可以程式設計控制他的電壓高低等。

通過之前的分析我們知道,我們設計電路時就把led接在了乙個gpio上,這樣我們就可以通過程式設計控制gpio的模式和輸入輸出值來操控led亮還是滅。

通過查詢電路原理圖可知,這四個led如果需要點亮的話,我們要將對應的gpio設定為低電平,並且四個led對應的gpio介面如下:

通過查詢資料手冊,可以知道gpj0有如下六個暫存器

gpj0con :用來配置各引腳的工作模式,本次我們將其配置為output狀態。即:0x1111 (address :0xe0200240)

gpj0dat :當埠被配置為輸出時埠,引腳的狀態與對應位相同。即該引腳對應為低電位,則控制led燈亮

gpj0pud :控制引腳內部弱上拉、下拉

gpj0drv :配置gpio引腳的驅動能力

gpj0conpdn :power down mode configuration register

gpj0pudpdn :port group gpj0 power down mode pullup/ down register

實際上真正操控led的硬體,主要的有:gpj0con, gpj0dat 這麼2個。

如何點亮led,程式設計的步驟是:

1、操控gpj0con暫存器中,選中output模式

2、操控gpj0dat暫存器,相應的位設定為0

cmp(compare)指令進行比較兩個運算元的大小

例:cmp oprd1,oprd2
為第乙個操作減去第二個運算元,但不影響兩個運算元的值,它影響flag的cf(進製標誌carry),zf(zero標誌),

of(overflow溢位標誌),af(半進製標誌),pf(parity 奇偶標誌).

我們怎麼判斷大小呢?

若執行指令後:zf=1,則說明兩個數相等,因為zero為1說明結果為0.

當無符號時:

若cf=1,則說明了有進製或借位,cmp是進行的減操作,故可以看出為借位,所以,此時oprd1oprd2.

當有符號時:

若sf=0,of=0 則說明了此時的值為正數,沒有溢位,可以直觀的看出,oprd1>oprd2;

若sf=1,of=0 則說明了此時的值為負數,沒有溢位,則為oprd1oprd2;

最後兩個可以作出這種判斷的原因是,溢位的本質問題:

兩數同為正,相加,值為負,則說明溢位

兩數同為負,相加,值為正,則說明溢位

故有,正正得負則溢位,負負得正則溢位

tst:邏輯處理指令,用於把乙個暫存器的內容和另乙個暫存器的內容或立即數進行按位的與運算,並根據運算結果更新cpsr中條件標誌位的值。當前運算結果為1,則z=0;當前運算結果為0,則z=1

bne: 資料跳轉指令,標誌暫存器中z標誌位不等於零時, 跳轉到bne後標籤處

beq: 資料跳轉指令,標誌暫存器中z標誌位等於零時, 跳轉到beq後標籤處

mov pc,lr //從子程式返回,把lr給pc

lr(r14) :儲存了返回位址

pc (r15) :表示當前位址

源**

#define jpg0con 0xe0200240

//把0x11111111寫入0xe0200240(jpg0con)

//暫存器間接定址, 將0x11111111寫入到0xe0200240為位址的記憶體中去

//使用位操作,實現對jpg0dat暫存器的操作,進而控制led燈狀態

flash :

ldr r0,=(

1<<3)

|(0<<4)

|(1<<5)

// 使用左移實現

//暫存器間接定址, 將r0寫入到0xe0200244為位址的記憶體中去

bl delay

ldr r0,=(

0<<3)

|(1<<4)

|(0<<5)

//暫存器間接定址, 將r0寫入到0xe0200244為位址的記憶體中去

bl delay

b flash

//延時函式,用來控制led 閃爍的間隔時間

delay :

ldr r2,

=9000000

ldr r3,

=0x0

delay_loop :

sub r2, r2 ,#1

//r2 =r2-1

cmp r2,r3 // cmp會影響z標誌位,如果r2=r3 則z=1 ,下一句eq就會成立

bne delay_loop

mov pc,lr

嵌入式學習筆記之GPIO 點亮乙個LED

目錄 點亮led 如何點亮乙個led led驅動方式 2440啟動流程和gpio操作 啟動流程介紹 nor啟動 nand 啟動 gpio介面介紹 gpxcon暫存器 gpxdat暫存器 gpxup暫存器 怎麼使用軟體訪問硬體 訪問單個引腳 以匯流排方式訪問硬體 點亮led 暫存器配置 檢視原理圖,確...

嵌入式Linux 13 裸機 C語言LED驅動

此筆記由個人整理 塞上蒼鷹 fly 課程來自 正點原子 手把手教你學linux global start start 設定處理器進入svc模式 mrs r0,cpsr 讀取cpsr到r0 bic r0,r0,0x1f 對cpsr低五位清零 orr r0,r0,0x13 使用svc模式 msr cps...

嵌入式學習之裸機開發前奏

為裸機開發做鋪墊 我們需 安裝交叉編譯工具鏈 就是在linux下安裝軟體 並且進行相關配置方便裸機開發時使用 熟悉makefile流程 方便裸機開發工程管理 知道各個檔案字尾的作用以及來歷 mkv210 imge.c程式的作用以及內部 區分ubs串列埠燒寫和sd卡燒寫的區別 1 我們使用安裝包的形式...